!2173 【fixbug】修改自定义用户变量报错信息

Merge pull request !2173 from yuhuanhuan/demand_set
This commit is contained in:
opengauss-bot
2022-09-19 11:20:53 +00:00
committed by Gitee
4 changed files with 67 additions and 2 deletions

View File

@ -235,6 +235,12 @@ Oid exprType(const Node* expr)
case T_SetVariableExpr:
type = ((const Const*)(((SetVariableExpr*)expr)->value))->consttype;
break;
case T_UserSetElem:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("user_defined variables cannot be set, such as @var_name := expr is not supported.")));
type = InvalidOid; /* keep compiler quiet */
break;
default:
ereport(ERROR,
(errcode(ERRCODE_UNRECOGNIZED_NODE_TYPE), errmsg("unrecognized node type: %d", (int)nodeTag(expr))));
@ -863,6 +869,12 @@ Oid exprCollation(const Node* expr)
case T_SetVariableExpr:
coll = ((const Const*)(((SetVariableExpr*)expr)->value))->constcollid;
break;
case T_UserSetElem:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("user_defined variables cannot be set, such as @var_name := expr is not supported.")));
coll = InvalidOid; /* keep compiler quiet */
break;
default:
ereport(
ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("unrecognized node type: %d", (int)nodeTag(expr))));
@ -1068,6 +1080,11 @@ void exprSetCollation(Node* expr, Oid collation)
case T_SetVariableExpr:
((Const*)(((SetVariableExpr*)expr)->value))->constcollid = collation;
break;
case T_UserSetElem:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("user_defined variables cannot be set, such as @var_name := expr is not supported.")));
break;
default:
ereport(
ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("unrecognized node type: %d", (int)nodeTag(expr))));
@ -1906,6 +1923,11 @@ bool expression_tree_walker(Node* node, bool (*walker)(), void* context)
return p2walker(((AutoIncrement*)node)->expr, context);
case T_PrefixKey:
return p2walker(((PrefixKey*)node)->arg, context);
case T_UserSetElem:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("user_defined variables cannot be set, such as @var_name := expr is not supported.")));
break;
default:
ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH),
errmsg("expression_tree_walker:unrecognized node type: %d", (int)nodeTag(node))));
@ -2654,6 +2676,11 @@ Node* expression_tree_mutator(Node* node, Node* (*mutator)(Node*, void*), void*
MUTATE(newnode->value, oldnode->value, Expr*);
return (Node*)newnode;
} break;
case T_UserSetElem:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("user_defined variables cannot be set, such as @var_name := expr is not supported.")));
break;
default:
ereport(ERROR,
(errcode(ERRCODE_UNRECOGNIZED_NODE_TYPE), errmsg("unrecognized node type: %d", (int)nodeTag(node))));

View File

@ -1085,7 +1085,7 @@ static void InitConfigureNamesBool()
NULL},
#endif
{{"enable_set_variable_b_format",
PGC_SIGHUP,
PGC_USERSET,
NODE_ALL,
INSTRUMENTS_OPTIONS,
gettext_noop("enable set variable in b format."),

View File

@ -467,6 +467,17 @@ select @v1;
set @ v1:=10;
select @v1:=10;
\c test_set
show enable_set_variable_b_format;
set enable_set_variable_b_format = off;
set @v1 := 1, @v2 := 2, @v3 := @v4 := 3;
\c test_set
show enable_set_variable_b_format;
set enable_set_variable_b_format = on;
set @v1 := 1, @v2 := 2, @v3 := @v4 := 3;
select @v1, @v2, @v3, @v4;
\c regression
drop database if exists test_set;

View File

@ -1004,7 +1004,34 @@ ERROR: syntax error at or near "@"
LINE 1: set @ v1:=10;
^
select @v1:=10;
ERROR: unrecognized node type: 5014
ERROR: user_defined variables cannot be set, such as @var_name := expr is not supported.
\c test_set
show enable_set_variable_b_format;
enable_set_variable_b_format
------------------------------
on
(1 row)
set enable_set_variable_b_format = off;
set @v1 := 1, @v2 := 2, @v3 := @v4 := 3;
ERROR: syntax error at or near "set @"
LINE 1: set @v1 := 1, @v2 := 2, @v3 := @v4 := 3;
^
\c test_set
show enable_set_variable_b_format;
enable_set_variable_b_format
------------------------------
on
(1 row)
set enable_set_variable_b_format = on;
set @v1 := 1, @v2 := 2, @v3 := @v4 := 3;
select @v1, @v2, @v3, @v4;
@v1 | @v2 | @v3 | @v4
-----+-----+-----+-----
1 | 2 | 3 | 3
(1 row)
\c regression
drop database if exists test_set;
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1 -c "enable_set_variable_b_format=off" >/dev/null 2>&1