twalthr commented on a change in pull request #7664: [FLINK-11449][table] Uncouple the Expression class from RexNodes. URL: https://github.com/apache/flink/pull/7664#discussion_r255052920
########## File path: flink-table/flink-table-planner/src/main/java/org/apache/flink/table/expressions/FunctionDefinitions.java ########## @@ -0,0 +1,198 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.flink.table.expressions; + +import java.lang.reflect.Field; +import java.util.LinkedList; +import java.util.List; + +/** + * FunctionDefinitions is like a dictionary, defining all FunctionDefinitions as constants. + */ +public class FunctionDefinitions { + + public static final FunctionDefinition CAST = new FunctionDefinition("cast"); + public static final FunctionDefinition FLATTENING = new FunctionDefinition("flattening"); + public static final FunctionDefinition GET_COMPOSITE_FIELD = new FunctionDefinition("getCompositeField"); + + // logic functions + public static final FunctionDefinition IN = new FunctionDefinition("in"); + public static final FunctionDefinition AND = new FunctionDefinition("and"); + public static final FunctionDefinition OR = new FunctionDefinition("or"); + public static final FunctionDefinition NOT = new FunctionDefinition("not"); + public static final FunctionDefinition EQUALS = new FunctionDefinition("equals"); + public static final FunctionDefinition GREATER_THAN = new FunctionDefinition("greaterThan"); + public static final FunctionDefinition GREATER_THAN_OR_EQUAL = new FunctionDefinition("greaterThanOrEqual"); + public static final FunctionDefinition LESS_THAN = new FunctionDefinition("lessThan"); + public static final FunctionDefinition LESS_THAN_OR_EQUAL = new FunctionDefinition("lessThanOrEqual"); + public static final FunctionDefinition NOT_EQUALS = new FunctionDefinition("notEquals"); + + public static final FunctionDefinition IS_NULL = new FunctionDefinition("isNull"); + public static final FunctionDefinition IS_NOT_NULL = new FunctionDefinition("isNotNull"); + public static final FunctionDefinition IS_TRUE = new FunctionDefinition("isTrue"); + public static final FunctionDefinition IS_FALSE = new FunctionDefinition("isFalse"); + public static final FunctionDefinition IS_NOT_TRUE = new FunctionDefinition("isNotTrue"); + public static final FunctionDefinition IS_NOT_FALSE = new FunctionDefinition("isNotFalse"); + public static final FunctionDefinition IF = new FunctionDefinition("if"); + public static final FunctionDefinition BETWEEN = new FunctionDefinition("between"); + public static final FunctionDefinition NOT_BETWEEN = new FunctionDefinition("notBetween"); + + // aggregate functions + public static final FunctionDefinition AVG = new FunctionDefinition("avg"); + public static final FunctionDefinition COUNT = new FunctionDefinition("count"); + public static final FunctionDefinition MAX = new FunctionDefinition("max"); + public static final FunctionDefinition MIN = new FunctionDefinition("min"); + public static final FunctionDefinition SUM = new FunctionDefinition("sum"); + public static final FunctionDefinition SUM0 = new FunctionDefinition("sum0"); + public static final FunctionDefinition STDDEV_POP = new FunctionDefinition("stddevPop"); + public static final FunctionDefinition STDDEV_SAMP = new FunctionDefinition("stddevSamp"); + public static final FunctionDefinition VAR_POP = new FunctionDefinition("varPop"); + public static final FunctionDefinition VAR_SAMP = new FunctionDefinition("varSamp"); + public static final FunctionDefinition COLLECT = new FunctionDefinition("collect"); + + // string functions + public static final FunctionDefinition CHAR_LENGTH = new FunctionDefinition("charLength"); + public static final FunctionDefinition INIT_CAP = new FunctionDefinition("initCap"); + public static final FunctionDefinition LIKE = new FunctionDefinition("like"); + public static final FunctionDefinition LOWER = new FunctionDefinition("lower"); + public static final FunctionDefinition SIMILAR = new FunctionDefinition("similar"); + public static final FunctionDefinition SUBSTRING = new FunctionDefinition("substring"); + public static final FunctionDefinition REPLACE = new FunctionDefinition("replace"); + public static final FunctionDefinition TRIM = new FunctionDefinition("trim"); + public static final FunctionDefinition UPPER = new FunctionDefinition("upper"); + public static final FunctionDefinition POSITION = new FunctionDefinition("position"); + public static final FunctionDefinition OVERLAY = new FunctionDefinition("overlay"); + public static final FunctionDefinition CONCAT = new FunctionDefinition("concat"); + public static final FunctionDefinition CONCAT_WS = new FunctionDefinition("concat_ws"); + public static final FunctionDefinition LPAD = new FunctionDefinition("lpad"); + public static final FunctionDefinition RPAD = new FunctionDefinition("rpad"); + public static final FunctionDefinition REGEXP_EXTRACT = new FunctionDefinition("regexpExtract"); + public static final FunctionDefinition FROM_BASE64 = new FunctionDefinition("fromBase64"); + public static final FunctionDefinition TO_BASE64 = new FunctionDefinition("toBase64"); + public static final FunctionDefinition UUID = new FunctionDefinition("uuid"); + public static final FunctionDefinition LTRIM = new FunctionDefinition("ltrim"); + public static final FunctionDefinition RTRIM = new FunctionDefinition("rtrim"); + public static final FunctionDefinition REPEAT = new FunctionDefinition("repeat"); + public static final FunctionDefinition REGEXP_REPLACE = new FunctionDefinition("regexpReplace"); + + // math functions + public static final FunctionDefinition PLUS = new FunctionDefinition("plus"); + public static final FunctionDefinition MINUS = new FunctionDefinition("minus"); + public static final FunctionDefinition DIVIDE = new FunctionDefinition("divide"); + public static final FunctionDefinition TIMES = new FunctionDefinition("times"); + public static final FunctionDefinition ABS = new FunctionDefinition("abs"); + public static final FunctionDefinition CEIL = new FunctionDefinition("ceil"); + public static final FunctionDefinition EXP = new FunctionDefinition("exp"); + public static final FunctionDefinition FLOOR = new FunctionDefinition("floor"); + public static final FunctionDefinition LOG10 = new FunctionDefinition("log10"); + public static final FunctionDefinition LOG2 = new FunctionDefinition("log2"); + public static final FunctionDefinition LN = new FunctionDefinition("ln"); + public static final FunctionDefinition LOG = new FunctionDefinition("log"); + public static final FunctionDefinition POWER = new FunctionDefinition("power"); + public static final FunctionDefinition MOD = new FunctionDefinition("mod"); + public static final FunctionDefinition SQRT = new FunctionDefinition("sqrt"); + public static final FunctionDefinition MINUS_PREFIX = new FunctionDefinition("minusPrefix"); + public static final FunctionDefinition SIN = new FunctionDefinition("sin"); + public static final FunctionDefinition COS = new FunctionDefinition("cos"); + public static final FunctionDefinition SINH = new FunctionDefinition("sinh"); + public static final FunctionDefinition TAN = new FunctionDefinition("tan"); + public static final FunctionDefinition TANH = new FunctionDefinition("tanh"); + public static final FunctionDefinition COT = new FunctionDefinition("cot"); + public static final FunctionDefinition ASIN = new FunctionDefinition("asin"); + public static final FunctionDefinition ACOS = new FunctionDefinition("acos"); + public static final FunctionDefinition ATAN = new FunctionDefinition("atan"); + public static final FunctionDefinition ATAN2 = new FunctionDefinition("atan2"); + public static final FunctionDefinition COSH = new FunctionDefinition("cosh"); + public static final FunctionDefinition DEGREES = new FunctionDefinition("degrees"); + public static final FunctionDefinition RADIANS = new FunctionDefinition("radians"); + public static final FunctionDefinition SIGN = new FunctionDefinition("sign"); + public static final FunctionDefinition ROUND = new FunctionDefinition("round"); + public static final FunctionDefinition PI = new FunctionDefinition("pi"); + public static final FunctionDefinition E = new FunctionDefinition("e"); + public static final FunctionDefinition RAND = new FunctionDefinition("rand"); + public static final FunctionDefinition RAND_INTEGER = new FunctionDefinition("randInteger"); + public static final FunctionDefinition BIN = new FunctionDefinition("bin"); + public static final FunctionDefinition HEX = new FunctionDefinition("hex"); + public static final FunctionDefinition TRUNCATE = new FunctionDefinition("truncate"); + + // temporal functions + public static final FunctionDefinition EXTRACT = new FunctionDefinition("extract"); + public static final FunctionDefinition CURRENT_DATE = new FunctionDefinition("currentDate"); + public static final FunctionDefinition CURRENT_TIME = new FunctionDefinition("currentTime"); + public static final FunctionDefinition CURRENT_TIMESTAMP = new FunctionDefinition("currentTimestamp"); + public static final FunctionDefinition LOCAL_TIME = new FunctionDefinition("localTime"); + public static final FunctionDefinition LOCAL_TIMESTAMP = new FunctionDefinition("localTimestamp"); + public static final FunctionDefinition QUARTER = new FunctionDefinition("quarter"); + public static final FunctionDefinition TEMPORAL_OVERLAPS = new FunctionDefinition("temporalOverlaps"); + public static final FunctionDefinition DATE_TIME_PLUS = new FunctionDefinition("dateTimePlus"); + public static final FunctionDefinition DATE_FORMAT = new FunctionDefinition("dateFormat"); + public static final FunctionDefinition TIMESTAMP_DIFF = new FunctionDefinition("timestampDiff"); + public static final FunctionDefinition TEMPORAL_FLOOR = new FunctionDefinition("temporalFloor"); + public static final FunctionDefinition TEMPORAL_CEIL = new FunctionDefinition("temporalCeil"); + + // item + public static final FunctionDefinition AT = new FunctionDefinition("at"); + + // cardinality + public static final FunctionDefinition CARDINALITY = new FunctionDefinition("cardinality"); + + // array + public static final FunctionDefinition ARRAY = new FunctionDefinition("array"); + public static final FunctionDefinition ARRAY_ELEMENT = new FunctionDefinition("element"); + + // map + public static final FunctionDefinition MAP = new FunctionDefinition("map"); + + // row + public static final FunctionDefinition ROW = new FunctionDefinition("row"); + + // window properties + public static final FunctionDefinition WIN_START = new FunctionDefinition("start"); + public static final FunctionDefinition WIN_END = new FunctionDefinition("end"); + + // ordering + public static final FunctionDefinition ASC = new FunctionDefinition("asc"); + public static final FunctionDefinition DESC = new FunctionDefinition("desc"); + + // crypto hash + public static final FunctionDefinition MD5 = new FunctionDefinition("md5"); + public static final FunctionDefinition SHA1 = new FunctionDefinition("sha1"); + public static final FunctionDefinition SHA224 = new FunctionDefinition("sha224"); + public static final FunctionDefinition SHA256 = new FunctionDefinition("sha256"); + public static final FunctionDefinition SHA384 = new FunctionDefinition("sha384"); + public static final FunctionDefinition SHA512 = new FunctionDefinition("sha512"); + public static final FunctionDefinition SHA2 = new FunctionDefinition("sha2"); + + public static List<FunctionDefinition> getDefinitions() { + List<FunctionDefinition> list = new LinkedList<>(); + for (Field field : FunctionDefinitions.class.getFields()) { + if (FunctionDefinition.class.isAssignableFrom(field.getType())) { + try { + FunctionDefinition funcDef = (FunctionDefinition) field.get(FunctionDefinitions.class); + if (funcDef != null) { + list.add(funcDef); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); Review comment: Printing a stack trace is not a correct way of handling exceptions. Instead, wrap the original exception into a `TableException` and add a proper error message. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services