@@ -120,7 +120,6 @@ public QueryStatus getQueryStatus() throws TileDBError {
120120 * @exception TileDBError A TileDB exception
121121 */
122122 public QueryStatus submit () throws TileDBError {
123- prepareSubmission ();
124123 ctx .handleError (tiledb .tiledb_query_submit (ctx .getCtxp (), queryp ));
125124 return getQueryStatus ();
126125 }
@@ -141,7 +140,6 @@ public void submitAsync() throws TileDBError {
141140 * @exception TileDBError A TileDB exception
142141 */
143142 public void submitAsync (Callback callback ) throws TileDBError {
144- prepareSubmission ();
145143 ctx .handleError (Utils .tiledb_query_submit_async (ctx .getCtxp (), queryp , callback ));
146144 }
147145
@@ -280,16 +278,30 @@ public synchronized Query setBuffer(String attr, NativeArray buffer) throws Tile
280278 }
281279 }
282280 }
281+
282+ uint64_tArray offsets_array_size = new uint64_tArray (1 );
283+ uint64_tArray values_array_size = new uint64_tArray (1 );
284+
285+ offsets_array_size .setitem (0 , BigInteger .valueOf (0l ));
286+ values_array_size .setitem (0 , BigInteger .valueOf (buffer .getNBytes ()));
287+
283288 Pair <uint64_tArray , uint64_tArray > buffer_sizes =
284- new Pair <uint64_tArray , uint64_tArray >(new uint64_tArray (1 ), new uint64_tArray (1 ));
285- buffer_sizes .getFirst ().setitem (0 , BigInteger .valueOf (0l ));
286- buffer_sizes .getSecond ().setitem (0 , BigInteger .valueOf (buffer .getNBytes ()));
287- // close previous buffers if they exist for this attribute
289+ new Pair <>(offsets_array_size , values_array_size );
290+
291+ // Close previous buffers if they exist for this attribute
288292 if (buffers_ .containsKey (attr )) {
289293 buffers_ .get (attr ).close ();
290294 }
295+
291296 buffers_ .put (attr , buffer );
292297 buffer_sizes_ .put (attr , buffer_sizes );
298+
299+ // Set the actual TileDB buffer
300+ uint64_tArray buffer_size = buffer_sizes .getSecond ();
301+ ctx .handleError (
302+ tiledb .tiledb_query_set_buffer (
303+ ctx .getCtxp (), queryp , attr , buffer .toVoidPointer (), buffer_size .cast ()));
304+
293305 return this ;
294306 }
295307
@@ -307,28 +319,49 @@ public synchronized Query setBuffer(String attr, NativeArray offsets, NativeArra
307319 if (attr .equals (tiledb .tiledb_coords ())) {
308320 throw new TileDBError ("Cannot set coordinate buffer as variable sized." );
309321 }
322+
310323 if (!offsets .getNativeType ().equals (TILEDB_UINT64 )) {
311324 throw new TileDBError (
312325 "Buffer offsets should be of getType TILEDB_UINT64 or Long. Found getType: "
313326 + offsets .getNativeType ());
314327 }
315- // type check the buffer native type matches the schema attribute type
328+
329+ // Type check the buffer native type matches the schema attribute type
316330 try (ArraySchema schema = array .getSchema ();
317331 Attribute attribute = schema .getAttribute (attr )) {
318332 Types .typeCheck (attribute .getType (), buffer .getNativeType ());
319333 }
334+
335+ uint64_tArray offsets_array = PointerUtils .uint64_tArrayFromVoid (offsets .toVoidPointer ());
336+ uint64_tArray offsets_array_size = new uint64_tArray (1 );
337+ uint64_tArray values_array_size = new uint64_tArray (1 );
338+
339+ offsets_array_size .setitem (0 , BigInteger .valueOf (offsets .getNBytes ()));
340+ values_array_size .setitem (0 , BigInteger .valueOf (buffer .getNBytes ()));
341+
320342 Pair <uint64_tArray , uint64_tArray > buffer_sizes =
321- new Pair <>(new uint64_tArray (1 ), new uint64_tArray (1 ));
322- buffer_sizes .getFirst ().setitem (0 , BigInteger .valueOf (offsets .getNBytes ()));
323- buffer_sizes .getSecond ().setitem (0 , BigInteger .valueOf (buffer .getNBytes ()));
324- // close previous buffers if they exist for this attribute
343+ new Pair <>(offsets_array_size , values_array_size );
344+
345+ // Close previous buffers if they exist for this attribute
325346 if (var_buffers_ .containsKey (attr )) {
326347 Pair <NativeArray , NativeArray > prev_buffers = var_buffers_ .get (attr );
327348 prev_buffers .getFirst ().close ();
328349 prev_buffers .getSecond ().close ();
329350 }
330- var_buffers_ .put (attr , new Pair <NativeArray , NativeArray >(offsets , buffer ));
351+
352+ var_buffers_ .put (attr , new Pair <>(offsets , buffer ));
331353 buffer_sizes_ .put (attr , buffer_sizes );
354+
355+ ctx .handleError (
356+ tiledb .tiledb_query_set_buffer_var (
357+ ctx .getCtxp (),
358+ queryp ,
359+ attr ,
360+ offsets_array .cast (),
361+ offsets_array_size .cast (),
362+ buffer .toVoidPointer (),
363+ values_array_size .cast ()));
364+
332365 return this ;
333366 }
334367
@@ -561,37 +594,6 @@ public Query resetBufferSizes() {
561594 return resetBufferSizes (0l );
562595 }
563596
564- private synchronized void prepareSubmission () throws TileDBError {
565- for (Map .Entry <String , NativeArray > entry : buffers_ .entrySet ()) {
566- String name = entry .getKey ();
567- NativeArray buffer = entry .getValue ();
568- Pair <uint64_tArray , uint64_tArray > buffer_sizes = buffer_sizes_ .get (name );
569- uint64_tArray buffer_size = buffer_sizes .getSecond ();
570- ctx .handleError (
571- tiledb .tiledb_query_set_buffer (
572- ctx .getCtxp (), queryp , name , buffer .toVoidPointer (), buffer_size .cast ()));
573- }
574- for (Map .Entry <String , Pair <NativeArray , NativeArray >> entry : var_buffers_ .entrySet ()) {
575- String name = entry .getKey ();
576- NativeArray off_buffer = entry .getValue ().getFirst ();
577- NativeArray val_buffer = entry .getValue ().getSecond ();
578-
579- Pair <uint64_tArray , uint64_tArray > buffer_size = buffer_sizes_ .get (name );
580- uint64_tArray offsets = PointerUtils .uint64_tArrayFromVoid (off_buffer .toVoidPointer ());
581- uint64_tArray off_size = buffer_size .getFirst ();
582- uint64_tArray val_size = buffer_size .getSecond ();
583- ctx .handleError (
584- tiledb .tiledb_query_set_buffer_var (
585- ctx .getCtxp (),
586- queryp ,
587- name ,
588- offsets .cast (),
589- off_size .cast (),
590- val_buffer .toVoidPointer (),
591- val_size .cast ()));
592- }
593- }
594-
595597 /**
596598 * Return a Java primitive array object as a copy of the attribute buffer
597599 *
0 commit comments