diff options
Diffstat (limited to 'tests/functional/extension.go')
-rw-r--r-- | tests/functional/extension.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/functional/extension.go b/tests/functional/extension.go new file mode 100644 index 0000000..81c4494 --- /dev/null +++ b/tests/functional/extension.go @@ -0,0 +1,79 @@ +package main + +import ( + "database/sql" + "fmt" + "log" + "os" + "reflect" + + "golite" +) + + + +func fatalif(err error) { + if err != nil { + log.Fatal(err) + } +} + +func eq(given any, expected any) { + if !reflect.DeepEqual(given, expected) { + fmt.Fprintf(os.Stderr, "given != expected\n") + fmt.Fprintf(os.Stderr, "given: %#v\n", given) + fmt.Fprintf(os.Stderr, "expected: %#v\n", expected) + } +} + + + +func main() { + driver := golite.SQLiteDriver{ + Extensions: []string{ + "streq", + }, + } + sql.Register("sqlite3-streq", &driver) + + db, err := sql.Open("sqlite3-streq", ":memory:") + fatalif(err) + defer db.Close() + + rows, err := db.Query(` + SELECT str, n FROM ( + SELECT 'hello' as str, 1 as n + UNION + SELECT 'not' as str, 2 as n + UNION + SELECT 'hello' as str, 3 as n + ) WHERE streq(str, 'hello'); + `) + fatalif(err) + defer rows.Close() + + type pairT struct{ + str string + id int + } + var pairs []pairT + for rows.Next() { + var pair pairT + err := rows.Scan(&pair.str, &pair.id) + fatalif(err) + pairs = append(pairs, pair) + } + fatalif(rows.Err()) + + expected := []pairT{ + pairT{ + str: "hello", + id: 1, + }, + pairT{ + str: "hello", + id: 3, + }, + } + eq(pairs, expected) +} |