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>

Reply via email to