From e642f0da4128139b072cc5787abaede0def6e24a Mon Sep 17 00:00:00 2001 From: chunhui-shi Date: Sun, 18 Dec 2016 00:27:50 -0800 Subject: [PATCH] DRILL-5088: set client's codec for toJson --- .../org/apache/drill/exec/store/mongo/MongoGroupScan.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 43b5c6d6746..b8341931e99 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.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 ScanStats getScanStats() { 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);