aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-10-01 09:50:21 -0300
committerEuAndreh <eu@euandre.org>2024-10-01 09:50:21 -0300
commit9d5ca3900790d2f62ae62b8a7fe8a052fef00bb5 (patch)
tree6395f46091eb807166e064c1f9b3ee9cc615ef25
parentRemove unwanted fieatures on code and tests (diff)
downloadgolite-9d5ca3900790d2f62ae62b8a7fe8a052fef00bb5.tar.gz
golite-9d5ca3900790d2f62ae62b8a7fe8a052fef00bb5.tar.xz
Recover aggregation and collation trampoline, alongside their tests
-rw-r--r--src/golite.go36
-rw-r--r--tests/golite.go6
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 },