github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/mattn/go-sqlite3/_example/hook/hook.go (about) 1 package main 2 3 import ( 4 "database/sql" 5 "github.com/insionng/yougam/libraries/mattn/go-sqlite3" 6 "log" 7 "os" 8 ) 9 10 func main() { 11 sqlite3conn := []*sqlite3.SQLiteConn{} 12 sql.Register("sqlite3_with_hook_example", 13 &sqlite3.SQLiteDriver{ 14 ConnectHook: func(conn *sqlite3.SQLiteConn) error { 15 sqlite3conn = append(sqlite3conn, conn) 16 return nil 17 }, 18 }) 19 os.Remove("./foo.db") 20 os.Remove("./bar.db") 21 22 destDb, err := sql.Open("sqlite3_with_hook_example", "./foo.db") 23 if err != nil { 24 log.Fatal(err) 25 } 26 defer destDb.Close() 27 destDb.Ping() 28 29 _, err = destDb.Exec("create table foo(id int, value text)") 30 if err != nil { 31 log.Fatal(err) 32 } 33 _, err = destDb.Exec("insert into foo values(1, 'foo')") 34 if err != nil { 35 log.Fatal(err) 36 } 37 _, err = destDb.Exec("insert into foo values(2, 'bar')") 38 if err != nil { 39 log.Fatal(err) 40 } 41 _, err = destDb.Query("select * from foo") 42 if err != nil { 43 log.Fatal(err) 44 } 45 srcDb, err := sql.Open("sqlite3_with_hook_example", "./bar.db") 46 if err != nil { 47 log.Fatal(err) 48 } 49 defer srcDb.Close() 50 srcDb.Ping() 51 52 bk, err := sqlite3conn[1].Backup("main", sqlite3conn[0], "main") 53 if err != nil { 54 log.Fatal(err) 55 } 56 57 _, err = bk.Step(-1) 58 if err != nil { 59 log.Fatal(err) 60 } 61 _, err = destDb.Query("select * from foo") 62 if err != nil { 63 log.Fatal(err) 64 } 65 _, err = destDb.Exec("insert into foo values(3, 'bar')") 66 if err != nil { 67 log.Fatal(err) 68 } 69 70 bk.Finish() 71 }