From 784c625194de154b7be313cd0ce95d5b2b0a0574 Mon Sep 17 00:00:00 2001 From: Macaully James Muir Date: Mon, 16 Nov 2020 15:40:44 +0100 Subject: [PATCH] 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. --- doc.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/doc.go b/doc.go index c721f770..b15f7822 100644 --- a/doc.go +++ b/doc.go @@ -93,19 +93,32 @@ you need to set ConnectHook and get the SQLiteConn. Go SQlite3 Extensions -If you want to register Go functions as SQLite extension functions, -call RegisterFunction from ConnectHook. +If you want to register Go functions as SQLite extension functions +you can make a custom driver by calling RegisterFunction from +ConnectHook. regex = func(re, s string) (bool, error) { return regexp.MatchString(re, s) } - sql.Register("sqlite3_with_go_func", + sql.Register("sqlite3_extended", &sqlite3.SQLiteDriver{ ConnectHook: func(conn *sqlite3.SQLiteConn) error { 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. */