This is an automated email from the ASF dual-hosted git repository.
cgivre pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
The following commit(s) were added to refs/heads/master by this push:
new 511a607 DRILL-7094: UnSupported Bson type: DECIMAL128 Mongodb 3.6
onwards
511a607 is described below
commit 511a607810d08ee367ae85b2c1561feca6760309
Author: rajeshguptaiiitm <[email protected]>
AuthorDate: Thu Dec 17 11:03:33 2020 +0100
DRILL-7094: UnSupported Bson type: DECIMAL128 Mongodb 3.6 onwards
---
contrib/storage-mongo/pom.xml | 2 +-
exec/java-exec/pom.xml | 2 +-
.../drill/exec/store/bson/BsonRecordReader.java | 31 +++++++++++++++-------
.../exec/store/bson/TestBsonRecordReader.java | 13 +++++++++
4 files changed, 37 insertions(+), 11 deletions(-)
diff --git a/contrib/storage-mongo/pom.xml b/contrib/storage-mongo/pom.xml
index 343e92b..94a61b9 100644
--- a/contrib/storage-mongo/pom.xml
+++ b/contrib/storage-mongo/pom.xml
@@ -45,7 +45,7 @@
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
- <version>3.8.0</version>
+ <version>3.12.7</version>
</dependency>
<!-- Test dependencie -->
diff --git a/exec/java-exec/pom.xml b/exec/java-exec/pom.xml
index 43f73e5..8ea7663 100644
--- a/exec/java-exec/pom.xml
+++ b/exec/java-exec/pom.xml
@@ -199,7 +199,7 @@
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
- <version>3.8.0</version>
+ <version>3.12.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
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 64c6200..44852c1 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
@@ -17,11 +17,7 @@
*/
package org.apache.drill.exec.store.bson;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.nio.ByteBuffer;
-import java.util.List;
-
+import io.netty.buffer.DrillBuf;
import org.apache.drill.common.exceptions.DrillRuntimeException;
import org.apache.drill.common.expression.PathSegment;
import org.apache.drill.common.expression.SchemaPath;
@@ -36,14 +32,17 @@ import
org.apache.drill.exec.vector.complex.impl.MapOrListWriterImpl;
import org.apache.drill.exec.vector.complex.writer.BaseWriter;
import org.apache.drill.exec.vector.complex.writer.BaseWriter.ComplexWriter;
import org.apache.drill.exec.vector.complex.writer.TimeStampWriter;
+import org.apache.drill.shaded.guava.com.google.common.base.Preconditions;
import org.bson.BsonBinary;
import org.bson.BsonReader;
import org.bson.BsonType;
import org.joda.time.DateTime;
-import org.apache.drill.shaded.guava.com.google.common.base.Preconditions;
-
-import io.netty.buffer.DrillBuf;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.nio.ByteBuffer;
+import java.util.List;
public class BsonRecordReader {
static final org.slf4j.Logger logger =
org.slf4j.LoggerFactory.getLogger(BsonRecordReader.class);
@@ -178,6 +177,11 @@ public class BsonRecordReader {
writeTimeStamp(time, writer, fieldName, isList);
atLeastOneWrite = true;
break;
+ case DECIMAL128:
+ BigDecimal readBigDecimalAsDecimal128 =
reader.readDecimal128().bigDecimalValue();
+ writeDecimal128(readBigDecimalAsDecimal128, writer, fieldName,
isList);
+ atLeastOneWrite = true;
+ break;
default:
// Didn't handled REGULAR_EXPRESSION and DB_POINTER types
throw new DrillRuntimeException("UnSupported Bson type: " +
currentBsonType);
@@ -351,7 +355,16 @@ public class BsonRecordReader {
}
}
- public void ensureAtLeastOneField(ComplexWriter writer) {
+ private void writeDecimal128(BigDecimal readBigDecimal, final
MapOrListWriterImpl writer, String fieldName, boolean isList) {
+ if (isList) {
+ writer.list.varDecimal().writeVarDecimal(readBigDecimal);
+ } else {
+ writer.varDecimal(fieldName, readBigDecimal.precision(),
readBigDecimal.scale()).writeVarDecimal(readBigDecimal);
+ }
+ }
+
+
+ public void ensureAtLeastOneField(ComplexWriter writer) {
if (!atLeastOneWrite) {
// if we had no columns, create one empty one so we can return some data
// for count purposes.
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 4a77fbe..2c2363c 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
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
+import java.math.BigDecimal;
import java.time.ZoneOffset;
import java.util.Arrays;
@@ -37,6 +38,7 @@ import org.bson.BsonBinary;
import org.bson.BsonBinarySubType;
import org.bson.BsonBoolean;
import org.bson.BsonDateTime;
+import org.bson.BsonDecimal128;
import org.bson.BsonDocument;
import org.bson.BsonDocumentReader;
import org.bson.BsonDocumentWriter;
@@ -48,6 +50,7 @@ import org.bson.BsonString;
import org.bson.BsonSymbol;
import org.bson.BsonTimestamp;
import org.bson.BsonWriter;
+import org.bson.types.Decimal128;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
@@ -274,6 +277,16 @@ public class TestBsonRecordReader extends BaseTest {
assertEquals(3, reader.size());
}
+ @Test
+ public void testDecimal128Type() throws IOException {
+ BsonDocument bsonDoc = new BsonDocument();
+ bsonDoc.append("decimal128Key", new
BsonDecimal128(Decimal128.parse("12.12345624")));
+ writer.reset();
+ bsonReader.write(writer, new BsonDocumentReader(bsonDoc));
+ SingleMapReaderImpl mapReader = (SingleMapReaderImpl)
writer.getMapVector().getReader();
+ assertEquals(new BigDecimal("12.12345624"),
mapReader.reader("decimal128Key").readBigDecimal());
+ }
+
@After
public void cleanUp() {
try {