Skip to content

Commit c505dd0

Browse files
committed
Throw an exception if the order of the ByteBuffer is not correct
1 parent c5d79aa commit c505dd0

File tree

2 files changed

+9
-57
lines changed

2 files changed

+9
-57
lines changed

src/main/java/io/tiledb/java/api/Query.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,8 @@ public synchronized Query setBuffer(String attr, long bufferElements) throws Til
526526

527527
int size = Util.castLongToInt(bufferElements * dt.getNativeSize());
528528

529-
ByteBuffer buffer = ByteBuffer.allocateDirect(size);
529+
ByteBuffer buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder());
530+
;
530531

531532
this.setBuffer(attr, buffer);
532533

@@ -551,14 +552,9 @@ public synchronized Query setBuffer(String attr, ByteBuffer buffer) throws TileD
551552
"The ByteBuffer provided is not direct. Please provide a direct buffer (ByteBuffer.allocateDirect(...))");
552553
}
553554

554-
if (!buffer.order().equals(ByteOrder.nativeOrder()) && buffer.position() > 0) {
555-
throw new TileDBError(
556-
"The order of the data ByteBuffer should be the same as the native order (ByteOrder.nativeOrder()) before values are inserted.");
557-
}
558-
559555
if (!buffer.order().equals(ByteOrder.nativeOrder())) {
560-
// TODO: Add a logger component to Query class and a WARN here
561-
buffer.order(ByteOrder.nativeOrder());
556+
throw new TileDBError(
557+
"The order of the data ByteBuffer should be the same as the native order (ByteOrder.nativeOrder()).");
562558
}
563559

564560
this.byteBuffers_.put(attr, new Pair<>(null, buffer));

src/test/java/io/tiledb/java/api/QueryTest.java

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,8 @@ public void queryTestNIOReadArrayArbitrarySize() throws Exception {
356356
Query query = new Query(array, TILEDB_READ);
357357

358358
int bufferSize = 4;
359-
query.setBuffer("rows", ByteBuffer.allocateDirect(10));
360-
query.setBuffer("cols", ByteBuffer.allocateDirect(10));
359+
query.setBuffer("rows", ByteBuffer.allocateDirect(10).order(ByteOrder.nativeOrder()));
360+
query.setBuffer("cols", ByteBuffer.allocateDirect(10).order(ByteOrder.nativeOrder()));
361361
ByteBuffer d1 = query.getByteBuffer("rows").getSecond();
362362
ByteBuffer d2 = query.getByteBuffer("cols").getSecond();
363363

@@ -444,7 +444,7 @@ public void arrayReadTest() throws Exception {
444444
}
445445
}
446446

447-
@Test
447+
@Test(expected = TileDBError.class)
448448
public void arrayReadTestCustomBufferWithDifferentOrder() throws Exception {
449449
arrayCreate();
450450
arrayWrite();
@@ -464,49 +464,7 @@ public void arrayReadTestCustomBufferWithDifferentOrder() throws Exception {
464464
? ByteOrder.LITTLE_ENDIAN
465465
: ByteOrder.BIG_ENDIAN;
466466

467-
query
468-
.setBuffer("rows", ByteBuffer.allocateDirect(3 * 4).order(order))
469-
.setBuffer("cols", ByteBuffer.allocateDirect(3 * 4).order(order))
470-
.setBuffer("a1", ByteBuffer.allocateDirect(3).order(order))
471-
.setBuffer("a2", ByteBuffer.allocateDirect(6 * 4).order(order));
472-
473-
ByteBuffer dim1Buffer = query.getByteBuffer("rows").getSecond();
474-
ByteBuffer dim2Buffer = query.getByteBuffer("cols").getSecond();
475-
ByteBuffer a1Buffer = query.getByteBuffer("a1").getSecond();
476-
ByteBuffer a2Buffer = query.getByteBuffer("a2").getSecond();
477-
478-
// Submit query
479-
query.submit();
480-
481-
int[] dim1 = new int[3];
482-
int[] dim2 = new int[3];
483-
byte[] a1 = new byte[3];
484-
float[] a2 = new float[6];
485-
486-
int idx = 0;
487-
while (dim1Buffer.hasRemaining()) {
488-
dim1[idx++] = dim1Buffer.getInt();
489-
}
490-
491-
idx = 0;
492-
while (dim2Buffer.hasRemaining()) {
493-
dim2[idx++] = dim2Buffer.getInt();
494-
}
495-
496-
idx = 0;
497-
while (a1Buffer.hasRemaining()) {
498-
a1[idx++] = a1Buffer.get();
499-
}
500-
501-
idx = 0;
502-
while (a2Buffer.hasRemaining()) {
503-
a2[idx++] = a2Buffer.getFloat();
504-
}
505-
506-
Assert.assertArrayEquals(new int[] {1, 1, 1}, dim1);
507-
Assert.assertArrayEquals(new int[] {2, 3, 4}, dim2);
508-
Assert.assertArrayEquals(new byte[] {'b', 'c', 'd'}, a1);
509-
Assert.assertArrayEquals(new float[] {1.1f, 1.2f, 2.1f, 2.2f, 3.1f, 3.2f}, a2, 0.01f);
467+
query.setBuffer("rows", ByteBuffer.allocateDirect(3 * 4).order(order));
510468
}
511469
}
512470

@@ -528,7 +486,7 @@ public void queryTestNIOGetByteBuffer() throws Exception {
528486
Assert.assertEquals(query.getByteBuffer("rows").getSecond().order(), ByteOrder.nativeOrder());
529487
}
530488

531-
@Test()
489+
@Test(expected = TileDBError.class)
532490
public void queryTestNIOGetByteBuffeErrors() throws Exception {
533491
arrayCreate();
534492
arrayWrite();
@@ -554,8 +512,6 @@ public void queryTestNIOGetByteBuffeErrors() throws Exception {
554512

555513
// The Byte Order should be automatically changed to the native order
556514
query.setBuffer("rows", ByteBuffer.allocateDirect(bufferSize).order(order));
557-
ByteBuffer b = query.getByteBuffer("rows").getSecond();
558-
Assert.assertEquals(b.order(), ByteOrder.nativeOrder());
559515
}
560516

561517
@Test()

0 commit comments

Comments
 (0)