Add jextract module: SQLite bindings generated with jextract, FFM arenas, C strings, out-parameters, errors, upcalls, and a JMH comparison with JNI
jextract-25 early-access build (25-jextract+2-4) on JDK 25.0.5+8 against SQLite 3.45.1: 25 functions and 13 constants generated into 4 committed files (the whole header would be 83 files), a small Db wrapper, the four arena kinds used wrongly on purpose, ADDRESS vs C_POINTER zero-length vs unbounded segments and the SIGSEGV from getString on a NULL pointer, sqlite3_open out-parameter, return codes to exceptions, a sqlite3_exec upcall and the VM exit when it throws, the JDK 25 native-access warning and --illegal-native-access=deny, library loading failures, and a JMH benchmark of FFM vs hand-written JNI vs plain Java (indicative only: shared 2-CPU machine). Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b6Kg9RWSTJzyz6KP9X
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
$ scripts/gen.sh
|
||||
$ find generated -name '*.java' | wc -l
|
||||
4
|
||||
$ wc -l $(find generated -name '*.java') | sort -n
|
||||
63 generated/demo/sqlite/sqlite3_h$shared.java
|
||||
69 generated/demo/sqlite/sqlite3_bind_text$x0.java
|
||||
73 generated/demo/sqlite/sqlite3_exec$callback.java
|
||||
1662 generated/demo/sqlite/sqlite3_h.java
|
||||
1867 total
|
||||
$ jextract --output <tmp> -t demo.sqlite.full -l sqlite3 /usr/include/sqlite3.h # no filters: the whole header
|
||||
warnings: 14
|
||||
sqlite3.h:272:16: warning: Skipping sqlite3 (type Declared(sqlite3) is not supported)
|
||||
sqlite3.h:4045:16: warning: Skipping sqlite3_stmt (type Declared(sqlite3_stmt) is not supported)
|
||||
files: 83
|
||||
lines: 44295
|
||||
bytes: 1339454
|
||||
lines in the one big header class: 22335
|
||||
$ grep -o 'public static [A-Za-z.]* sqlite3_open[a-z_0-9$]*(' generated/demo/sqlite/sqlite3_h.java | sort -u
|
||||
public static FunctionDescriptor sqlite3_open$descriptor(
|
||||
public static FunctionDescriptor sqlite3_open_v2$descriptor(
|
||||
public static MemorySegment sqlite3_open$address(
|
||||
public static MemorySegment sqlite3_open_v2$address(
|
||||
public static MethodHandle sqlite3_open$handle(
|
||||
public static MethodHandle sqlite3_open_v2$handle(
|
||||
public static int sqlite3_open(
|
||||
public static int sqlite3_open_v2(
|
||||
Reference in New Issue
Block a user