aboutsummaryrefslogtreecommitdiff
path: root/tests/functional/extension.go
diff options
context:
space:
mode:
Diffstat (limited to 'tests/functional/extension.go')
-rw-r--r--tests/functional/extension.go79
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)
+}