diff --git a/src/sql/engine/expr/ob_expr_sign.cpp b/src/sql/engine/expr/ob_expr_sign.cpp index d7e353495c..f2a73c4d24 100644 --- a/src/sql/engine/expr/ob_expr_sign.cpp +++ b/src/sql/engine/expr/ob_expr_sign.cpp @@ -134,6 +134,10 @@ int calc_sign_expr(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &res_datum) } break; } + case ObBitTC: { + res_int = arg_datum->get_bit() == 0 ? 0 : 1; + break; + } default: { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected arg_type", K(ret), K(arg_type)); diff --git a/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/expr_sign.result b/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/expr_sign.result index 3b9d5441ec..4e9f589a73 100644 --- a/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/expr_sign.result +++ b/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/expr_sign.result @@ -896,3 +896,17 @@ select sign(1E-400) from dual; +--------------+ | 0 | +--------------+ + +##bug: +drop table if exists t1; +create table t1(c1 bit(64),c2 bit(64)); +insert into t1(c1) values(1); + +select sign(c1) from t1; ++----------+ +| sign(c1) | ++----------+ +| 1 | ++----------+ + +drop table t1; diff --git a/tools/deploy/mysql_test/test_suite/static_engine/t/expr_sign.test b/tools/deploy/mysql_test/test_suite/static_engine/t/expr_sign.test index 2aa68ed2c4..cbaab9a27d 100644 --- a/tools/deploy/mysql_test/test_suite/static_engine/t/expr_sign.test +++ b/tools/deploy/mysql_test/test_suite/static_engine/t/expr_sign.test @@ -147,3 +147,16 @@ select sign( cast(a2 as char(1024)) ) , sign( cast(a4 as char(1024)) ) from t2 f --echo # select sign(1E-300) from dual; select sign(1E-400) from dual; + +##bug: + +--disable_warnings +drop table if exists t1; +--enable_warnings + +create table t1(c1 bit(64),c2 bit(64)); +insert into t1(c1) values(1); + +select sign(c1) from t1; + +drop table t1;