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