Skip to content

Commit f2032d9

Browse files
authored
support search_path in SET too (#2261)
1 parent 4c28a8e commit f2032d9

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

ydb/library/yql/sql/pg/pg_sql.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2129,21 +2129,26 @@ class TConverter : public IPGParseEvents {
21292129
}
21302130

21312131
auto name = to_lower(TString(value->name));
2132-
if (isSetConfig) {
2132+
if (name == "search_path") {
21332133
if (ListLength(value->args) != 1) {
21342134
AddError(TStringBuilder() << "VariableSetStmt, expected 1 arg, but got: " << ListLength(value->args));
21352135
return nullptr;
21362136
}
21372137
auto val = ListNodeNth(value->args, 0);
2138+
if (!isSetConfig) {
2139+
if (NodeTag(val) == T_A_Const) {
2140+
val = (const Node*)&CAST_NODE(A_Const, val)->val;
2141+
} else {
2142+
AddError(TStringBuilder() << "VariableSetStmt, expected const for " << value->name << " option");
2143+
return nullptr;
2144+
}
2145+
}
2146+
21382147
if (NodeTag(val) != T_String) {
21392148
AddError(TStringBuilder() << "VariableSetStmt, expected string literal for " << value->name << " option");
21402149
return nullptr;
21412150
}
21422151
TString rawStr = to_lower(TString(StrVal(val)));
2143-
if (name != "search_path") {
2144-
AddError(TStringBuilder() << "VariableSetStmt, set_config doesn't support that option:" << name);
2145-
return nullptr;
2146-
}
21472152
if (rawStr != "pg_catalog" && rawStr != "public" && rawStr != "" && rawStr != "information_schema") {
21482153
AddError(TStringBuilder() << "VariableSetStmt, search path supports only 'information_schema', 'public', 'pg_catalog', '' but got: '" << rawStr << "'");
21492154
return nullptr;
@@ -2154,6 +2159,13 @@ class TConverter : public IPGParseEvents {
21542159
return State.Statements.back();
21552160
}
21562161

2162+
if (isSetConfig) {
2163+
if (name != "search_path") {
2164+
AddError(TStringBuilder() << "VariableSetStmt, set_config doesn't support that option:" << name);
2165+
return nullptr;
2166+
}
2167+
}
2168+
21572169
if (name == "useblocks" || name == "emitaggapply") {
21582170
if (ListLength(value->args) != 1) {
21592171
AddError(TStringBuilder() << "VariableSetStmt, expected 1 arg, but got: " << ListLength(value->args));

0 commit comments

Comments
 (0)