| package main |
| |
| import ( |
| "database/sql" |
| "github.com/mattn/go-sqlite3" |
| "log" |
| "os" |
| ) |
| |
| func main() { |
| sqlite3conn := []*sqlite3.SQLiteConn{} |
| sql.Register("sqlite3_with_hook_example", |
| &sqlite3.SQLiteDriver{ |
| ConnectHook: func(conn *sqlite3.SQLiteConn) error { |
| sqlite3conn = append(sqlite3conn, conn) |
| return nil |
| }, |
| }) |
| os.Remove("./foo.db") |
| os.Remove("./bar.db") |
| |
| destDb, err := sql.Open("sqlite3_with_hook_example", "./foo.db") |
| if err != nil { |
| log.Fatal(err) |
| } |
| defer destDb.Close() |
| destDb.Ping() |
| |
| _, err = destDb.Exec("create table foo(id int, value text)") |
| if err != nil { |
| log.Fatal(err) |
| } |
| _, err = destDb.Exec("insert into foo values(1, 'foo')") |
| if err != nil { |
| log.Fatal(err) |
| } |
| _, err = destDb.Exec("insert into foo values(2, 'bar')") |
| if err != nil { |
| log.Fatal(err) |
| } |
| _, err = destDb.Query("select * from foo") |
| if err != nil { |
| log.Fatal(err) |
| } |
| srcDb, err := sql.Open("sqlite3_with_hook_example", "./bar.db") |
| if err != nil { |
| log.Fatal(err) |
| } |
| defer srcDb.Close() |
| srcDb.Ping() |
| |
| bk, err := sqlite3conn[1].Backup("main", sqlite3conn[0], "main") |
| if err != nil { |
| log.Fatal(err) |
| } |
| |
| _, err = bk.Step(-1) |
| if err != nil { |
| log.Fatal(err) |
| } |
| _, err = destDb.Query("select * from foo") |
| if err != nil { |
| log.Fatal(err) |
| } |
| _, err = destDb.Exec("insert into foo values(3, 'bar')") |
| if err != nil { |
| log.Fatal(err) |
| } |
| |
| bk.Finish() |
| } |