[FEAT MERGE] Functional_index

This commit is contained in:
obdev
2023-04-27 11:11:23 +00:00
committed by ob-robot
parent a52d8673b2
commit c5756c1799
370 changed files with 1728 additions and 821 deletions

View File

@ -27,9 +27,8 @@ namespace sql
{
ObExprTime::ObExprTime(ObIAllocator &alloc)
: ObFuncExprOperator(alloc, T_FUN_SYS_TIME, N_TIME, 1, NOT_ROW_DIMENSION)
{
}
: ObFuncExprOperator(alloc, T_FUN_SYS_TIME, N_TIME, 1, VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
{}
ObExprTime::~ObExprTime()
{
@ -84,8 +83,8 @@ int ObExprTime::calc_time(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datu
}
ObExprTimeBase::ObExprTimeBase(ObIAllocator &alloc, int32_t date_type, ObExprOperatorType type,
const char *name)
: ObFuncExprOperator(alloc, type, name, 1, NOT_ROW_DIMENSION)
const char *name, ObValidForGeneratedColFlag valid_for_generated_col)
: ObFuncExprOperator(alloc, type, name, 1, valid_for_generated_col, NOT_ROW_DIMENSION)
{
dt_type_ = date_type;
}
@ -252,8 +251,18 @@ int ObExprTimeBase::calc(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum
return ret;
}
int ObExprTimeBase::is_valid_for_generated_column(const ObRawExpr*expr, const common::ObIArray<ObRawExpr *> &exprs, bool &is_valid) const {
int ret = OB_SUCCESS;
if (is_valid_for_generated_col_) {
is_valid = is_valid_for_generated_col_;
} else if (OB_FAIL(check_first_param_not_time(exprs, is_valid))) {
LOG_WARN("fail to check if first param is time", K(ret), K(exprs));
}
return ret;
}
ObExprHour::ObExprHour(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_HOUR, T_FUN_SYS_HOUR, N_HOUR) {};
: ObExprTimeBase(alloc, DT_HOUR, T_FUN_SYS_HOUR, N_HOUR, VALID_FOR_GENERATED_COL) {};
ObExprHour::~ObExprHour() {}
@ -263,7 +272,7 @@ int ObExprHour::calc_hour(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datu
}
ObExprMinute::ObExprMinute(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_MIN, T_FUN_SYS_MINUTE, N_MINUTE) {};
: ObExprTimeBase(alloc, DT_MIN, T_FUN_SYS_MINUTE, N_MINUTE, VALID_FOR_GENERATED_COL) {};
ObExprMinute::~ObExprMinute() {}
@ -273,7 +282,7 @@ int ObExprMinute::calc_minute(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_
}
ObExprSecond::ObExprSecond(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_SEC, T_FUN_SYS_SECOND, N_SECOND) {};
: ObExprTimeBase(alloc, DT_SEC, T_FUN_SYS_SECOND, N_SECOND, VALID_FOR_GENERATED_COL) {};
ObExprSecond::~ObExprSecond() {}
@ -283,7 +292,7 @@ int ObExprSecond::calc_second(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_
}
ObExprMicrosecond::ObExprMicrosecond(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_USEC, T_FUN_SYS_MICROSECOND, N_MICROSECOND) {};
: ObExprTimeBase(alloc, DT_USEC, T_FUN_SYS_MICROSECOND, N_MICROSECOND, VALID_FOR_GENERATED_COL) {};
ObExprMicrosecond::~ObExprMicrosecond() {}
@ -293,7 +302,7 @@ int ObExprMicrosecond::calc_microsecond(const ObExpr &expr, ObEvalCtx &ctx, ObDa
}
ObExprYear::ObExprYear(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_YEAR, T_FUN_SYS_YEAR, N_YEAR) {};
: ObExprTimeBase(alloc, DT_YEAR, T_FUN_SYS_YEAR, N_YEAR, NOT_VALID_FOR_GENERATED_COL) {};
ObExprYear::~ObExprYear() {}
@ -303,7 +312,7 @@ int ObExprYear::calc_year(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datu
}
ObExprMonth::ObExprMonth(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_MON, T_FUN_SYS_MONTH, N_MONTH) {};
: ObExprTimeBase(alloc, DT_MON, T_FUN_SYS_MONTH, N_MONTH, NOT_VALID_FOR_GENERATED_COL) {};
ObExprMonth::~ObExprMonth() {}
@ -314,7 +323,7 @@ int ObExprMonth::calc_month(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_da
}
ObExprMonthName::ObExprMonthName(ObIAllocator &alloc)
: ObExprTimeBase(alloc, DT_MON_NAME, T_FUN_SYS_MONTH_NAME, N_MONTH_NAME) {};
: ObExprTimeBase(alloc, DT_MON_NAME, T_FUN_SYS_MONTH_NAME, N_MONTH_NAME, NOT_VALID_FOR_GENERATED_COL) {};
ObExprMonthName::~ObExprMonthName() {}