Fix functional index bugs
This commit is contained in:
@ -892,6 +892,8 @@ int ObExprCast::is_valid_for_generated_column(const ObRawExpr*expr, const common
|
||||
}
|
||||
} else if (ObTimeType == src && ObTimeType != dst && ob_is_temporal_type(dst)) {
|
||||
is_valid = false;
|
||||
} else if (ObTimestampType == src && ObTimestampType != dst) {
|
||||
is_valid = false;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
||||
@ -26,7 +26,7 @@ namespace sql
|
||||
{
|
||||
|
||||
ObExprDateFormat::ObExprDateFormat(ObIAllocator &alloc)
|
||||
: ObStringExprOperator(alloc, T_FUN_SYS_DATE_FORMAT, N_DATE_FORMAT, 2, VALID_FOR_GENERATED_COL)
|
||||
: ObStringExprOperator(alloc, T_FUN_SYS_DATE_FORMAT, N_DATE_FORMAT, 2, NOT_VALID_FOR_GENERATED_COL)
|
||||
{
|
||||
}
|
||||
|
||||
@ -143,6 +143,21 @@ int ObExprDateFormat::calc_date_format_invalid(const ObExpr &expr, ObEvalCtx &ct
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObExprDateFormat::is_valid_for_generated_column(const ObRawExpr*expr, const common::ObIArray<ObRawExpr *> &exprs, bool &is_valid) const {
|
||||
int ret = OB_SUCCESS;
|
||||
is_valid = true;
|
||||
if (exprs.count() < 1) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected param num", K(ret), K(exprs.count()));
|
||||
} else if (OB_ISNULL(exprs.at(0))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("invalid param", K(ret), K(exprs.at(0)), K(exprs.at(1)));
|
||||
} else if (ObTimeType == exprs.at(0)->get_result_type().get_type() || ObTimestampType == exprs.at(0)->get_result_type().get_type()) {
|
||||
is_valid = false;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char* ObExprGetFormat::FORMAT_STR[FORMAT_MAX] =
|
||||
{
|
||||
"EUR",
|
||||
|
||||
@ -35,6 +35,7 @@ public:
|
||||
ObExpr &rt_expr) const override;
|
||||
static int calc_date_format(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum);
|
||||
static int calc_date_format_invalid(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum);
|
||||
virtual int is_valid_for_generated_column(const ObRawExpr*expr, const common::ObIArray<ObRawExpr *> &exprs, bool &is_valid) const;
|
||||
private:
|
||||
// disallow copy
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprDateFormat);
|
||||
|
||||
@ -24,7 +24,7 @@ namespace oceanbase
|
||||
namespace sql
|
||||
{
|
||||
ObExprXmlAttributes::ObExprXmlAttributes(ObIAllocator &alloc)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XML_ATTRIBUTES, N_XML_ATTRIBUTES, MORE_THAN_TWO, NOT_VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XML_ATTRIBUTES, N_XML_ATTRIBUTES, MORE_THAN_TWO, VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ namespace oceanbase
|
||||
namespace sql
|
||||
{
|
||||
ObExprXmlElement::ObExprXmlElement(ObIAllocator &alloc)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XML_ELEMENT, N_XML_ELEMENT, MORE_THAN_ZERO, NOT_VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XML_ELEMENT, N_XML_ELEMENT, MORE_THAN_ZERO, VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ namespace sql
|
||||
{
|
||||
|
||||
ObExprXmlparse :: ObExprXmlparse(common::ObIAllocator &alloc)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XMLPARSE, N_XMLPARSE, MORE_THAN_TWO, NOT_VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XMLPARSE, N_XMLPARSE, MORE_THAN_TWO, VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user