diff options
Diffstat (limited to 'doc/examples/limit')
-rw-r--r-- | doc/examples/limit/limit.go | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/doc/examples/limit/limit.go b/doc/examples/limit/limit.go deleted file mode 100644 index c1adfe8..0000000 --- a/doc/examples/limit/limit.go +++ /dev/null @@ -1,113 +0,0 @@ -package main - -import ( - "database/sql" - "fmt" - "log" - "os" - "strings" - - "github.com/mattn/go-sqlite3" -) - -func createBulkInsertQuery(n int, start int) (query string, args []any) { - values := make([]string, n) - args = make([]any, n*2) - pos := 0 - for i := 0; i < n; i++ { - values[i] = "(?, ?)" - args[pos] = start + i - args[pos+1] = fmt.Sprintf("こんにちは世界%03d", i) - pos += 2 - } - query = fmt.Sprintf( - "insert into foo(id, name) values %s", - strings.Join(values, ", "), - ) - return -} - -func bulkInsert(db *sql.DB, query string, args []any) (err error) { - stmt, err := db.Prepare(query) - if err != nil { - return - } - - _, err = stmt.Exec(args...) - if err != nil { - return - } - - return -} - -func main() { - var sqlite3conn *sqlite3.SQLiteConn - sql.Register("sqlite3_with_limit", &sqlite3.SQLiteDriver{ - ConnectHook: func(conn *sqlite3.SQLiteConn) error { - sqlite3conn = conn - return nil - }, - }) - - os.Remove("./foo.db") - db, err := sql.Open("sqlite3_with_limit", "./foo.db") - if err != nil { - log.Fatal(err) - } - defer db.Close() - - sqlStmt := ` - create table foo (id integer not null primary key, name text); - delete from foo; - ` - _, err = db.Exec(sqlStmt) - if err != nil { - log.Printf("%q: %s\n", err, sqlStmt) - return - } - - if sqlite3conn == nil { - log.Fatal("not set sqlite3 connection") - } - - limitVariableNumber := sqlite3conn.GetLimit(sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER) - log.Printf("default SQLITE_LIMIT_VARIABLE_NUMBER: %d", limitVariableNumber) - - num := 400 - query, args := createBulkInsertQuery(num, 0) - err = bulkInsert(db, query, args) - if err != nil { - log.Fatal(err) - } - - smallLimitVariableNumber := 100 - sqlite3conn.SetLimit(sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER, smallLimitVariableNumber) - - limitVariableNumber = sqlite3conn.GetLimit(sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER) - log.Printf("updated SQLITE_LIMIT_VARIABLE_NUMBER: %d", limitVariableNumber) - - query, args = createBulkInsertQuery(num, num) - err = bulkInsert(db, query, args) - if err != nil { - if err != nil { - log.Printf("expect failed since SQLITE_LIMIT_VARIABLE_NUMBER is too small: %v", err) - } - } - - bigLimitVariableNumber := 999999 - sqlite3conn.SetLimit(sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER, bigLimitVariableNumber) - limitVariableNumber = sqlite3conn.GetLimit(sqlite3.SQLITE_LIMIT_VARIABLE_NUMBER) - log.Printf("set SQLITE_LIMIT_VARIABLE_NUMBER: %d", bigLimitVariableNumber) - log.Printf("updated SQLITE_LIMIT_VARIABLE_NUMBER: %d", limitVariableNumber) - - query, args = createBulkInsertQuery(500, num+num) - err = bulkInsert(db, query, args) - if err != nil { - if err != nil { - log.Fatal(err) - } - } - - log.Println("no error if SQLITE_LIMIT_VARIABLE_NUMBER > 999") -} |