From 4987be1a68511e304b2af6b50b9b95d37746bd5b Mon Sep 17 00:00:00 2001 From: gsvic Date: Tue, 27 Oct 2020 13:28:59 +0200 Subject: [PATCH] Fill Value --- src/main/c/generated/tiledb_wrap.cxx | 113 ++++++++++++++++++ .../java/io/tiledb/java/api/Attribute.java | 30 +++++ src/main/java/io/tiledb/libtiledb/tiledb.java | 43 +++++++ .../io/tiledb/libtiledb/tiledbConstants.java | 4 +- .../java/io/tiledb/libtiledb/tiledbJNI.java | 11 ++ .../io/tiledb/java/api/AttributeTest.java | 49 ++++++++ 6 files changed, 248 insertions(+), 2 deletions(-) diff --git a/src/main/c/generated/tiledb_wrap.cxx b/src/main/c/generated/tiledb_wrap.cxx index 3ca7ea3f..618ddf60 100644 --- a/src/main/c/generated/tiledb_wrap.cxx +++ b/src/main/c/generated/tiledb_wrap.cxx @@ -6068,6 +6068,71 @@ SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1attribute_1du } +SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1attribute_1set_1fill_1value(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jlong jarg3, jobject jarg4) { + jint jresult = 0 ; + tiledb_ctx_t *arg1 = (tiledb_ctx_t *) 0 ; + tiledb_attribute_t *arg2 = (tiledb_attribute_t *) 0 ; + void *arg3 = (void *) 0 ; + uint64_t arg4 ; + int32_t result; + + (void)jenv; + (void)jcls; + arg1 = *(tiledb_ctx_t **)&jarg1; + arg2 = *(tiledb_attribute_t **)&jarg2; + arg3 = *(void **)&jarg3; + { + jclass clazz; + jmethodID mid; + jbyteArray ba; + jbyte* bae; + jsize sz; + int i; + + if (!jarg4) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "BigInteger null"); + return 0; + } + clazz = jenv->GetObjectClass(jarg4); + mid = jenv->GetMethodID(clazz, "toByteArray", "()[B"); + ba = (jbyteArray)jenv->CallObjectMethod(jarg4, mid); + bae = jenv->GetByteArrayElements(ba, 0); + sz = jenv->GetArrayLength(ba); + arg4 = 0; + if (sz > 0) { + arg4 = (uint64_t)(signed char)bae[0]; + for(i=1; iReleaseByteArrayElements(ba, bae, 0); + } + result = (int32_t)tiledb_attribute_set_fill_value(arg1,arg2,(void const *)arg3,arg4); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1attribute_1get_1fill_1value(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jlong jarg3, jlong jarg4) { + jint jresult = 0 ; + tiledb_ctx_t *arg1 = (tiledb_ctx_t *) 0 ; + tiledb_attribute_t *arg2 = (tiledb_attribute_t *) 0 ; + void **arg3 = (void **) 0 ; + uint64_t *arg4 = (uint64_t *) 0 ; + int32_t result; + + (void)jenv; + (void)jcls; + arg1 = *(tiledb_ctx_t **)&jarg1; + arg2 = *(tiledb_attribute_t **)&jarg2; + arg3 = *(void ***)&jarg3; + arg4 = *(uint64_t **)&jarg4; + result = (int32_t)tiledb_attribute_get_fill_value(arg1,arg2,(void const **)arg3,arg4); + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1domain_1alloc(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) { jint jresult = 0 ; tiledb_ctx_t *arg1 = (tiledb_ctx_t *) 0 ; @@ -7338,6 +7403,24 @@ SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1query_1get_1l } +SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1query_1get_1array(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jlong jarg3) { + jint jresult = 0 ; + tiledb_ctx_t *arg1 = (tiledb_ctx_t *) 0 ; + tiledb_query_t *arg2 = (tiledb_query_t *) 0 ; + tiledb_array_t **arg3 = (tiledb_array_t **) 0 ; + int32_t result; + + (void)jenv; + (void)jcls; + arg1 = *(tiledb_ctx_t **)&jarg1; + arg2 = *(tiledb_query_t **)&jarg2; + arg3 = *(tiledb_array_t ***)&jarg3; + result = (int32_t)tiledb_query_get_array(arg1,arg2,arg3); + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1query_1add_1range(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jlong jarg3, jlong jarg4, jlong jarg5, jlong jarg6) { jint jresult = 0 ; tiledb_ctx_t *arg1 = (tiledb_ctx_t *) 0 ; @@ -9235,6 +9318,36 @@ SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1vfs_1move_1di } +SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1vfs_1copy_1file(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3, jstring jarg4) { + jint jresult = 0 ; + tiledb_ctx_t *arg1 = (tiledb_ctx_t *) 0 ; + tiledb_vfs_t *arg2 = (tiledb_vfs_t *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int32_t result; + + (void)jenv; + (void)jcls; + arg1 = *(tiledb_ctx_t **)&jarg1; + arg2 = *(tiledb_vfs_t **)&jarg2; + arg3 = 0; + if (jarg3) { + arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0); + if (!arg3) return 0; + } + arg4 = 0; + if (jarg4) { + arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0); + if (!arg4) return 0; + } + result = (int32_t)tiledb_vfs_copy_file(arg1,arg2,(char const *)arg3,(char const *)arg4); + jresult = (jint)result; + if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3); + if (arg4) jenv->ReleaseStringUTFChars(jarg4, (const char *)arg4); + return jresult; +} + + SWIGEXPORT jint JNICALL Java_io_tiledb_libtiledb_tiledbJNI_tiledb_1vfs_1open(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3, jint jarg4, jlong jarg5) { jint jresult = 0 ; tiledb_ctx_t *arg1 = (tiledb_ctx_t *) 0 ; diff --git a/src/main/java/io/tiledb/java/api/Attribute.java b/src/main/java/io/tiledb/java/api/Attribute.java index b6ada93d..8823c4d2 100644 --- a/src/main/java/io/tiledb/java/api/Attribute.java +++ b/src/main/java/io/tiledb/java/api/Attribute.java @@ -27,6 +27,7 @@ import static io.tiledb.java.api.Constants.TILEDB_VAR_NUM; import io.tiledb.libtiledb.*; +import java.math.BigInteger; /** * Describes an Attribute of an Array cell. @@ -260,6 +261,35 @@ public FilterList getFilterList() throws TileDBError { return filterlist; } + public void setFillValue(NativeArray value, BigInteger size) throws TileDBError { + try { + ctx.handleError( + tiledb.tiledb_attribute_set_fill_value( + ctx.getCtxp(), attributep, value.toVoidPointer(), size)); + } catch (TileDBError err) { + throw err; + } + } + + public Pair getFillValue() throws TileDBError { + + try (NativeArray value = new NativeArray(ctx, this.type.getNativeSize(), this.type)) { + SWIGTYPE_p_unsigned_long_long size = tiledb.new_ullp(); + SWIGTYPE_p_p_void v = tiledb.new_voidpArray(1); + + ctx.handleError(tiledb.tiledb_attribute_get_fill_value(ctx.getCtxp(), attributep, v, size)); + + Object fillValue; + try (NativeArray fillValueArray = new NativeArray(ctx, getType(), v, 1)) { + fillValue = fillValueArray.getItem(0); + } + + return new Pair(fillValue, tiledb.ullp_value(size)); + } catch (TileDBError err) { + throw err; + } + } + /** @return A String representation for the Attribute. */ @Override public String toString() { diff --git a/src/main/java/io/tiledb/libtiledb/tiledb.java b/src/main/java/io/tiledb/libtiledb/tiledb.java index be8ae9a6..e41f5d6d 100644 --- a/src/main/java/io/tiledb/libtiledb/tiledb.java +++ b/src/main/java/io/tiledb/libtiledb/tiledb.java @@ -1652,6 +1652,30 @@ public static int tiledb_attribute_dump( SWIGTYPE_p_FILE.getCPtr(out)); } + public static int tiledb_attribute_set_fill_value( + SWIGTYPE_p_tiledb_ctx_t ctx, + SWIGTYPE_p_tiledb_attribute_t attr, + SWIGTYPE_p_void value, + java.math.BigInteger size) { + return tiledbJNI.tiledb_attribute_set_fill_value( + SWIGTYPE_p_tiledb_ctx_t.getCPtr(ctx), + SWIGTYPE_p_tiledb_attribute_t.getCPtr(attr), + SWIGTYPE_p_void.getCPtr(value), + size); + } + + public static int tiledb_attribute_get_fill_value( + SWIGTYPE_p_tiledb_ctx_t ctx, + SWIGTYPE_p_tiledb_attribute_t attr, + SWIGTYPE_p_p_void value, + SWIGTYPE_p_unsigned_long_long size) { + return tiledbJNI.tiledb_attribute_get_fill_value( + SWIGTYPE_p_tiledb_ctx_t.getCPtr(ctx), + SWIGTYPE_p_tiledb_attribute_t.getCPtr(attr), + SWIGTYPE_p_p_void.getCPtr(value), + SWIGTYPE_p_unsigned_long_long.getCPtr(size)); + } + public static int tiledb_domain_alloc( SWIGTYPE_p_tiledb_ctx_t ctx, SWIGTYPE_p_p_tiledb_domain_t domain) { return tiledbJNI.tiledb_domain_alloc( @@ -2295,6 +2319,16 @@ public static int tiledb_query_get_layout( SWIGTYPE_p_tiledb_layout_t.getCPtr(query_layout)); } + public static int tiledb_query_get_array( + SWIGTYPE_p_tiledb_ctx_t ctx, + SWIGTYPE_p_tiledb_query_t query, + SWIGTYPE_p_p_tiledb_array_t array) { + return tiledbJNI.tiledb_query_get_array( + SWIGTYPE_p_tiledb_ctx_t.getCPtr(ctx), + SWIGTYPE_p_tiledb_query_t.getCPtr(query), + SWIGTYPE_p_p_tiledb_array_t.getCPtr(array)); + } + public static int tiledb_query_add_range( SWIGTYPE_p_tiledb_ctx_t ctx, SWIGTYPE_p_tiledb_query_t query, @@ -3081,6 +3115,15 @@ public static int tiledb_vfs_move_dir( new_uri); } + public static int tiledb_vfs_copy_file( + SWIGTYPE_p_tiledb_ctx_t ctx, SWIGTYPE_p_tiledb_vfs_t vfs, String old_uri, String new_uri) { + return tiledbJNI.tiledb_vfs_copy_file( + SWIGTYPE_p_tiledb_ctx_t.getCPtr(ctx), + SWIGTYPE_p_tiledb_vfs_t.getCPtr(vfs), + old_uri, + new_uri); + } + public static int tiledb_vfs_open( SWIGTYPE_p_tiledb_ctx_t ctx, SWIGTYPE_p_tiledb_vfs_t vfs, diff --git a/src/main/java/io/tiledb/libtiledb/tiledbConstants.java b/src/main/java/io/tiledb/libtiledb/tiledbConstants.java index a1d1ea57..415427fa 100644 --- a/src/main/java/io/tiledb/libtiledb/tiledbConstants.java +++ b/src/main/java/io/tiledb/libtiledb/tiledbConstants.java @@ -13,6 +13,6 @@ public interface tiledbConstants { public static final int TILEDB_OK = 0; public static final int TILEDB_OOM = (-2); public static final int TILEDB_VERSION_MAJOR = 2; - public static final int TILEDB_VERSION_MINOR = 0; - public static final int TILEDB_VERSION_PATCH = 5; + public static final int TILEDB_VERSION_MINOR = 1; + public static final int TILEDB_VERSION_PATCH = 2; } diff --git a/src/main/java/io/tiledb/libtiledb/tiledbJNI.java b/src/main/java/io/tiledb/libtiledb/tiledbJNI.java index 9388edbc..2a764c68 100644 --- a/src/main/java/io/tiledb/libtiledb/tiledbJNI.java +++ b/src/main/java/io/tiledb/libtiledb/tiledbJNI.java @@ -795,6 +795,12 @@ public static final native int tiledb_attribute_get_cell_val_num( public static final native int tiledb_attribute_dump(long jarg1, long jarg2, long jarg3); + public static final native int tiledb_attribute_set_fill_value( + long jarg1, long jarg2, long jarg3, java.math.BigInteger jarg4); + + public static final native int tiledb_attribute_get_fill_value( + long jarg1, long jarg2, long jarg3, long jarg4); + public static final native int tiledb_domain_alloc(long jarg1, long jarg2); public static final native void tiledb_domain_free(long jarg1); @@ -965,6 +971,8 @@ public static final native int tiledb_query_submit_async( public static final native int tiledb_query_get_layout(long jarg1, long jarg2, long jarg3); + public static final native int tiledb_query_get_array(long jarg1, long jarg2, long jarg3); + public static final native int tiledb_query_add_range( long jarg1, long jarg2, long jarg3, long jarg4, long jarg5, long jarg6); @@ -1170,6 +1178,9 @@ public static final native int tiledb_vfs_move_file( public static final native int tiledb_vfs_move_dir( long jarg1, long jarg2, String jarg3, String jarg4); + public static final native int tiledb_vfs_copy_file( + long jarg1, long jarg2, String jarg3, String jarg4); + public static final native int tiledb_vfs_open( long jarg1, long jarg2, String jarg3, int jarg4, long jarg5); diff --git a/src/test/java/io/tiledb/java/api/AttributeTest.java b/src/test/java/io/tiledb/java/api/AttributeTest.java index 6af52272..088cc547 100644 --- a/src/test/java/io/tiledb/java/api/AttributeTest.java +++ b/src/test/java/io/tiledb/java/api/AttributeTest.java @@ -26,6 +26,7 @@ import static io.tiledb.java.api.Constants.TILEDB_VAR_NUM; +import java.math.BigInteger; import org.junit.Assert; import org.junit.Test; @@ -59,4 +60,52 @@ public void testAttributeDatatype() throws Exception { Assert.assertEquals(Datatype.TILEDB_FLOAT32, a.getType()); } } + + @Test + public void testAttributeSetFillValue() throws Exception { + try (Context ctx = new Context(); + Attribute a = new Attribute(ctx, "a2", Datatype.TILEDB_INT32)) { + + NativeArray arr = new NativeArray(ctx, 1, Datatype.TILEDB_INT32); + + arr.setItem(0, 5); + + a.setFillValue(arr, BigInteger.valueOf(arr.getNativeTypeSize() * arr.getSize())); + + Assert.assertEquals(5, a.getFillValue().getFirst()); + Assert.assertEquals( + BigInteger.valueOf(arr.getNativeTypeSize() * arr.getSize()), + a.getFillValue().getSecond()); + } + + try (Context ctx = new Context(); + Attribute a = new Attribute(ctx, "a2", Datatype.TILEDB_INT64)) { + + NativeArray arr = new NativeArray(ctx, 1, Datatype.TILEDB_INT64); + + arr.setItem(0, 5L); + + a.setFillValue(arr, BigInteger.valueOf(arr.getNativeTypeSize() * arr.getSize())); + + Assert.assertEquals(5L, a.getFillValue().getFirst()); + Assert.assertEquals( + BigInteger.valueOf(arr.getNativeTypeSize() * arr.getSize()), + a.getFillValue().getSecond()); + } + + try (Context ctx = new Context(); + Attribute a = new Attribute(ctx, "a2", Datatype.TILEDB_CHAR)) { + + NativeArray arr = new NativeArray(ctx, 1, Datatype.TILEDB_CHAR); + + arr.setItem(0, "c"); + + a.setFillValue(arr, BigInteger.valueOf(arr.getNativeTypeSize() * arr.getSize())); + + Assert.assertEquals((byte) 'c', a.getFillValue().getFirst()); + Assert.assertEquals( + BigInteger.valueOf(arr.getNativeTypeSize() * arr.getSize()), + a.getFillValue().getSecond()); + } + } }