Files
oceanbase/src/sql/resolver/expr/ob_expr_info_flag.h
oceanbase-admin cea7de1475 init push
2021-05-31 22:56:52 +08:00

486 lines
10 KiB
C++

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#ifndef OCEANBASE_SRC_SQL_RESOLVER_EXPR_OB_EXPR_INFO_FLAG_H_
#define OCEANBASE_SRC_SQL_RESOLVER_EXPR_OB_EXPR_INFO_FLAG_H_
#include "lib/utility/ob_print_utils.h"
namespace oceanbase {
namespace sql {
// IS_XXX and CNT_XXX must be added in one-to-one correspondence
enum ObExprInfoFlag {
IS_CONST = 0x0, // const expression, e.g. 1.2, 'abc'
IS_COLUMN, // column expression, e.g. C1, T1.C1
IS_PARAM, // vaiable expression, e.g. ?
IS_AGG, // aggregate function, e.g. max, avg
IS_FUNC, // system function
IS_IN,
IS_NOT,
IS_OR,
IS_SUB_QUERY,
IS_ALIAS,
IS_CUR_TIME,
IS_IS_EXPR,
IS_CALCULABLE_EXPR,
IS_VALUES,
IS_DEFAULT,
IS_USER_VARIABLE,
IS_STATE_FUNC,
IS_SET_OP,
IS_LAST_INSERT_ID,
IS_DOMAIN_INDEX_FUNC,
IS_WINDOW_FUNC,
IS_PRIOR,
IS_RAND_FUNC, // rand(const) or rand() is a random function , rand(some column) is not a random function
IS_ROWNUM,
IS_LEVEL,
IS_CONNECT_BY_ISLEAF,
IS_CONNECT_BY_ISCYCLE,
IS_PSEUDO_COLUMN,
IS_CONNECT_BY_ROOT,
IS_SYS_CONNECT_BY_PATH,
IS_OUTER_JOIN_SYMBOL,
IS_SO_UDF_EXPR, // expression contains user defined function(dll) expression. add prefix 'SO', means different with
// PL UDF.
IS_SEQ_EXPR,
IS_EXEC_PARAM, // for opt to distinguish normal paramaterized const and exec-params
IS_ENUM_OR_SET,
IS_VOLATILE_CONST, // the const expr may be altered by overwrite, non-const in execution.
IS_ORA_ROWSCN_EXPR,
IS_VAR_EXPR,
IS_CONST_EXPR, // expression contains calculable expression
CNT_CONST_EXPR, // IS_CONST_EXPR and CNT_CONST_EXPR at most one is true
CNT_CONST, // expression contains const
CNT_COLUMN, // expression contains column
CNT_PARAM, // expression contains variable
CNT_AGG, // expression contains aggregate function
CNT_FUNC, // expression contains system function
CNT_IN, // expression contains In expression
CNT_NOT, // expression contains NOT expression
CNT_OR, // expression contains OR expression
CNT_SUB_QUERY,
CNT_ALIAS,
CNT_CUR_TIME,
CNT_IS_EXPR,
CNT_CALCULABLE_EXPR,
CNT_VALUES,
CNT_DEFAULT,
CNT_USER_VARIABLE,
CNT_STATE_FUNC,
CNT_SET_OP,
CNT_LAST_INSERT_ID,
CNT_DOMAIN_INDEX_FUNC,
CNT_WINDOW_FUNC,
CNT_PRIOR,
CNT_RAND_FUNC,
CNT_ROWNUM,
CNT_LEVEL,
CNT_CONNECT_BY_ISLEAF,
CNT_CONNECT_BY_ISCYCLE,
CNT_PSEUDO_COLUMN,
CNT_CONNECT_BY_ROOT,
CNT_SYS_CONNECT_BY_PATH,
CNT_OUTER_JOIN_SYMBOL,
CNT_SO_UDF, // expression contains user defined function(dll) expression. add prefix 'SO', means different with PL
// UDF.
CNT_SEQ_EXPR,
CNT_EXEC_PARAM,
CNT_ENUM_OR_SET,
CNT_VOLATILE_CONST,
CNT_ORA_ROWSCN_EXPR,
CNT_VAR_EXPR,
BE_USED, // expression has been applied
IS_SIMPLE_COND, // column = const
IS_RANGE_COND, // column belongs to a range
IS_JOIN_COND, // column = column of different tables
IS_COLUMNLIZED, // for code generator, @see ObExprGenerator
IS_ROOT, // for code generator, @see ObExprGenerator
IS_NEW_AGG_EXPR,
IS_WITH_ALL,
IS_WITH_ANY,
IS_WITH_SUBQUERY,
IS_INNER_ADDED_EXPR,
IS_PL_ACCESS_IDX,
IS_SELECT_REF, // expr is refer to select item
IS_SHARED_REF,
IS_OP_OPERAND_IMPLICIT_CAST, // is implicit cast added for operand casting (add in type deducing)
};
#define IS_INFO_MASK_BEGIN IS_CONST
#define IS_INFO_MASK_END IS_VAR_EXPR
#define CNT_INFO_MASK_BEGIN CNT_CONST
#define CNT_INFO_MASK_END CNT_VAR_EXPR
#define INHERIT_MASK_BEGIN CNT_CONST_EXPR
#define INHERIT_MASK_END CNT_VAR_EXPR
inline const char* get_expr_info_flag_str(const ObExprInfoFlag flag)
{
const char* ret = "UNKNOWN";
switch (flag) {
case IS_CONST: {
ret = "IS_CONST";
break;
}
case IS_COLUMN: {
ret = "IS_COLUMN";
break;
}
case IS_PARAM: {
ret = "IS_PARAM";
break;
}
case IS_AGG: {
ret = "IS_AGG";
break;
}
case IS_FUNC: {
ret = "IS_FUNC";
break;
}
case IS_IN: {
ret = "IS_IN";
break;
}
case IS_NOT: {
ret = "IS_NOT";
break;
}
case IS_OR: {
ret = "IS_OR";
break;
}
case IS_SUB_QUERY: {
ret = "IS_SUB_QUERY";
break;
}
case IS_ALIAS: {
ret = "IS_ALIAS";
break;
}
case IS_CUR_TIME: {
ret = "IS_CUR_TIME";
break;
}
case IS_IS_EXPR: {
ret = "IS_IS_EXPR";
break;
}
case IS_CALCULABLE_EXPR: {
ret = "IS_CALCULABLE_EXPR";
break;
}
case IS_VALUES: {
ret = "IS_VALUES";
break;
}
case IS_DEFAULT: {
ret = "IS_DEFAULT";
break;
}
case IS_USER_VARIABLE: {
ret = "IS_USER_VARIABLE";
break;
}
case IS_STATE_FUNC: {
ret = "IS_STATE_FUNC";
break;
}
case IS_SET_OP: {
ret = "IS_SET_OP";
break;
}
case IS_LAST_INSERT_ID: {
ret = "IS_LAST_INSERT_ID";
break;
}
case IS_DOMAIN_INDEX_FUNC: {
ret = "IS_DOMAIN_INDEX_FUNC";
break;
}
case IS_WINDOW_FUNC: {
ret = "IS_WINDOW_FUNC";
break;
}
case IS_PRIOR: {
ret = "IS_PRIOR";
break;
}
case IS_RAND_FUNC: {
ret = "IS_RAND_FUNC";
break;
}
case IS_ROWNUM: {
ret = "IS_ROWNUM";
break;
}
case IS_LEVEL: {
ret = "IS_LEVEL";
break;
}
case IS_CONNECT_BY_ISLEAF: {
ret = "IS_CONNECT_BY_ISLEAF";
break;
}
case IS_CONNECT_BY_ISCYCLE: {
ret = "IS_CONNECT_BY_ISCYCLE";
break;
}
case IS_PSEUDO_COLUMN: {
ret = "IS_PSEUDO_COLUMN";
break;
}
case IS_CONNECT_BY_ROOT: {
ret = "IS_CONNECT_BY_ROOT";
break;
}
case IS_SYS_CONNECT_BY_PATH: {
ret = "IS_SYS_CONNECT_BY_PATH";
break;
}
case IS_OUTER_JOIN_SYMBOL: {
ret = "IS_OUTER_JOIN_SYMBOL";
break;
}
case IS_SO_UDF_EXPR: {
ret = "IS_SO_UDF_EXPR";
break;
}
case IS_SEQ_EXPR: {
ret = "IS_SEQ_EXPR";
break;
}
case IS_ENUM_OR_SET: {
ret = "IS_ENUM_OR_SET";
break;
}
case IS_CONST_EXPR: {
ret = "IS_CONST_EXPR";
break;
}
case CNT_CONST_EXPR: {
ret = "CNT_CONST_EXPR";
break;
}
case CNT_CONST: {
ret = "CNT_CONST";
break;
}
case CNT_COLUMN: {
ret = "CNT_COLUMN";
break;
}
case CNT_PARAM: {
ret = "CNT_PARAM";
break;
}
case CNT_AGG: {
ret = "CNT_AGG";
break;
}
case CNT_FUNC: {
ret = "CNT_FUNC";
break;
}
case CNT_IN: {
ret = "CNT_IN";
break;
}
case CNT_NOT: {
ret = "CNT_NOT";
break;
}
case CNT_OR: {
ret = "CNT_OR";
break;
}
case CNT_SUB_QUERY: {
ret = "CNT_SUB_QUERY";
break;
}
case CNT_ALIAS: {
ret = "CNT_ALIAS";
break;
}
case CNT_CUR_TIME: {
ret = "CNT_CUR_TIME";
break;
}
case CNT_IS_EXPR: {
ret = "CNT_IS_EXPR";
break;
}
case CNT_CALCULABLE_EXPR: {
ret = "CNT_CALCULABLE_EXPR";
break;
}
case CNT_VALUES: {
ret = "CNT_VALUES";
break;
}
case CNT_DEFAULT: {
ret = "CNT_DEFAULT";
break;
}
case CNT_USER_VARIABLE: {
ret = "CNT_USER_VARIABLE";
break;
}
case CNT_STATE_FUNC: {
ret = "CNT_STATE_FUNC";
break;
}
case CNT_SET_OP: {
ret = "CNT_SET_OP";
break;
}
case CNT_LAST_INSERT_ID: {
ret = "CNT_LAST_INSERT_ID";
break;
}
case CNT_DOMAIN_INDEX_FUNC: {
ret = "CNT_DOMAIN_INDEX_FUNC";
break;
}
case CNT_WINDOW_FUNC: {
ret = "CNT_WINDOW_FUNC";
break;
}
case CNT_PRIOR: {
ret = "CNT_PRIOR";
break;
}
case CNT_RAND_FUNC: {
ret = "CNT_RAND_FUNC";
break;
}
case CNT_ROWNUM: {
ret = "CNT_ROWNUM";
break;
}
case CNT_LEVEL: {
ret = "CNT_LEVEL";
break;
}
case CNT_CONNECT_BY_ISLEAF: {
ret = "CNT_CONNECT_BY_ISLEAF";
break;
}
case CNT_CONNECT_BY_ISCYCLE: {
ret = "CNT_CONNECT_BY_ISCYCLE";
break;
}
case CNT_PSEUDO_COLUMN: {
ret = "CNT_PSEUDO_COLUMN";
break;
}
case CNT_CONNECT_BY_ROOT: {
ret = "CNT_CONNECT_BY_ROOT";
break;
}
case CNT_SYS_CONNECT_BY_PATH: {
ret = "CNT_SYS_CONNECT_BY_PATH";
break;
}
case CNT_OUTER_JOIN_SYMBOL: {
ret = "CNT_OUTER_JOIN_SYMBOL";
break;
}
case CNT_SO_UDF: {
ret = "CNT_SO_UDF";
break;
}
case CNT_SEQ_EXPR: {
ret = "CNT_SEQ_EXPR";
break;
}
case CNT_EXEC_PARAM: {
ret = "CNT_EXEC_PARAM";
break;
}
case CNT_ENUM_OR_SET: {
ret = "CNT_ENUM_OR_SET";
break;
}
case BE_USED: {
ret = "BE_USED";
break;
}
case IS_SIMPLE_COND: {
ret = "IS_SIMPLE_COND";
break;
}
case IS_RANGE_COND: {
ret = "IS_RANGE_COND";
break;
}
case IS_JOIN_COND: {
ret = "IS_JOIN_COND";
break;
}
case IS_COLUMNLIZED: {
ret = "IS_COLUMNLIZED";
break;
}
case IS_ROOT: {
ret = "IS_ROOT";
break;
}
case IS_EXEC_PARAM: {
ret = "IS_EXEC_PARAM";
break;
}
case IS_NEW_AGG_EXPR: {
ret = "IS_NEW_AGG_EXPR";
break;
}
case IS_WITH_ALL: {
ret = "IS_WITH_ALL";
break;
}
case IS_WITH_ANY: {
ret = "IS_WITH_ANY";
break;
}
case IS_WITH_SUBQUERY: {
ret = "IS_WITH_SUBQUERY";
break;
}
case IS_INNER_ADDED_EXPR: {
ret = "IS_INNER_ADDED_EXPR";
break;
}
case IS_PL_ACCESS_IDX: {
ret = "IS_PL_ACCESS_IDX";
break;
}
case IS_SELECT_REF: {
ret = "IS_SELECT_REF";
break;
}
case IS_SHARED_REF: {
ret = "IS_SHARED_REF";
break;
}
case IS_OP_OPERAND_IMPLICIT_CAST: {
ret = "IS_OP_OPERAND_IMPLICIT_CAST";
break;
}
default:
break;
}
return ret;
}
} // namespace sql
} // namespace oceanbase
#endif /* OCEANBASE_SRC_SQL_RESOLVER_EXPR_OB_EXPR_INFO_FLAG_H_ */