aboutsummaryrefslogtreecommitdiff
path: root/callback.go
diff options
context:
space:
mode:
authorG.J.R. Timmer <gjr.timmer@gmail.com>2019-08-21 23:04:45 +0200
committerGert-Jan Timmer <gjr.timmer@gmail.com>2019-08-22 10:59:46 +0200
commit2ea5857c0eb3179b078ce5fb881ace11eb28f285 (patch)
tree0d2286de5b9dd161c149dcfe43534b1c6e73cc64 /callback.go
parentMerge pull request #734 from gwd/out/fix-libsqlite3-darwin-build (diff)
downloadgolite-2ea5857c0eb3179b078ce5fb881ace11eb28f285.tar.gz
golite-2ea5857c0eb3179b078ce5fb881ace11eb28f285.tar.xz
Closes #597
Diffstat (limited to 'callback.go')
-rw-r--r--callback.go24
1 files changed, 21 insertions, 3 deletions
diff --git a/callback.go b/callback.go
index e8c492b..f7fe8d0 100644
--- a/callback.go
+++ b/callback.go
@@ -83,8 +83,22 @@ func authorizerTrampoline(handle uintptr, op int, arg1 *C.char, arg2 *C.char, ar
return callback(op, C.GoString(arg1), C.GoString(arg2), C.GoString(arg3))
}
-// Use handles to avoid passing Go pointers to C.
+//export preUpdateHookTrampoline
+func preUpdateHookTrampoline(handle uintptr, dbHandle uintptr, op int, db *C.char, table *C.char, oldrowid int64, newrowid int64) {
+ hval := lookupHandleVal(handle)
+ data := SQLitePreUpdateData{
+ Conn: hval.db,
+ Op: op,
+ DatabaseName: C.GoString(db),
+ TableName: C.GoString(table),
+ OldRowID: oldrowid,
+ NewRowID: newrowid,
+ }
+ callback := hval.val.(func(SQLitePreUpdateData))
+ callback(data)
+}
+// Use handles to avoid passing Go pointers to C.
type handleVal struct {
db *SQLiteConn
val interface{}
@@ -103,7 +117,7 @@ func newHandle(db *SQLiteConn, v interface{}) uintptr {
return i
}
-func lookupHandle(handle uintptr) interface{} {
+func lookupHandleVal(handle uintptr) handleVal {
handleLock.Lock()
defer handleLock.Unlock()
r, ok := handleVals[handle]
@@ -114,7 +128,11 @@ func lookupHandle(handle uintptr) interface{} {
panic("invalid handle")
}
}
- return r.val
+ return r
+}
+
+func lookupHandle(handle uintptr) interface{} {
+ return lookupHandleVal(handle).val
}
func deleteHandles(db *SQLiteConn) {