diff --git a/src/jni/duckdb_java.cpp b/src/jni/duckdb_java.cpp index 8911b6ed5..436dda5c4 100644 --- a/src/jni/duckdb_java.cpp +++ b/src/jni/duckdb_java.cpp @@ -622,6 +622,7 @@ jobject ProcessVector(JNIEnv *env, Connection *conn_ref, Vector &vec, idx_t row_ break; } case LogicalTypeId::BLOB: + case LogicalTypeId::GEOMETRY: varlen_data = env->NewObjectArray(row_count, J_ByteArray, nullptr); for (idx_t row_idx = 0; row_idx < row_count; row_idx++) { diff --git a/src/main/java/org/duckdb/DuckDBColumnType.java b/src/main/java/org/duckdb/DuckDBColumnType.java index bc6731e81..c1bb64188 100644 --- a/src/main/java/org/duckdb/DuckDBColumnType.java +++ b/src/main/java/org/duckdb/DuckDBColumnType.java @@ -37,5 +37,6 @@ public enum DuckDBColumnType { ARRAY, UNKNOWN, UNION, - VARIANT; + VARIANT, + GEOMETRY; } diff --git a/src/main/java/org/duckdb/DuckDBResultSet.java b/src/main/java/org/duckdb/DuckDBResultSet.java index 9116a1699..1d687c1ae 100644 --- a/src/main/java/org/duckdb/DuckDBResultSet.java +++ b/src/main/java/org/duckdb/DuckDBResultSet.java @@ -211,6 +211,7 @@ public String getString(int columnIndex) throws SQLException { DuckDBColumnType sqlType = meta.column_types[columnIndex - 1]; switch (sqlType) { case BLOB: + case GEOMETRY: case LIST: case STRUCT: case MAP: diff --git a/src/main/java/org/duckdb/DuckDBResultSetMetaData.java b/src/main/java/org/duckdb/DuckDBResultSetMetaData.java index 92a544e35..8d2b0dffe 100644 --- a/src/main/java/org/duckdb/DuckDBResultSetMetaData.java +++ b/src/main/java/org/duckdb/DuckDBResultSetMetaData.java @@ -167,6 +167,7 @@ public static int type_to_int(DuckDBColumnType type) { case BIT: return Types.BIT; case BLOB: + case GEOMETRY: return Types.BLOB; default: return Types.OTHER; @@ -356,6 +357,7 @@ public int getPrecision(int column) throws SQLException { return 35; case VARCHAR: case BLOB: + case GEOMETRY: return Integer.MAX_VALUE; default: return 0; diff --git a/src/main/java/org/duckdb/DuckDBVector.java b/src/main/java/org/duckdb/DuckDBVector.java index c629eb32b..82924d1ef 100644 --- a/src/main/java/org/duckdb/DuckDBVector.java +++ b/src/main/java/org/duckdb/DuckDBVector.java @@ -117,6 +117,7 @@ Object getObject(int idx) throws SQLException { case JSON: return getJsonObject(idx); case BLOB: + case GEOMETRY: return getBlob(idx); case UUID: return getUuid(idx); @@ -315,7 +316,7 @@ Blob getBlob(int idx) throws SQLException { if (check_and_null(idx)) { return null; } - if (isType(DuckDBColumnType.BLOB)) { + if (isType(DuckDBColumnType.BLOB) || isType(DuckDBColumnType.GEOMETRY)) { return new DuckDBResultSet.DuckDBBlobResult(ByteBuffer.wrap((byte[]) varlen_data[idx])); } @@ -327,7 +328,7 @@ byte[] getBytes(int idx) throws SQLException { return null; } - if (isType(DuckDBColumnType.BLOB)) { + if (isType(DuckDBColumnType.BLOB) || isType(DuckDBColumnType.GEOMETRY)) { return (byte[]) varlen_data[idx]; } diff --git a/src/test/java/org/duckdb/TestDuckDBJDBC.java b/src/test/java/org/duckdb/TestDuckDBJDBC.java index 4a62057f0..3769121a7 100644 --- a/src/test/java/org/duckdb/TestDuckDBJDBC.java +++ b/src/test/java/org/duckdb/TestDuckDBJDBC.java @@ -2246,9 +2246,9 @@ public static void main(String[] args) throws Exception { statusCode = runTests(args, TestDuckDBJDBC.class, TestAppender.class, TestAppenderCollection.class, TestAppenderCollection2D.class, TestAppenderComposite.class, TestSingleValueAppender.class, TestBatch.class, TestBindings.class, TestClosure.class, - TestExtensionTypes.class, TestMetadata.class, TestNoLib.class, - /* TestSpatial.class, */ TestParameterMetadata.class, TestPrepare.class, - TestResults.class, TestSessionInit.class, TestTimestamp.class, TestVariant.class); + TestExtensionTypes.class, TestMetadata.class, TestNoLib.class, /* TestSpatial.class,*/ + TestParameterMetadata.class, TestPrepare.class, TestResults.class, + TestSessionInit.class, TestTimestamp.class, TestVariant.class); } System.exit(statusCode); } diff --git a/src/test/java/org/duckdb/TestSpatial.java b/src/test/java/org/duckdb/TestSpatial.java index 8e7b2b4a7..dd257c08d 100644 --- a/src/test/java/org/duckdb/TestSpatial.java +++ b/src/test/java/org/duckdb/TestSpatial.java @@ -279,9 +279,8 @@ public static void test_spatial_GEOMETRY() throws Exception { stmt.executeUpdate("INSTALL spatial"); stmt.executeUpdate("LOAD spatial"); - byte[] geometryBytes = - new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - -51, -52, -52, -52, -52, -116, 68, 64, -102, -103, -103, -103, -103, 25, 69, 64}; + byte[] geometryBytes = new byte[] {1, 1, 0, 0, 0, -51, -52, -52, -52, -52, -116, + 68, 64, -102, -103, -103, -103, -103, 25, 69, 64}; // GEOMETRY literal try (ResultSet rs = stmt.executeQuery("SELECT ST_GeomFromText('POINT(41.1 42.2)')")) {