aboutsummaryrefslogtreecommitdiff
path: root/contrib/storage-mongo
diff options
context:
space:
mode:
authorchunhui-shi <cshi@maprtech.com>2016-12-18 00:27:50 -0800
committerSudheesh Katkam <sudheesh@apache.org>2017-02-24 19:01:40 -0800
commitb892b997dfa0259550942f076b0afd89b27c9fdf (patch)
tree371c1733d6a0f691ac10f4044bc29e8006a9d1aa /contrib/storage-mongo
parent5db557c66b3d3b1a01ff6a8d1c0081205c8b6ef3 (diff)
DRILL-5088: Set client's codec for toJson
closes #702
Diffstat (limited to 'contrib/storage-mongo')
-rw-r--r--contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoGroupScan.java8
1 files changed, 7 insertions, 1 deletions
diff --git a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoGroupScan.java b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoGroupScan.java
index 43b5c6d67..b8341931e 100644
--- a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoGroupScan.java
+++ b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoGroupScan.java
@@ -52,6 +52,8 @@ import org.apache.drill.exec.store.StoragePluginRegistry;
import org.apache.drill.exec.store.mongo.MongoSubScan.MongoSubScanSpec;
import org.apache.drill.exec.store.mongo.common.ChunkInfo;
import org.bson.Document;
+import org.bson.codecs.BsonTypeClassMap;
+import org.bson.codecs.DocumentCodec;
import org.bson.conversions.Bson;
import org.bson.types.MaxKey;
import org.bson.types.MinKey;
@@ -503,7 +505,11 @@ public class MongoGroupScan extends AbstractGroupScan implements
long numDocs = collection.count();
float approxDiskCost = 0;
if (numDocs != 0) {
- String json = collection.find().first().toJson();
+ //toJson should use client's codec, otherwise toJson could fail on
+ // some types not known to DocumentCodec, e.g. DBRef.
+ final DocumentCodec codec =
+ new DocumentCodec(client.getMongoClientOptions().getCodecRegistry(), new BsonTypeClassMap());
+ String json = collection.find().first().toJson(codec);
approxDiskCost = json.getBytes().length * numDocs;
}
return new ScanStats(GroupScanProperty.EXACT_ROW_COUNT, numDocs, 1, approxDiskCost);