提交 fc8e532b 编写于 作者: X xy0 提交者: LINGuanRen

Merge DAY() system function into opensource branch.

上级 7b9fe433
......@@ -523,6 +523,7 @@
#define N_TO_TIMESTAMP_TZ "to_timestamp_tz"
#define N_TO_DAYS "to_days"
#define N_DAY_OF_MONTH "dayofmonth"
#define N_DAY "day"
#define N_DAY_OF_WEEK "dayofweek"
#define N_DAY_OF_YEAR "dayofyear"
#define N_HOUR "hour"
......
......@@ -36,6 +36,12 @@ int ObExprDayOfMonth::calc_dayofmonth(const ObExpr& expr, ObEvalCtx& ctx, ObDatu
return ObExprTimeBase::calc(expr, ctx, expr_datum, DT_MDAY, true, true);
}
ObExprDay::ObExprDay(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_MDAY, T_FUN_SYS_DAY, N_DAY){};
ObExprDay::~ObExprDay()
{}
ObExprDayOfWeek::ObExprDayOfWeek(ObIAllocator& alloc)
: ObExprTimeBase(alloc, DT_WDAY, T_FUN_SYS_DAY_OF_WEEK, N_DAY_OF_WEEK){};
......
......@@ -29,6 +29,15 @@ private:
DISALLOW_COPY_AND_ASSIGN(ObExprDayOfMonth);
};
class ObExprDay: public ObExprTimeBase {
public:
ObExprDay();
explicit ObExprDay(common::ObIAllocator &alloc);
virtual ~ObExprDay();
private:
DISALLOW_COPY_AND_ASSIGN(ObExprDay);
};
class ObExprDayOfWeek : public ObExprTimeBase {
public:
ObExprDayOfWeek();
......
......@@ -685,6 +685,7 @@ void ObExprOperatorFactory::register_expr_operators()
REG_OP(ObExprDegrees);
REG_OP(ObExprWeightString);
REG_OP(ObExprBenchmark);
REG_OP(ObExprDay);
// register oracle system function
REG_OP_ORCL(ObExprSysConnectByPath);
REG_OP_ORCL(ObExprTimestampNvl);
......
......@@ -440,6 +440,7 @@ typedef enum ObItemType {
T_FUN_SYS_INETATON = 728,
T_FUN_SYS_WEIGHT_STRING = 729,
T_FUN_SYS_CRC32 = 730,
T_FUN_SYS_DAY = 731,
///< @note add new mysql only function type before this line
T_MYSQL_ONLY_SYS_MAX_OP = 800,
......
......@@ -2200,6 +2200,13 @@ MOD '(' expr ',' expr ')'
make_name_node($$, result->malloc_pool_, "date");
malloc_non_terminal_node($$, result->malloc_pool_, T_FUN_SYS, 2, $$, params);
}
| DAY '(' expr ')'
{
ParseNode *params = NULL;
malloc_non_terminal_node(params, result->malloc_pool_, T_EXPR_LIST, 1, $3);
make_name_node($$, result->malloc_pool_, "day");
malloc_non_terminal_node($$, result->malloc_pool_, T_FUN_SYS, 2, $$, params);
}
| YEAR '(' expr ')'
{
ParseNode *params = NULL;
......
......@@ -383,6 +383,7 @@ const char* get_type_name(int type)
case T_FUN_SYS_INETATON : return "T_FUN_SYS_INETATON";
case T_FUN_SYS_WEIGHT_STRING : return "T_FUN_SYS_WEIGHT_STRING";
case T_FUN_SYS_CRC32 : return "T_FUN_SYS_CRC32";
case T_FUN_SYS_DAY : return "T_FUN_SYS_DAY";
case T_MYSQL_ONLY_SYS_MAX_OP : return "T_MYSQL_ONLY_SYS_MAX_OP";
case T_FUN_SYS_CONNECT_BY_PATH : return "T_FUN_SYS_CONNECT_BY_PATH";
case T_FUN_SYS_SYSTIMESTAMP : return "T_FUN_SYS_SYSTIMESTAMP";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册