This is an automated email from the ASF dual-hosted git repository. volodymyr pushed a commit to branch mongo in repository https://gitbox.apache.org/repos/asf/drill.git
commit 9ec7978c52ffc5b2497a8019e64c7a5710046134 Author: Volodymyr Vysotskyi <[email protected]> AuthorDate: Tue Jul 13 21:51:57 2021 +0300 DRILL-7971: One more intermediate commit --- .../exec/store/mongo/MongoAggregateUtils.java | 78 +++------------------- 1 file changed, 10 insertions(+), 68 deletions(-) diff --git a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoAggregateUtils.java b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoAggregateUtils.java index a38c494..79e4872 100644 --- a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoAggregateUtils.java +++ b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoAggregateUtils.java @@ -11,6 +11,7 @@ import org.apache.calcite.sql.validate.SqlValidatorUtil; import org.apache.calcite.util.Util; import org.bson.BsonArray; import org.bson.BsonDocument; +import org.bson.BsonElement; import org.bson.BsonInt32; import org.bson.BsonNull; import org.bson.BsonString; @@ -62,8 +63,7 @@ public class MongoAggregateUtils { return false; } - public static List<Bson> getAggregateOperations(Aggregate aggregate, RelDataType rowType, MongoGroupScan groupScan) { -// List<String> list = new ArrayList<>(); + public static List<Bson> getAggregateOperations(Aggregate aggregate, RelDataType rowType) { List<BsonField> docList = new ArrayList<>(); List<String> inNames = mongoFieldNames(rowType); List<String> outNames = mongoFieldNames(aggregate.getRowType()); @@ -71,32 +71,20 @@ public class MongoAggregateUtils { Object id; if (aggregate.getGroupSet().cardinality() == 1) { String inName = inNames.get(aggregate.getGroupSet().nth(0)); -// list.add("_id: " + maybeQuote("$" + inName)); -// docList.add(new BsonField("_id", -// new BsonDocument(maybeQuote("$" + inName), new BsonString(maybeQuote("$" + inName))))); id = "$" + inName; - ++i; } else { - List<String> keys = new ArrayList<>(); + List<BsonElement> elements = new ArrayList<>(); for (int group : aggregate.getGroupSet()) { String inName = inNames.get(group); - keys.add(inName + ": " + quote("$" + inName)); - ++i; + elements.add(new BsonElement(inName, new BsonString("$" + inName))); } -// list.add("_id: " + Util.toString(keys, "{", ", ", "}")); -// docList.add(new BsonField("_id", BsonDocument.parse(Util.toString(keys, "{", ", ", "}")))); - id = BsonDocument.parse(Util.toString(keys, "{", ", ", "}")); + id = new BsonDocument(elements); } + i += aggregate.getGroupSet().cardinality(); for (AggregateCall aggCall : aggregate.getAggCallList()) { -// list.add( -// maybeQuote(outNames.get(i)) + ": " -// + toMongo(aggCall.getAggregation(), inNames, aggCall.getArgList())); - docList.add(bsonAggregate(inNames, outNames.get(i), aggCall)); - i++; + docList.add(bsonAggregate(inNames, outNames.get(i++), aggCall)); } -// List<Pair<String, String>> aggsList = new ArrayList<>(); List<Bson> docAggList = new ArrayList<>(); -// aggsList.add(Pair.of(null, "{$group: " + Util.toString(list, "{", ", ", "}") + "}")); docAggList.add(Aggregates.group(id, docList).toBsonDocument()); List<String> fixups; if (aggregate.getGroupSet().cardinality() == 1) { @@ -124,22 +112,14 @@ public class MongoAggregateUtils { } for (AggregateCall ignored : aggregate.getAggCallList()) { String outName = outNames.get(i++); - fixups.add( - maybeQuote(outName) + ": " + maybeQuote( - "$" + outName)); + fixups.add(maybeQuote(outName) + ": " + maybeQuote("$" + outName)); } } if (!aggregate.getGroupSet().isEmpty()) { -// aggsList.add(Pair.of(null, "{$project: " + Util.toString(fixups, "{", ", ", "}") + "}")); - docAggList.add(new Document("$project", BsonDocument.parse(Util.toString(fixups, "{", ", ", "}") + "}"))); + docAggList.add(Aggregates.project(BsonDocument.parse(Util.toString(fixups, "{", ", ", "}") + "}")).toBsonDocument()); } - List<Bson> allOperations = new ArrayList<>(groupScan.getScanSpec().getOperations()); -// Pair.right(aggsList).stream() -// .map(BsonDocument::parse) -// .forEach(allOperations::add); - allOperations.addAll(docAggList); - return allOperations; + return docAggList; } private static BsonField bsonAggregate(List<String> inNames, String outName, AggregateCall aggCall) { @@ -194,42 +174,4 @@ public class MongoAggregateUtils { } return null; } - -// private static String mongoAggName(String aggregationName) { -// if (aggregationName.equals(SqlStdOperatorTable.SUM.getName()) -// || aggregationName.equals(SqlStdOperatorTable.SUM0.getName())) { -// return "$sum"; -// } else if (aggregationName.equals(SqlStdOperatorTable.MIN.getName())) { -// return "$min"; -// } else if (aggregationName.equals(SqlStdOperatorTable.MAX.getName())) { -// return "$max"; -// } else if (aggregationName.equals(SqlStdOperatorTable.AVG.getName())) { -// return "$avg"; -// } -// return null; -// } - -// private static String toMongo(SqlAggFunction aggregation, List<String> inNames, -// List<Integer> args) { -// if (aggregation.getName().equals(SqlStdOperatorTable.COUNT.getName())) { -// if (args.size() == 0) { -// return "{$sum: 1}"; -// } else { -// assert args.size() == 1; -// final String inName = inNames.get(args.get(0)); -// return "{$sum: {$cond: [ {$eq: [" -// + quote(inName) -// + ", null]}, 0, 1]}}"; -// } -// } else { -// String mongoAggName = mongoAggName(aggregation.getName()); -// assert args.size() == 1; -// if (mongoAggName != null) { -// String inName = inNames.get(args.get(0)); -// return "{" + mongoAggName + ": " + maybeQuote("$" + inName) + "}"; -// } -// throw new AssertionError("unknown aggregate " + aggregation); -// } -// } - }
