This is an automated email from the ASF dual-hosted git repository. dlych pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 41b511d90e811c3fc6c1c786ec0109a1931f59f9 Author: Dmitry Lychagin <[email protected]> AuthorDate: Mon Dec 7 14:48:13 2020 -0800 [NO ISSUE][COMP] Handle keywords in statement parameters - user model changes: no - storage format changes: no - interface changes: no Details: - Allow keywords to be used without backquotes in statement parameter names Change-Id: Id30113fe6ee9ca8c1e92e6e1e8ad85b2a845721c Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/9224 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Dmitry Lychagin <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- .../named_01/named_01.3.query.sqlpp | 43 ++++++++++++++++ .../named_01/named_01.4.query.sqlpp | 43 ++++++++++++++++ .../statement-params/named_01/named_01.3.adm | 1 + .../statement-params/named_01/named_01.4.adm | 1 + .../asterix-lang-sqlpp/src/main/javacc/SQLPP.jj | 57 ++++++++-------------- 5 files changed, 109 insertions(+), 36 deletions(-) diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/named_01/named_01.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/named_01/named_01.3.query.sqlpp new file mode 100644 index 0000000..daf38c9 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/named_01/named_01.3.query.sqlpp @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Description : Test named statement parameters that have the same name as keywords (json encoded request) + * Expected Res : Success + * Date : Dec 2020 + */ + +// requesttype=application/json + +// param $from:json="from" +// param $select:json="select" + +{ + "t1": { + "from": $from, + "select": $`select` + }, + + "t2": { + "from_type": is_string($from), + "select_type": is_string($`select`) + }, + + "t3": [ $from, $`select` ] +} diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/named_01/named_01.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/named_01/named_01.4.query.sqlpp new file mode 100644 index 0000000..b769d89 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/named_01/named_01.4.query.sqlpp @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Description : Test named statement parameters that have the same name as keywords (url encoded request) + * Expected Res : Success + * Date : Dec 2020 + */ + +// requesttype=application/x-www-form-urlencoded + +// param $from:json="from" +// param $select:json="select" + +{ + "t1": { + "from": $from, + "select": $`select` + }, + + "t2": { + "from_type": is_string($from), + "select_type": is_string($`select`) + }, + + "t3": [ $from, $`select` ] +} diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/named_01/named_01.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/named_01/named_01.3.adm new file mode 100644 index 0000000..f7dce44 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/named_01/named_01.3.adm @@ -0,0 +1 @@ +{ "t1": { "from": "from", "select": "select" }, "t2": { "from_type": true, "select_type": true }, "t3": [ "from", "select" ] } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/named_01/named_01.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/named_01/named_01.4.adm new file mode 100644 index 0000000..f7dce44 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/named_01/named_01.4.adm @@ -0,0 +1 @@ +{ "t1": { "from": "from", "select": "select" }, "t2": { "from_type": true, "select_type": true }, "t3": [ "from", "select" ] } \ No newline at end of file diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj index c9a7370..56f94ef 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj +++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj @@ -3403,18 +3403,10 @@ VariableExpr ExternalVariableRef() throws ParseException: } { ( - ( - <DOLLAR> - ( - <INTEGER_LITERAL> { name = token.image; } | - <IDENTIFIER> { name = token.image; } | - name = QuotedString() - ) - ) - | - ( - <QUES> { name = String.valueOf(++externalVarCounter); } - ) + <DOLLAR_IDENTIFIER> { name = token.image.substring(1); } + | <DOLLAR_INTEGER_LITERAL> { name = token.image.substring(1); } + | <DOLLAR_QUOTED_STRING> { name = removeQuotesAndEscapes(token.image.substring(1)); } + | <QUES> { name = String.valueOf(++externalVarCounter); } ) { String idName = SqlppVariableUtil.toExternalVariableName(name); @@ -4634,6 +4626,7 @@ TOKEN [IGNORE_CASE]: | <EXCEPT : "except"> | <EXISTS : "exists"> | <EXTERNAL : "external"> + | <FALSE : "false"> | <FEED : "feed"> | <FILTER : "filter"> | <FLATTEN : "flatten"> @@ -4665,10 +4658,12 @@ TOKEN [IGNORE_CASE]: | <LIKE : "like"> | <LIMIT : "limit"> | <LOAD : "load"> + | <MISSING : "missing"> | <MOD : "mod"> | <NODEGROUP : "nodegroup"> | <NGRAM : "ngram"> | <NOT : "not"> + | <NULL : "null"> | <OFFSET : "offset"> | <ON : "on"> | <OPEN : "open"> @@ -4698,8 +4693,9 @@ TOKEN [IGNORE_CASE]: | <SYNONYM : "synonym"> | <TEMPORARY : "temporary"> // intentionally not used but reserved for future usage | <THEN : "then"> - | <TYPE : "type"> | <TO : "to"> + | <TRUE : "true"> + | <TYPE : "type"> | <UNION : "union"> | <UNKNOWN : "unknown"> | <UNNEST : "unnest"> @@ -4733,7 +4729,6 @@ TOKEN : | <ATT : "@"> | <COLON : ":"> | <COMMA : ","> - | <DOLLAR: "$"> | <DOT : "."> | <PERCENT: "%"> | <QUES : "?"> @@ -4777,44 +4772,33 @@ TOKEN : <DEFAULT,IN_DBL_BRACE> TOKEN : { - <INTEGER_LITERAL : (<DIGIT>)+ > -} - -<DEFAULT,IN_DBL_BRACE> -TOKEN [IGNORE_CASE]: -{ - <MISSING : "missing"> - | <NULL : "null"> - | <TRUE : "true"> - | <FALSE : "false"> -} - -<DEFAULT,IN_DBL_BRACE> -TOKEN : -{ <#DIGIT : ["0" - "9"]> } <DEFAULT,IN_DBL_BRACE> TOKEN: { - < DOUBLE_LITERAL: <DIGITS> ( "." <DIGITS> ) (("e"|"E") ("+"|"-")? <DIGITS>)? + <INTEGER_LITERAL : <DIGITS> > + | <DOUBLE_LITERAL: <DIGITS> ( "." <DIGITS> ) (("e"|"E") ("+"|"-")? <DIGITS>)? | <DIGITS> (("e"|"E") ("+"|"-")? <DIGITS>) | "." <DIGITS> (("e"|"E") ("+"|"-")? <DIGITS>)? > - | < FLOAT_LITERAL: <DIGITS> ( "f" | "F" ) + | <FLOAT_LITERAL: <DIGITS> ( "f" | "F" ) | <DIGITS> ( "." <DIGITS> ( "f" | "F" ) )? | "." <DIGITS> ( "f" | "F" ) > - | <DIGITS : (<DIGIT>)+ > + | <#DIGITS : (<DIGIT>)+ > } <DEFAULT,IN_DBL_BRACE> TOKEN : { <#LETTER : ["A" - "Z", "a" - "z"]> - | <#IDENTIFIER_SPECIALCHARS_START : ["_"]> - | <#IDENTIFIER_SPECIALCHARS_REST : ["$"]> + | <#IDENTIFIER_START_SPECIALCHAR : ["_"]> + | <#IDENTIFIER_REST_SPECIALCHAR : ["$"]> + | <#IDENTIFIER_START : <LETTER> | <IDENTIFIER_START_SPECIALCHAR> > + | <#IDENTIFIER_REST : <LETTER> | <DIGIT> | <IDENTIFIER_START_SPECIALCHAR> | <IDENTIFIER_REST_SPECIALCHAR> > + | <IDENTIFIER : <IDENTIFIER_START> (<IDENTIFIER_REST>)* > } <DEFAULT,IN_DBL_BRACE> @@ -4865,8 +4849,9 @@ TOKEN : <DEFAULT,IN_DBL_BRACE> TOKEN : { - <IDENTIFIER : ( <LETTER> | <IDENTIFIER_SPECIALCHARS_START> ) - ( <LETTER> | <DIGIT> | <IDENTIFIER_SPECIALCHARS_START> | <IDENTIFIER_SPECIALCHARS_REST> )*> + <DOLLAR_INTEGER_LITERAL : "$" <INTEGER_LITERAL> > + | <DOLLAR_IDENTIFIER : "$" <IDENTIFIER> > + | <DOLLAR_QUOTED_STRING: "$" <QUOTED_STRING> > } <DEFAULT,IN_DBL_BRACE>
