diff options
author | EuAndreh <eu@euandre.org> | 2024-10-01 09:50:21 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-10-01 09:50:21 -0300 |
commit | 9d5ca3900790d2f62ae62b8a7fe8a052fef00bb5 (patch) | |
tree | 6395f46091eb807166e064c1f9b3ee9cc615ef25 | |
parent | Remove unwanted fieatures on code and tests (diff) | |
download | golite-9d5ca3900790d2f62ae62b8a7fe8a052fef00bb5.tar.gz golite-9d5ca3900790d2f62ae62b8a7fe8a052fef00bb5.tar.xz |
Recover aggregation and collation trampoline, alongside their tests
-rw-r--r-- | src/golite.go | 36 | ||||
-rw-r--r-- | tests/golite.go | 6 |
2 files changed, 35 insertions, 7 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)()) diff --git a/tests/golite.go b/tests/golite.go index ee0f658..d833a0d 100644 --- a/tests/golite.go +++ b/tests/golite.go @@ -3953,9 +3953,9 @@ func MainTest() { { "TestVersion", TestVersion }, { "TestStringContainingZero", TestStringContainingZero }, { "TestDateTimeNow", TestDateTimeNow }, - // { "TestAggregatorRegistration", TestAggregatorRegistration }, - // { "TestAggregatorRegistration_GenericReturn", TestAggregatorRegistration_GenericReturn }, - // { "TestCollationRegistration", TestCollationRegistration }, + { "TestAggregatorRegistration", TestAggregatorRegistration }, + { "TestAggregatorRegistration_GenericReturn", TestAggregatorRegistration_GenericReturn }, + { "TestCollationRegistration", TestCollationRegistration }, { "TestDeclTypes", TestDeclTypes }, { "TestPinger", TestPinger }, { "TestUpdateAndTransactionHooks", TestUpdateAndTransactionHooks }, |