Files
go-sqlite3/example/extension/extension.go
Carlos Castillo 976f43861f Added error return to ConnectHook and fixed extension example
The ConnectHook field of an SQLiteDriver should return an error in
case something bad happened during the hook.

The extension example needs to load the extension in a ConnectHook,
otherwise the extension is only loaded in a single connection in the pool.
By putting the extension loading in the ConnectHook, its called for every
connection that is opened by the sql.DB.
2013-08-24 20:04:51 -07:00

69 lines
1.2 KiB
Go

package main
import (
"database/sql"
"fmt"
"github.com/mattn/go-sqlite3"
"log"
)
func main() {
const (
use_hook = true
load_query = "SELECT load_extension('sqlite3_mod_regexp.dll')"
)
sql.Register("sqlite3_with_extensions",
&sqlite3.SQLiteDriver{
EnableLoadExtension: true,
ConnectHook: func(c *sqlite3.SQLiteConn) error {
if use_hook {
stmt, err := c.Prepare(load_query)
if err != nil {
return err
}
_, err = stmt.Exec(nil)
if err != nil {
return err
}
return stmt.Close()
}
return nil
},
})
db, err := sql.Open("sqlite3_with_extensions", ":memory:")
if err != nil {
log.Fatal(err)
}
defer db.Close()
if !use_hook {
if _, err = db.Exec(load_query); err != nil {
log.Fatal(err)
}
}
// Force db to make a new connection in pool
// by putting the original in a transaction
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
defer tx.Commit()
// New connection works (hopefully!)
rows, err := db.Query("select 'hello world' where 'hello world' regexp '^hello.*d$'")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var helloworld string
rows.Scan(&helloworld)
fmt.Println(helloworld)
}
}