private void initializeRexCallToMongoMap()

in calcite-adapter/src/main/java/software/amazon/documentdb/jdbc/calcite/adapter/DocumentDbRules.java [248:333]


        private void initializeRexCallToMongoMap(final Instant currentTime) {
            // Arithmetic
            rexCallToMongoMap.put(SqlStdOperatorTable.DIVIDE,
                    (call, strings) -> getMongoAggregateForOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.MULTIPLY,
                    (call, strings) -> getMongoAggregateForOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.MOD,
                    (call, strings) -> getMongoAggregateForOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.PLUS,
                    (call, strings) -> getMongoAggregateForOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.MINUS,
                    (call, strings) -> getMongoAggregateForOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.DIVIDE_INTEGER,
                    RexToMongoTranslator::getMongoAggregateForIntegerDivide);
            // Boolean
            rexCallToMongoMap.put(SqlStdOperatorTable.AND,
                    (call, strings) -> getMongoAggregateForAndOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.OR,
                    (call, strings) -> getMongoAggregateForOrOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.NOT,
                    (call, strings) -> getMongoAggregateForComparisonOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            // Comparison
            rexCallToMongoMap.put(SqlStdOperatorTable.EQUALS,
                    (call, strings) -> getMongoAggregateForComparisonOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            // Need to handle null value
            rexCallToMongoMap.put(SqlStdOperatorTable.NOT_EQUALS,
                    (call, strings) -> getMongoAggregateForComparisonOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.GREATER_THAN,
                    (call, strings) -> getMongoAggregateForComparisonOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.GREATER_THAN_OR_EQUAL,
                    (call, strings) -> getMongoAggregateForComparisonOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.LESS_THAN,
                    (call, strings) -> getMongoAggregateForComparisonOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.LESS_THAN_OR_EQUAL,
                    (call, strings) -> getMongoAggregateForComparisonOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));

            rexCallToMongoMap.put(SqlStdOperatorTable.IS_NULL,
                    (call, strings) -> getMongoAggregateForNullOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));
            rexCallToMongoMap.put(SqlStdOperatorTable.IS_NOT_NULL,
                    (call, strings) -> getMongoAggregateForNullOperator(
                            call, strings, MONGO_OPERATORS.get(call.getOperator())));

            // Date operations
            rexCallToMongoMap.put(SqlStdOperatorTable.CURRENT_DATE,
                    (call, operands) -> DateFunctionTranslator.translateCurrentTimestamp(currentTime));
            rexCallToMongoMap.put(SqlStdOperatorTable.CURRENT_TIME,
                    (call, operands) -> DateFunctionTranslator.translateCurrentTimestamp(currentTime));
            rexCallToMongoMap.put(SqlStdOperatorTable.CURRENT_TIMESTAMP,
                    (call, operands) -> DateFunctionTranslator.translateCurrentTimestamp(currentTime));
            rexCallToMongoMap.put(SqlStdOperatorTable.DATETIME_PLUS, DateFunctionTranslator::translateDateAdd);
            rexCallToMongoMap.put(SqlStdOperatorTable.EXTRACT, DateFunctionTranslator::translateExtract);
            rexCallToMongoMap.put(SqlLibraryOperators.DAYNAME, DateFunctionTranslator::translateDayName);
            rexCallToMongoMap.put(SqlLibraryOperators.MONTHNAME, DateFunctionTranslator::translateMonthName);
            rexCallToMongoMap.put(SqlStdOperatorTable.FLOOR, DateFunctionTranslator::translateFloor);
            rexCallToMongoMap.put(SqlStdOperatorTable.MINUS_DATE, DateFunctionTranslator::translateDateDiff);

            // CASE, ITEM
            rexCallToMongoMap.put(SqlStdOperatorTable.CASE, RexToMongoTranslator::getMongoAggregateForCase);
            rexCallToMongoMap.put(SqlStdOperatorTable.ITEM, RexToMongoTranslator::getMongoAggregateForItem);

            // String operations
            rexCallToMongoMap.put(SqlStdOperatorTable.CONCAT, StringFunctionTranslator::getMongoAggregateForConcatOperator);
            rexCallToMongoMap.put(SqlLibraryOperators.CONCAT_FUNCTION, StringFunctionTranslator::getMongoAggregateForConcatOperator);
            rexCallToMongoMap.put(SqlStdOperatorTable.SUBSTRING, StringFunctionTranslator::getMongoAggregateForSubstringOperator);
            rexCallToMongoMap.put(SqlStdOperatorTable.POSITION, StringFunctionTranslator::getMongoAggregateForPositionStringOperator);
            rexCallToMongoMap.put(SqlStdOperatorTable.UPPER, StringFunctionTranslator::getMongoAggregateForStringOperator);
            rexCallToMongoMap.put(SqlStdOperatorTable.LOWER, StringFunctionTranslator::getMongoAggregateForStringOperator);
            rexCallToMongoMap.put(SqlStdOperatorTable.CHAR_LENGTH, StringFunctionTranslator::getMongoAggregateForStringOperator);
            rexCallToMongoMap.put(SqlLibraryOperators.LEFT, StringFunctionTranslator::getMongoAggregateForLeftOperator);
            rexCallToMongoMap.put(SqlLibraryOperators.RIGHT, StringFunctionTranslator::getMongoAggregateForRightOperator);
        }