summaryrefslogtreecommitdiffstats
path: root/dependencies/pkg/mod/github.com/mattn/go-sqlite3@v1.14.16/sqlite3_opt_preupdate_hook_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'dependencies/pkg/mod/github.com/mattn/go-sqlite3@v1.14.16/sqlite3_opt_preupdate_hook_test.go')
-rw-r--r--dependencies/pkg/mod/github.com/mattn/go-sqlite3@v1.14.16/sqlite3_opt_preupdate_hook_test.go128
1 files changed, 128 insertions, 0 deletions
diff --git a/dependencies/pkg/mod/github.com/mattn/go-sqlite3@v1.14.16/sqlite3_opt_preupdate_hook_test.go b/dependencies/pkg/mod/github.com/mattn/go-sqlite3@v1.14.16/sqlite3_opt_preupdate_hook_test.go
new file mode 100644
index 0000000..20c8766
--- /dev/null
+++ b/dependencies/pkg/mod/github.com/mattn/go-sqlite3@v1.14.16/sqlite3_opt_preupdate_hook_test.go
@@ -0,0 +1,128 @@
+// Copyright (C) 2019 G.J.R. Timmer <gjr.timmer@gmail.com>.
+// Copyright (C) 2018 segment.com <friends@segment.com>
+//
+// Use of this source code is governed by an MIT-style
+// license that can be found in the LICENSE file.
+
+// +build sqlite_preupdate_hook
+
+package sqlite3
+
+import (
+ "database/sql"
+ "testing"
+)
+
+type preUpdateHookDataForTest struct {
+ databaseName string
+ tableName string
+ count int
+ op int
+ oldRow []interface{}
+ newRow []interface{}
+}
+
+func TestPreUpdateHook(t *testing.T) {
+ var events []preUpdateHookDataForTest
+
+ sql.Register("sqlite3_PreUpdateHook", &SQLiteDriver{
+ ConnectHook: func(conn *SQLiteConn) error {
+ conn.RegisterPreUpdateHook(func(data SQLitePreUpdateData) {
+ eval := -1
+ oldRow := []interface{}{eval}
+ if data.Op != SQLITE_INSERT {
+ err := data.Old(oldRow...)
+ if err != nil {
+ t.Fatalf("Unexpected error calling SQLitePreUpdateData.Old: %v", err)
+ }
+ }
+
+ eval2 := -1
+ newRow := []interface{}{eval2}
+ if data.Op != SQLITE_DELETE {
+ err := data.New(newRow...)
+ if err != nil {
+ t.Fatalf("Unexpected error calling SQLitePreUpdateData.New: %v", err)
+ }
+ }
+
+ // tests dest bound checks in loop
+ var tooSmallRow []interface{}
+ if data.Op != SQLITE_INSERT {
+ err := data.Old(tooSmallRow...)
+ if err != nil {
+ t.Fatalf("Unexpected error calling SQLitePreUpdateData.Old: %v", err)
+ }
+ if len(tooSmallRow) != 0 {
+ t.Errorf("Expected tooSmallRow to be empty, got: %v", tooSmallRow)
+ }
+ }
+
+ events = append(events, preUpdateHookDataForTest{
+ databaseName: data.DatabaseName,
+ tableName: data.TableName,
+ count: data.Count(),
+ op: data.Op,
+ oldRow: oldRow,
+ newRow: newRow,
+ })
+ })
+ return nil
+ },
+ })
+
+ db, err := sql.Open("sqlite3_PreUpdateHook", ":memory:")
+ if err != nil {
+ t.Fatal("Failed to open database:", err)
+ }
+ defer db.Close()
+
+ statements := []string{
+ "create table foo (id integer primary key)",
+ "insert into foo values (9)",
+ "update foo set id = 99 where id = 9",
+ "delete from foo where id = 99",
+ }
+ for _, statement := range statements {
+ _, err = db.Exec(statement)
+ if err != nil {
+ t.Fatalf("Unable to prepare test data [%v]: %v", statement, err)
+ }
+ }
+
+ if len(events) != 3 {
+ t.Errorf("Events should be 3 entries, got: %d", len(events))
+ }
+
+ if events[0].op != SQLITE_INSERT {
+ t.Errorf("Op isn't as expected: %v", events[0].op)
+ }
+
+ if events[1].op != SQLITE_UPDATE {
+ t.Errorf("Op isn't as expected: %v", events[1].op)
+ }
+
+ if events[1].count != 1 {
+ t.Errorf("Expected event row 1 to have 1 column, had: %v", events[1].count)
+ }
+
+ newRow_0_0 := events[0].newRow[0].(int64)
+ if newRow_0_0 != 9 {
+ t.Errorf("Expected event row 0 new column 0 to be == 9, got: %v", newRow_0_0)
+ }
+
+ oldRow_1_0 := events[1].oldRow[0].(int64)
+ if oldRow_1_0 != 9 {
+ t.Errorf("Expected event row 1 old column 0 to be == 9, got: %v", oldRow_1_0)
+ }
+
+ newRow_1_0 := events[1].newRow[0].(int64)
+ if newRow_1_0 != 99 {
+ t.Errorf("Expected event row 1 new column 0 to be == 99, got: %v", newRow_1_0)
+ }
+
+ oldRow_2_0 := events[2].oldRow[0].(int64)
+ if oldRow_2_0 != 99 {
+ t.Errorf("Expected event row 1 new column 0 to be == 99, got: %v", oldRow_2_0)
+ }
+}