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  }