!2173 【fixbug】修改自定义用户变量报错信息
Merge pull request !2173 from yuhuanhuan/demand_set
This commit is contained in:
@ -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))));
|
||||
|
||||
@ -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."),
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user