diff --git a/CMakeLists.txt b/CMakeLists.txt index 7153f8424..f38377a89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -560,7 +560,9 @@ file(GLOB_RECURSE JAVA_SRC_FILES src/main/java/org/duckdb/*.java) file(GLOB_RECURSE JAVA_TEST_FILES src/test/java/org/duckdb/*.java) set(CMAKE_JAVA_COMPILE_FLAGS -encoding utf-8 -g -Xlint:all) -add_jar(duckdb_jdbc ${JAVA_SRC_FILES} META-INF/services/java.sql.Driver +add_jar(duckdb_jdbc ${JAVA_SRC_FILES} + META-INF/services/java.sql.Driver + META-INF/native-image/org/duckdb/reachability-metadata.json MANIFEST META-INF/MANIFEST.MF GENERATE_NATIVE_HEADERS duckdb-native) add_jar(duckdb_jdbc_tests ${JAVA_TEST_FILES} INCLUDE_JARS duckdb_jdbc) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index b5ec906bf..7355f71b5 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -86,7 +86,9 @@ file(GLOB_RECURSE JAVA_SRC_FILES src/main/java/org/duckdb/*.java) file(GLOB_RECURSE JAVA_TEST_FILES src/test/java/org/duckdb/*.java) set(CMAKE_JAVA_COMPILE_FLAGS -encoding utf-8 -g -Xlint:all) -add_jar(duckdb_jdbc ${JAVA_SRC_FILES} META-INF/services/java.sql.Driver +add_jar(duckdb_jdbc ${JAVA_SRC_FILES} + META-INF/services/java.sql.Driver + META-INF/native-image/org/duckdb/reachability-metadata.json MANIFEST META-INF/MANIFEST.MF GENERATE_NATIVE_HEADERS duckdb-native) add_jar(duckdb_jdbc_tests ${JAVA_TEST_FILES} INCLUDE_JARS duckdb_jdbc) diff --git a/META-INF/native-image/org/duckdb/reachability-metadata.json b/META-INF/native-image/org/duckdb/reachability-metadata.json new file mode 100644 index 000000000..afe8464b4 --- /dev/null +++ b/META-INF/native-image/org/duckdb/reachability-metadata.json @@ -0,0 +1,445 @@ +{ + "reflection": [ + ], + "resources": [ + ], + "bundles": [], + "jni": [ + { + "type": "java.lang.Boolean", + "methods": [ + { + "name": "booleanValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.Byte", + "methods": [ + { + "name": "byteValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.Class", + "methods": [ + { + "name": "getClassLoader", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.ClassLoader", + "methods": [ + { + "name": "loadClass", + "parameterTypes": [ + "java.lang.String" + ] + } + ] + }, + { + "type": "java.lang.Double", + "methods": [ + { + "name": "doubleValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.Float", + "methods": [ + { + "name": "floatValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.Integer", + "methods": [ + { + "name": "intValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.Long", + "methods": [ + { + "name": "longValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.Object", + "methods": [ + { + "name": "toString", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.Short", + "methods": [ + { + "name": "shortValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.lang.String", + "methods": [ + { + "name": "getBytes", + "parameterTypes": [ + "java.nio.charset.Charset" + ] + } + ] + }, + { + "type": "java.lang.Throwable", + "methods": [ + { + "name": "getMessage", + "parameterTypes": [] + } + ] + }, + { + "type": "java.math.BigDecimal", + "methods": [ + { + "name": "longValue", + "parameterTypes": [] + }, + { + "name": "precision", + "parameterTypes": [] + }, + { + "name": "scale", + "parameterTypes": [] + }, + { + "name": "scaleByPowerOfTen", + "parameterTypes": [ + "int" + ] + }, + { + "name": "toPlainString", + "parameterTypes": [] + } + ] + }, + { + "type": "java.nio.ByteBuffer", + "methods": [ + { + "name": "order", + "parameterTypes": [ + "java.nio.ByteOrder" + ] + } + ] + }, + { + "type": "java.nio.ByteOrder", + "fields": [ + { + "name": "LITTLE_ENDIAN" + } + ] + }, + { + "type": "java.nio.CharBuffer", + "methods": [ + { + "name": "toString", + "parameterTypes": [] + } + ] + }, + { + "type": "java.nio.charset.Charset", + "methods": [ + { + "name": "decode", + "parameterTypes": [ + "java.nio.ByteBuffer" + ] + } + ] + }, + { + "type": "java.nio.charset.StandardCharsets", + "fields": [ + { + "name": "UTF_8" + } + ] + }, + { + "type": "java.sql.Array", + "methods": [ + { + "name": "getArray", + "parameterTypes": [] + }, + { + "name": "getBaseTypeName", + "parameterTypes": [] + } + ] + }, + { + "type": "java.sql.SQLException" + }, + { + "type": "java.sql.SQLTimeoutException" + }, + { + "type": "java.sql.Struct", + "methods": [ + { + "name": "getAttributes", + "parameterTypes": [] + }, + { + "name": "getSQLTypeName", + "parameterTypes": [] + } + ] + }, + { + "type": "java.util.Iterator", + "methods": [ + { + "name": "hasNext", + "parameterTypes": [] + }, + { + "name": "next", + "parameterTypes": [] + } + ] + }, + { + "type": "java.util.List", + "methods": [ + { + "name": "iterator", + "parameterTypes": [] + } + ] + }, + { + "type": "java.util.Map", + "methods": [ + { + "name": "entrySet", + "parameterTypes": [] + } + ] + }, + { + "type": "java.util.Map$Entry", + "methods": [ + { + "name": "getKey", + "parameterTypes": [] + }, + { + "name": "getValue", + "parameterTypes": [] + } + ] + }, + { + "type": "java.util.Set", + "methods": [ + { + "name": "iterator", + "parameterTypes": [] + } + ] + }, + { + "type": "java.util.UUID", + "methods": [ + { + "name": "getLeastSignificantBits", + "parameterTypes": [] + }, + { + "name": "getMostSignificantBits", + "parameterTypes": [] + } + ] + }, + { + "type": "org.duckdb.DuckDBArray", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.duckdb.DuckDBVector", + "int", + "int" + ] + } + ] + }, + { + "type": "org.duckdb.DuckDBDate", + "methods": [ + { + "name": "getDaysSinceEpoch", + "parameterTypes": [] + } + ] + }, + { + "type": "org.duckdb.DuckDBHugeInt", + "fields": [ + { + "name": "lower" + }, + { + "name": "upper" + } + ] + }, + { + "type": "org.duckdb.DuckDBResultSetMetaData", + "methods": [ + { + "name": "", + "parameterTypes": [ + "int", + "int", + "java.lang.String[]", + "java.lang.String[]", + "java.lang.String[]", + "java.lang.String", + "java.lang.String[]", + "java.lang.String[]" + ] + } + ] + }, + { + "type": "org.duckdb.DuckDBStruct", + "methods": [ + { + "name": "", + "parameterTypes": [ + "java.lang.String[]", + "org.duckdb.DuckDBVector[]", + "int", + "java.lang.String" + ] + } + ] + }, + { + "type": "org.duckdb.DuckDBTime" + }, + { + "type": "org.duckdb.DuckDBTimestamp", + "methods": [ + { + "name": "getMicrosEpoch", + "parameterTypes": [] + }, + { + "name": "valueOf", + "parameterTypes": [ + "java.lang.Object" + ] + } + ] + }, + { + "type": "org.duckdb.DuckDBTimestampTZ" + }, + { + "type": "org.duckdb.DuckDBVector", + "fields": [ + { + "name": "constlen_data" + }, + { + "name": "varlen_data" + } + ], + "methods": [ + { + "name": "", + "parameterTypes": [ + "java.lang.String", + "int", + "boolean[]" + ] + } + ] + }, + { + "type": "org.duckdb.ProfilerPrintFormat", + "fields": [ + { + "name": "GRAPHVIZ" + }, + { + "name": "HTML" + }, + { + "name": "JSON" + }, + { + "name": "NO_OUTPUT" + }, + { + "name": "QUERY_TREE" + }, + { + "name": "QUERY_TREE_OPTIMIZER" + } + ] + }, + { + "type": "org.duckdb.QueryProgress", + "methods": [ + { + "name": "", + "parameterTypes": [ + "double", + "long", + "long" + ] + } + ] + }, + { + "type": "org.duckdb.user.DuckDBMap", + "methods": [ + { + "name": "getSQLTypeName", + "parameterTypes": [] + } + ] + } + ] +}