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());
