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);
-//    }
-//  }
-
 }

Reply via email to