Expand documentation for extension functions (#880)

This relates to #870; it's not immediately clear that you need to pass a
different driver name to sql.Open from the documentation.
This commit is contained in:
Macaully James Muir
2020-11-16 15:40:44 +01:00
committed by GitHub
parent 92f580b350
commit 784c625194

19
doc.go
View File

@@ -93,19 +93,32 @@ you need to set ConnectHook and get the SQLiteConn.
Go SQlite3 Extensions Go SQlite3 Extensions
If you want to register Go functions as SQLite extension functions, If you want to register Go functions as SQLite extension functions
call RegisterFunction from ConnectHook. you can make a custom driver by calling RegisterFunction from
ConnectHook.
regex = func(re, s string) (bool, error) { regex = func(re, s string) (bool, error) {
return regexp.MatchString(re, s) return regexp.MatchString(re, s)
} }
sql.Register("sqlite3_with_go_func", sql.Register("sqlite3_extended",
&sqlite3.SQLiteDriver{ &sqlite3.SQLiteDriver{
ConnectHook: func(conn *sqlite3.SQLiteConn) error { ConnectHook: func(conn *sqlite3.SQLiteConn) error {
return conn.RegisterFunc("regexp", regex, true) return conn.RegisterFunc("regexp", regex, true)
}, },
}) })
You can then use the custom driver by passing its name to sql.Open.
var i int
conn, err := sql.Open("sqlite3_extended", "./foo.db")
if err != nil {
panic(err)
}
err = db.QueryRow(`SELECT regexp("foo.*", "seafood")`).Scan(&i)
if err != nil {
panic(err)
}
See the documentation of RegisterFunc for more details. See the documentation of RegisterFunc for more details.
*/ */