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 {

Reply via email to