diff --git a/src/parser/parser.yy b/src/parser/parser.yy index 7b5259a7eaf..cb0efef8ab4 100644 --- a/src/parser/parser.yy +++ b/src/parser/parser.yy @@ -1436,9 +1436,26 @@ yield_column delete $3; } | expression { + auto vars = graph::ExpressionUtils::collectAll($1, {Expression::Kind::kVar}); + if (!vars.empty()) { + for (auto* var : vars) { + if (!static_cast(var)->isInner()) { + throw nebula::GraphParser::syntax_error(@1, "Direct output of variable is prohibited"); + } + } + } $$ = new YieldColumn($1); } | expression KW_AS name_label { + auto vars = graph::ExpressionUtils::collectAll($1, {Expression::Kind::kVar}); + if (!vars.empty()) { + for (auto* var : vars) { + if (!static_cast(var)->isInner()) { + delete $3; + throw nebula::GraphParser::syntax_error(@1, "Direct output of variable is prohibited"); + } + } + } $$ = new YieldColumn($1, *$3); delete $3; } diff --git a/tests/tck/features/bugfix/VariableExpression.feature b/tests/tck/features/bugfix/VariableExpression.feature new file mode 100644 index 00000000000..d95560d681f --- /dev/null +++ b/tests/tck/features/bugfix/VariableExpression.feature @@ -0,0 +1,26 @@ +# Copyright (c) 2021 vesoft inc. All rights reserved. +# +# This source code is licensed under Apache 2.0 License, +# attached with Common Clause Condition 1.0, found in the LICENSES directory. +Feature: Variable usage + + Background: + Given a graph with space named "nba" + + Scenario: disable yield $var + When executing query: + """ + $var = yield 1;$var2 = yield 3;yield $var1 + $var2 + """ + Then a SyntaxError should be raised at runtime: Direct output of variable is prohibited near `$var1 + $var2' + When executing query: + """ + $var=go from "Tim Duncan" over like yield like._dst as dst;yield $var + """ + Then a SyntaxError should be raised at runtime: Direct output of variable is prohibited near `$var' + Then drop the used space + When executing query: + """ + $var=go from "Tim Duncan" over like yield like._dst as dst;yield $var[0][0] + """ + Then a SyntaxError should be raised at runtime: Direct output of variable is prohibited near `$var[0][0]' diff --git a/tests/tck/features/go/GroupbyLimit.IntVid.feature b/tests/tck/features/go/GroupbyLimit.IntVid.feature index 86e457460f6..384c12928a8 100644 --- a/tests/tck/features/go/GroupbyLimit.IntVid.feature +++ b/tests/tck/features/go/GroupbyLimit.IntVid.feature @@ -15,7 +15,7 @@ Feature: Groupby & limit Sentence """ GO FROM hash("Marco Belinelli") OVER serve YIELD $$.team.name AS name | GROUP BY $-.start_year YIELD COUNT($var) """ - Then a SemanticError should be raised at runtime: + Then a SyntaxError should be raised at runtime: Scenario: Syntax test4 When executing query: diff --git a/tests/tck/features/go/GroupbyLimit.feature b/tests/tck/features/go/GroupbyLimit.feature index 2a282a2b7b0..7706c27c6b2 100644 --- a/tests/tck/features/go/GroupbyLimit.feature +++ b/tests/tck/features/go/GroupbyLimit.feature @@ -22,7 +22,7 @@ Feature: Groupby & limit Sentence """ GO FROM "Marco Belinelli" OVER serve YIELD $$.team.name AS name | GROUP BY $-.start_year YIELD COUNT($var) """ - Then a SemanticError should be raised at runtime: + Then a SyntaxError should be raised at runtime: Scenario: Syntax test4 When executing query: