Repository: drill
Updated Branches:
  refs/heads/master 34969583b -> 8a4d7a994


DRILL-4558: BSonReader should prepare buffer size as actual need

This closes #696


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/1840e49e
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/1840e49e
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/1840e49e

Branch: refs/heads/master
Commit: 1840e49ee1d993a91790cf6ee6ed9a8c570971b6
Parents: 3496958
Author: chunhui-shi <[email protected]>
Authored: Tue Dec 13 18:00:49 2016 -0800
Committer: Parth Chandra <[email protected]>
Committed: Fri Jan 13 20:06:58 2017 -0800

----------------------------------------------------------------------
 .../apache/drill/exec/store/bson/BsonRecordReader.java   | 11 +++++++----
 .../drill/exec/store/bson/TestBsonRecordReader.java      | 11 +++++++++++
 2 files changed, 18 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/1840e49e/exec/java-exec/src/main/java/org/apache/drill/exec/store/bson/BsonRecordReader.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/bson/BsonRecordReader.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/bson/BsonRecordReader.java
index 36462b6..c0b6726 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/bson/BsonRecordReader.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/bson/BsonRecordReader.java
@@ -258,14 +258,17 @@ public class BsonRecordReader {
   }
 
   private void writeString(String readString, final MapOrListWriterImpl 
writer, String fieldName, boolean isList) {
-    final int length = readString.length();
-    final VarCharHolder vh = new VarCharHolder();
-    ensure(length);
+    int length;
+    byte[] strBytes;
     try {
-      workBuf.setBytes(0, readString.getBytes("UTF-8"));
+      strBytes = readString.getBytes("UTF-8");
     } catch (UnsupportedEncodingException e) {
       throw new DrillRuntimeException("Unable to read string value for field: 
" + fieldName, e);
     }
+    length = strBytes.length;
+    ensure(length);
+    workBuf.setBytes(0, strBytes);
+    final VarCharHolder vh = new VarCharHolder();
     vh.buffer = workBuf;
     vh.start = 0;
     vh.end = length;

http://git-wip-us.apache.org/repos/asf/drill/blob/1840e49e/exec/java-exec/src/test/java/org/apache/drill/exec/store/bson/TestBsonRecordReader.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/exec/store/bson/TestBsonRecordReader.java
 
b/exec/java-exec/src/test/java/org/apache/drill/exec/store/bson/TestBsonRecordReader.java
index 4255924..1919184 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/exec/store/bson/TestBsonRecordReader.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/exec/store/bson/TestBsonRecordReader.java
@@ -103,6 +103,17 @@ public class TestBsonRecordReader extends BaseTestQuery {
   }
 
   @Test
+  public void testSpecialCharStringType() throws IOException {
+    BsonDocument bsonDoc = new BsonDocument();
+    bsonDoc.append("stringKey", new BsonString("§§§§§§§§§1"));
+    writer.reset();
+    bsonReader.write(writer, new BsonDocumentReader(bsonDoc));
+    SingleMapReaderImpl mapReader = (SingleMapReaderImpl) 
writer.getMapVector().getReader();
+    assertEquals("§§§§§§§§§1",
+        mapReader.reader("stringKey").readText().toString());
+  }
+
+  @Test
   public void testObjectIdType() throws IOException {
     BsonDocument bsonDoc = new BsonDocument();
     BsonObjectId value = new BsonObjectId(new ObjectId());

Reply via email to