in core/src/main/java/org/apache/calcite/adapter/enumerable/RexImpTable.java [904:1221]
void populate2() {
// bitwise
defineMethod(BITCOUNT, BuiltInMethod.BITCOUNT.method, NullPolicy.STRICT);
defineMethod(BIT_COUNT_BIG_QUERY, BuiltInMethod.BITCOUNT.method, NullPolicy.STRICT);
define(BIT_COUNT_MYSQL, new BitCountMySQLImplementor());
// datetime
define(DATETIME_PLUS, new DatetimeArithmeticImplementor());
define(MINUS_DATE, new DatetimeArithmeticImplementor());
define(EXTRACT, new ExtractImplementor());
define(DATE_PART, new ExtractImplementor());
define(FLOOR,
new FloorImplementor(BuiltInMethod.FLOOR.method,
BuiltInMethod.UNIX_TIMESTAMP_FLOOR.method,
BuiltInMethod.UNIX_DATE_FLOOR.method,
BuiltInMethod.CUSTOM_TIMESTAMP_FLOOR.method,
BuiltInMethod.CUSTOM_DATE_FLOOR.method));
define(CEIL,
new FloorImplementor(BuiltInMethod.CEIL.method,
BuiltInMethod.UNIX_TIMESTAMP_CEIL.method,
BuiltInMethod.UNIX_DATE_CEIL.method,
BuiltInMethod.CUSTOM_TIMESTAMP_CEIL.method,
BuiltInMethod.CUSTOM_DATE_CEIL.method));
define(TIMESTAMP_ADD,
new TimestampAddImplementor(
BuiltInMethod.CUSTOM_TIMESTAMP_ADD.method,
BuiltInMethod.CUSTOM_DATE_ADD.method));
defineEquiv(DATEADD, TIMESTAMP_ADD);
define(TIMESTAMP_DIFF,
new TimestampDiffImplementor(
BuiltInMethod.CUSTOM_TIMESTAMP_DIFF.method,
BuiltInMethod.CUSTOM_DATE_DIFF.method));
// TIMESTAMP_TRUNC and TIME_TRUNC methods are syntactic sugar for standard
// datetime FLOOR.
defineEquiv(DATE_TRUNC, FLOOR);
defineEquiv(TIMESTAMP_TRUNC, FLOOR);
defineEquiv(TIME_TRUNC, FLOOR);
defineEquiv(DATETIME_TRUNC, FLOOR);
// BigQuery FLOOR and CEIL should use same implementation as standard
defineEquiv(CEIL_BIG_QUERY, CEIL);
defineEquiv(FLOOR_BIG_QUERY, FLOOR);
define(LAST_DAY,
new LastDayImplementor("lastDay", BuiltInMethod.LAST_DAY));
define(DAYNAME,
new PeriodNameImplementor("dayName",
BuiltInMethod.DAYNAME_WITH_TIMESTAMP,
BuiltInMethod.DAYNAME_WITH_DATE));
define(MONTHNAME,
new PeriodNameImplementor("monthName",
BuiltInMethod.MONTHNAME_WITH_TIMESTAMP,
BuiltInMethod.MONTHNAME_WITH_DATE));
defineMethod(TIMESTAMP_SECONDS, BuiltInMethod.TIMESTAMP_SECONDS.method,
NullPolicy.STRICT);
defineMethod(TIMESTAMP_MILLIS, BuiltInMethod.TIMESTAMP_MILLIS.method,
NullPolicy.STRICT);
defineMethod(TIMESTAMP_MICROS, BuiltInMethod.TIMESTAMP_MICROS.method,
NullPolicy.STRICT);
defineMethod(UNIX_SECONDS, BuiltInMethod.UNIX_SECONDS.method,
NullPolicy.STRICT);
defineMethod(UNIX_MILLIS, BuiltInMethod.UNIX_MILLIS.method,
NullPolicy.STRICT);
defineMethod(UNIX_MICROS, BuiltInMethod.UNIX_MICROS.method,
NullPolicy.STRICT);
defineMethod(DATE_FROM_UNIX_DATE,
BuiltInMethod.DATE_FROM_UNIX_DATE.method, NullPolicy.STRICT);
defineMethod(UNIX_DATE, BuiltInMethod.UNIX_DATE.method,
NullPolicy.STRICT);
// Datetime constructors
defineMethod(DATE, BuiltInMethod.DATE.method, NullPolicy.STRICT);
defineMethod(DATETIME, BuiltInMethod.DATETIME.method, NullPolicy.STRICT);
defineMethod(TIME, BuiltInMethod.TIME.method, NullPolicy.STRICT);
defineMethod(TIMESTAMP, BuiltInMethod.TIMESTAMP.method,
NullPolicy.STRICT);
// Datetime parsing methods
defineReflective(PARSE_DATE, BuiltInMethod.PARSE_DATE.method);
defineReflective(PARSE_DATETIME, BuiltInMethod.PARSE_DATETIME.method);
defineReflective(PARSE_TIME, BuiltInMethod.PARSE_TIME.method);
defineReflective(PARSE_TIMESTAMP, BuiltInMethod.PARSE_TIMESTAMP.method);
// Datetime formatting methods
defineReflective(TO_CHAR, BuiltInMethod.TO_CHAR.method);
define(TO_CHAR_PG, new ToCharPgImplementor());
defineReflective(TO_DATE, BuiltInMethod.TO_DATE.method);
define(TO_DATE_PG,
new ToTimestampPgImplementor("toDate",
BuiltInMethod.TO_DATE_PG.method));
defineReflective(TO_TIMESTAMP, BuiltInMethod.TO_TIMESTAMP.method);
define(TO_TIMESTAMP_PG,
new ToTimestampPgImplementor("toTimestamp",
BuiltInMethod.TO_TIMESTAMP_PG.method));
final FormatDatetimeImplementor datetimeFormatImpl =
new FormatDatetimeImplementor();
define(FORMAT_DATE, datetimeFormatImpl);
define(FORMAT_DATETIME, datetimeFormatImpl);
define(FORMAT_TIME, datetimeFormatImpl);
define(FORMAT_TIMESTAMP, datetimeFormatImpl);
// Boolean operators
define(IS_NULL, new IsNullImplementor());
define(IS_NOT_NULL, new IsNotNullImplementor());
define(IS_TRUE, new IsTrueImplementor());
define(IS_NOT_TRUE, new IsNotTrueImplementor());
define(IS_FALSE, new IsFalseImplementor());
define(IS_NOT_FALSE, new IsNotFalseImplementor());
define(IS_NOT_DISTINCT_FROM, new IsNotDistinctFromImplementor());
// LIKE, ILIKE, RLIKE and SIMILAR
defineReflective(LIKE, BuiltInMethod.LIKE.method,
BuiltInMethod.LIKE_ESCAPE.method);
defineReflective(ILIKE, BuiltInMethod.ILIKE.method,
BuiltInMethod.ILIKE_ESCAPE.method);
defineReflective(RLIKE, BuiltInMethod.RLIKE.method);
defineReflective(SIMILAR_TO, BuiltInMethod.SIMILAR.method,
BuiltInMethod.SIMILAR_ESCAPE.method);
// POSIX REGEX
ReflectiveImplementor insensitiveImplementor =
defineReflective(POSIX_REGEX_CASE_INSENSITIVE,
BuiltInMethod.POSIX_REGEX_INSENSITIVE.method);
ReflectiveImplementor sensitiveImplementor =
defineReflective(POSIX_REGEX_CASE_SENSITIVE,
BuiltInMethod.POSIX_REGEX_SENSITIVE.method);
define(NEGATED_POSIX_REGEX_CASE_INSENSITIVE,
NotImplementor.of(insensitiveImplementor));
define(NEGATED_POSIX_REGEX_CASE_SENSITIVE,
NotImplementor.of(sensitiveImplementor));
defineReflective(REGEXP_REPLACE_2, BuiltInMethod.REGEXP_REPLACE2.method);
defineReflective(REGEXP_REPLACE_3, BuiltInMethod.REGEXP_REPLACE3.method);
defineReflective(REGEXP_REPLACE_4, BuiltInMethod.REGEXP_REPLACE4.method);
defineReflective(REGEXP_REPLACE_5, BuiltInMethod.REGEXP_REPLACE5_OCCURRENCE.method,
BuiltInMethod.REGEXP_REPLACE5_MATCHTYPE.method);
defineReflective(REGEXP_REPLACE_5_ORACLE, BuiltInMethod.REGEXP_REPLACE5_OCCURRENCE.method);
defineReflective(REGEXP_REPLACE_6, BuiltInMethod.REGEXP_REPLACE6.method);
defineReflective(REGEXP_REPLACE_BIG_QUERY_3, BuiltInMethod.REGEXP_REPLACE_BIG_QUERY_3.method);
defineReflective(REGEXP_REPLACE_PG_3, BuiltInMethod.REGEXP_REPLACE_PG_3.method);
defineReflective(REGEXP_REPLACE_PG_4, BuiltInMethod.REGEXP_REPLACE_PG_4.method);
// Multisets & arrays
defineMethod(CARDINALITY, BuiltInMethod.COLLECTION_SIZE.method,
NullPolicy.STRICT);
defineMethod(SLICE, BuiltInMethod.SLICE.method, NullPolicy.STRICT);
defineMethod(ELEMENT, BuiltInMethod.ELEMENT.method, NullPolicy.STRICT);
defineMethod(STRUCT_ACCESS, BuiltInMethod.STRUCT_ACCESS.method, NullPolicy.ANY);
defineMethod(MEMBER_OF, BuiltInMethod.MEMBER_OF.method, NullPolicy.NONE);
defineMethod(ARRAY_APPEND, BuiltInMethod.ARRAY_APPEND.method, NullPolicy.ARG0);
defineMethod(ARRAY_COMPACT, BuiltInMethod.ARRAY_COMPACT.method, NullPolicy.STRICT);
defineMethod(ARRAY_CONTAINS, BuiltInMethod.LIST_CONTAINS.method, NullPolicy.ANY);
defineMethod(ARRAY_DISTINCT, BuiltInMethod.ARRAY_DISTINCT.method, NullPolicy.STRICT);
defineMethod(ARRAY_EXCEPT, BuiltInMethod.ARRAY_EXCEPT.method, NullPolicy.ANY);
defineMethod(ARRAY_JOIN, BuiltInMethod.ARRAY_TO_STRING.method,
NullPolicy.STRICT);
defineMethod(ARRAY_INSERT, BuiltInMethod.ARRAY_INSERT.method, NullPolicy.ARG0);
defineMethod(ARRAY_INTERSECT, BuiltInMethod.ARRAY_INTERSECT.method, NullPolicy.ANY);
defineMethod(ARRAY_LENGTH, BuiltInMethod.COLLECTION_SIZE.method, NullPolicy.STRICT);
defineMethod(ARRAY_MAX, BuiltInMethod.ARRAY_MAX.method, NullPolicy.STRICT);
defineMethod(ARRAY_MIN, BuiltInMethod.ARRAY_MIN.method, NullPolicy.STRICT);
defineMethod(ARRAY_PREPEND, BuiltInMethod.ARRAY_PREPEND.method, NullPolicy.ARG0);
defineMethod(ARRAY_POSITION, BuiltInMethod.ARRAY_POSITION.method, NullPolicy.ANY);
defineMethod(ARRAY_REMOVE, BuiltInMethod.ARRAY_REMOVE.method, NullPolicy.ANY);
defineMethod(ARRAY_REPEAT, BuiltInMethod.ARRAY_REPEAT.method, NullPolicy.NONE);
defineMethod(ARRAY_REVERSE, BuiltInMethod.ARRAY_REVERSE.method, NullPolicy.STRICT);
defineMethod(ARRAY_SIZE, BuiltInMethod.COLLECTION_SIZE.method, NullPolicy.STRICT);
defineMethod(ARRAY_SLICE, BuiltInMethod.ARRAY_SLICE.method, NullPolicy.STRICT);
defineMethod(ARRAY_TO_STRING, BuiltInMethod.ARRAY_TO_STRING.method,
NullPolicy.STRICT);
defineMethod(ARRAY_UNION, BuiltInMethod.ARRAY_UNION.method, NullPolicy.ANY);
defineMethod(ARRAYS_OVERLAP, BuiltInMethod.ARRAYS_OVERLAP.method, NullPolicy.ANY);
defineMethod(ARRAYS_ZIP, BuiltInMethod.ARRAYS_ZIP.method, NullPolicy.ANY);
defineMethod(EXISTS, BuiltInMethod.EXISTS.method, NullPolicy.ANY);
defineMethod(MAP_CONCAT, BuiltInMethod.MAP_CONCAT.method, NullPolicy.ANY);
defineMethod(MAP_CONTAINS_KEY, BuiltInMethod.MAP_CONTAINS_KEY.method, NullPolicy.ANY);
defineMethod(MAP_ENTRIES, BuiltInMethod.MAP_ENTRIES.method, NullPolicy.STRICT);
defineMethod(MAP_KEYS, BuiltInMethod.MAP_KEYS.method, NullPolicy.STRICT);
defineMethod(MAP_VALUES, BuiltInMethod.MAP_VALUES.method, NullPolicy.STRICT);
defineMethod(MAP_FROM_ARRAYS, BuiltInMethod.MAP_FROM_ARRAYS.method, NullPolicy.ANY);
defineMethod(MAP_FROM_ENTRIES, BuiltInMethod.MAP_FROM_ENTRIES.method, NullPolicy.STRICT);
define(STR_TO_MAP, new StringToMapImplementor());
defineMethod(SUBSTRING_INDEX, BuiltInMethod.SUBSTRING_INDEX.method, NullPolicy.STRICT);
define(ARRAY_CONCAT, new ArrayConcatImplementor());
define(SORT_ARRAY, new SortArrayImplementor());
final MethodImplementor isEmptyImplementor =
new MethodImplementor(BuiltInMethod.IS_EMPTY.method, NullPolicy.STRICT,
false);
define(IS_EMPTY, isEmptyImplementor);
define(IS_NOT_EMPTY, NotImplementor.of(isEmptyImplementor));
final MethodImplementor isASetImplementor =
new MethodImplementor(BuiltInMethod.IS_A_SET.method, NullPolicy.STRICT,
false);
define(IS_A_SET, isASetImplementor);
define(IS_NOT_A_SET, NotImplementor.of(isASetImplementor));
defineMethod(MULTISET_INTERSECT_DISTINCT,
BuiltInMethod.MULTISET_INTERSECT_DISTINCT.method, NullPolicy.STRICT);
defineMethod(MULTISET_INTERSECT,
BuiltInMethod.MULTISET_INTERSECT_ALL.method, NullPolicy.STRICT);
defineMethod(MULTISET_EXCEPT_DISTINCT,
BuiltInMethod.MULTISET_EXCEPT_DISTINCT.method, NullPolicy.STRICT);
defineMethod(MULTISET_EXCEPT, BuiltInMethod.MULTISET_EXCEPT_ALL.method, NullPolicy.STRICT);
defineMethod(MULTISET_UNION_DISTINCT,
BuiltInMethod.MULTISET_UNION_DISTINCT.method, NullPolicy.STRICT);
defineMethod(MULTISET_UNION, BuiltInMethod.MULTISET_UNION_ALL.method, NullPolicy.STRICT);
final MethodImplementor subMultisetImplementor =
new MethodImplementor(BuiltInMethod.SUBMULTISET_OF.method, NullPolicy.STRICT, false);
define(SUBMULTISET_OF, subMultisetImplementor);
define(NOT_SUBMULTISET_OF, NotImplementor.of(subMultisetImplementor));
define(COALESCE, new CoalesceImplementor());
define(CAST, new CastImplementor());
define(SAFE_CAST, new CastImplementor());
define(TRY_CAST, new CastImplementor());
define(REINTERPRET, new ReinterpretImplementor());
define(CONVERT, new ConvertImplementor());
define(TRANSLATE, new TranslateImplementor());
final RexCallImplementor value = new ValueConstructorImplementor();
define(MAP_VALUE_CONSTRUCTOR, value);
define(ARRAY_VALUE_CONSTRUCTOR, value);
defineMethod(ARRAY, BuiltInMethod.ARRAYS_AS_LIST.method, NullPolicy.NONE);
defineMethod(MAP, BuiltInMethod.MAP.method, NullPolicy.NONE);
// ITEM operator
define(ITEM, new ItemImplementor());
// BigQuery array subscript operators
final ArrayItemImplementor arrayItemImplementor = new ArrayItemImplementor();
define(OFFSET, arrayItemImplementor);
define(ORDINAL, arrayItemImplementor);
define(SAFE_OFFSET, arrayItemImplementor);
define(SAFE_ORDINAL, arrayItemImplementor);
define(DEFAULT, new DefaultImplementor());
// Sequences
defineMethod(CURRENT_VALUE, BuiltInMethod.SEQUENCE_CURRENT_VALUE.method,
NullPolicy.STRICT);
defineMethod(NEXT_VALUE, BuiltInMethod.SEQUENCE_NEXT_VALUE.method,
NullPolicy.STRICT);
// Compression Operators
defineMethod(COMPRESS, BuiltInMethod.COMPRESS.method, NullPolicy.ARG0);
// Url Operators
defineMethod(URL_ENCODE, BuiltInMethod.URL_ENCODE.method, NullPolicy.ARG0);
defineMethod(URL_DECODE, BuiltInMethod.URL_DECODE.method, NullPolicy.ARG0);
// Xml Operators
defineMethod(EXTRACT_VALUE, BuiltInMethod.EXTRACT_VALUE.method, NullPolicy.ARG0);
defineMethod(XML_TRANSFORM, BuiltInMethod.XML_TRANSFORM.method, NullPolicy.ARG0);
defineMethod(EXTRACT_XML, BuiltInMethod.EXTRACT_XML.method, NullPolicy.ARG0);
defineMethod(EXISTS_NODE, BuiltInMethod.EXISTS_NODE.method, NullPolicy.ARG0);
// Json Operators
defineMethod(JSON_VALUE_EXPRESSION,
BuiltInMethod.JSON_VALUE_EXPRESSION.method, NullPolicy.STRICT);
defineMethod(JSON_TYPE_OPERATOR,
BuiltInMethod.JSON_VALUE_EXPRESSION.method, NullPolicy.STRICT);
defineReflective(JSON_EXISTS, BuiltInMethod.JSON_EXISTS2.method,
BuiltInMethod.JSON_EXISTS3.method);
define(JSON_VALUE,
new JsonValueImplementor(BuiltInMethod.JSON_VALUE.method));
define(JSON_QUERY, new JsonQueryImplementor(BuiltInMethod.JSON_QUERY.method));
defineMethod(JSON_TYPE, BuiltInMethod.JSON_TYPE.method, NullPolicy.ARG0);
defineMethod(JSON_DEPTH, BuiltInMethod.JSON_DEPTH.method, NullPolicy.ARG0);
defineMethod(JSON_INSERT, BuiltInMethod.JSON_INSERT.method, NullPolicy.ARG0);
defineMethod(JSON_KEYS, BuiltInMethod.JSON_KEYS.method, NullPolicy.ARG0);
defineMethod(JSON_PRETTY, BuiltInMethod.JSON_PRETTY.method, NullPolicy.ARG0);
defineMethod(JSON_LENGTH, BuiltInMethod.JSON_LENGTH.method, NullPolicy.ARG0);
defineMethod(JSON_REMOVE, BuiltInMethod.JSON_REMOVE.method, NullPolicy.ARG0);
defineMethod(JSON_STORAGE_SIZE, BuiltInMethod.JSON_STORAGE_SIZE.method, NullPolicy.ARG0);
defineMethod(JSON_REPLACE, BuiltInMethod.JSON_REPLACE.method, NullPolicy.ARG0);
defineMethod(JSON_SET, BuiltInMethod.JSON_SET.method, NullPolicy.ARG0);
defineMethod(JSON_OBJECT, BuiltInMethod.JSON_OBJECT.method, NullPolicy.NONE);
defineMethod(JSON_ARRAY, BuiltInMethod.JSON_ARRAY.method, NullPolicy.NONE);
defineAgg(JSON_OBJECTAGG.with(SqlJsonConstructorNullClause.ABSENT_ON_NULL),
JsonObjectAggImplementor
.supplierFor(BuiltInMethod.JSON_OBJECTAGG_ADD.method));
defineAgg(JSON_OBJECTAGG.with(SqlJsonConstructorNullClause.NULL_ON_NULL),
JsonObjectAggImplementor
.supplierFor(BuiltInMethod.JSON_OBJECTAGG_ADD.method));
defineAgg(JSON_ARRAYAGG.with(SqlJsonConstructorNullClause.ABSENT_ON_NULL),
JsonArrayAggImplementor
.supplierFor(BuiltInMethod.JSON_ARRAYAGG_ADD.method));
defineAgg(JSON_ARRAYAGG.with(SqlJsonConstructorNullClause.NULL_ON_NULL),
JsonArrayAggImplementor
.supplierFor(BuiltInMethod.JSON_ARRAYAGG_ADD.method));
define(IS_JSON_VALUE,
new MethodImplementor(BuiltInMethod.IS_JSON_VALUE.method,
NullPolicy.NONE, false));
define(IS_JSON_OBJECT,
new MethodImplementor(BuiltInMethod.IS_JSON_OBJECT.method,
NullPolicy.NONE, false));
define(IS_JSON_ARRAY,
new MethodImplementor(BuiltInMethod.IS_JSON_ARRAY.method,
NullPolicy.NONE, false));
define(IS_JSON_SCALAR,
new MethodImplementor(BuiltInMethod.IS_JSON_SCALAR.method,
NullPolicy.NONE, false));
define(IS_NOT_JSON_VALUE,
NotJsonImplementor.of(
new MethodImplementor(BuiltInMethod.IS_JSON_VALUE.method,
NullPolicy.NONE, false)));
define(IS_NOT_JSON_OBJECT,
NotJsonImplementor.of(
new MethodImplementor(BuiltInMethod.IS_JSON_OBJECT.method,
NullPolicy.NONE, false)));
define(IS_NOT_JSON_ARRAY,
NotJsonImplementor.of(
new MethodImplementor(BuiltInMethod.IS_JSON_ARRAY.method,
NullPolicy.NONE, false)));
define(IS_NOT_JSON_SCALAR,
NotJsonImplementor.of(
new MethodImplementor(BuiltInMethod.IS_JSON_SCALAR.method,
NullPolicy.NONE, false)));
}