diff options
author | G.J.R. Timmer <gjr.timmer@gmail.com> | 2019-08-21 23:04:45 +0200 |
---|---|---|
committer | Gert-Jan Timmer <gjr.timmer@gmail.com> | 2019-08-22 10:59:46 +0200 |
commit | 2ea5857c0eb3179b078ce5fb881ace11eb28f285 (patch) | |
tree | 0d2286de5b9dd161c149dcfe43534b1c6e73cc64 /callback.go | |
parent | Merge pull request #734 from gwd/out/fix-libsqlite3-darwin-build (diff) | |
download | golite-2ea5857c0eb3179b078ce5fb881ace11eb28f285.tar.gz golite-2ea5857c0eb3179b078ce5fb881ace11eb28f285.tar.xz |
Closes #597
Diffstat (limited to 'callback.go')
-rw-r--r-- | callback.go | 24 |
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) { |