aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/golite.go36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/golite.go b/src/golite.go
index b374fd3..cfc1484 100644
--- a/src/golite.go
+++ b/src/golite.go
@@ -33,10 +33,8 @@ Premises:
#include <stdlib.h>
#include <sqlite3.h>
-void callbackTrampoline(sqlite3_context*, int, sqlite3_value**);
-void stepTrampoline(sqlite3_context*, int, sqlite3_value**);
-void doneTrampoline(sqlite3_context*);
-
+void stepTrampoline(sqlite3_context*, int, sqlite3_value**);
+void doneTrampoline(sqlite3_context*);
int compareTrampoline(void*, int, char*, int, char*);
int commitHookTrampoline(void*);
void rollbackHookTrampoline(void*);
@@ -111,6 +109,36 @@ func (b *SQLiteBackup) Close() error {
return nil
}
+//export stepTrampoline
+func stepTrampoline(
+ ctx *C.sqlite3_context,
+ argc C.int,
+ argv **C.sqlite3_value,
+) {
+ const size = (math.MaxInt32 - 1) /
+ unsafe.Sizeof((*C.sqlite3_value)(nil))
+ args := (*[size]*C.sqlite3_value)(unsafe.Pointer(argv))
+ slice := args[:int(argc):int(argc)]
+ lookupHandle(C.sqlite3_user_data(ctx)).(*aggInfo).Step(ctx, slice)
+}
+
+//export doneTrampoline
+func doneTrampoline(ctx *C.sqlite3_context) {
+ lookupHandle(C.sqlite3_user_data(ctx)).(*aggInfo).Done(ctx)
+}
+
+//export compareTrampoline
+func compareTrampoline(
+ handlePtr unsafe.Pointer,
+ la C.int,
+ a *C.char,
+ lb C.int,
+ b *C.char,
+) C.int {
+ cmpFn := lookupHandle(handlePtr).(func(string, string) int)
+ return C.int(cmpFn(C.GoStringN(a, la), C.GoStringN(b, lb)))
+}
+
//export commitHookTrampoline
func commitHookTrampoline(handle unsafe.Pointer) C.int {
return C.int(lookupHandle(handle).(func() int)())