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) }