>From Murtadha Hubail <[email protected]>:

Murtadha Hubail has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17450 )

Change subject: [ASTERIXDB-3155][SQL] Supporting escape backticks and 
singleQuote in SQL++
......................................................................

[ASTERIXDB-3155][SQL] Supporting escape backticks and singleQuote in SQL++

- user model changes: yes
- storage format changes: no
- interface changes: no

Details:
This patch contains change to allow escaping of backticks
so that field containing backticks don't throw
parsing error when they are used in the query.

Allows to
        1. escape backticks using backticks(`) and reverse solidus (\)
        2. escape singleQuotes(') using (')

Change-Id: I5d9069c6aaa1365545f7e0ca728be6ea2ca4641d
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17450
Tested-by: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Peeyush Gupta <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
---
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.5.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.6.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.5.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.4.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.7.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.4.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.2.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/failure/escape.4.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.7.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.6.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.1.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.2.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.3.adm
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.3.query.sqlpp
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.1.adm
18 files changed, 302 insertions(+), 38 deletions(-)

Approvals:
  Murtadha Hubail: Looks good to me, approved
  Peeyush Gupta: Looks good to me, but someone else must approve
  Jenkins: Verified; Verified
  Anon. E. Moose #1000171:




diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/failure/escape.4.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/failure/escape.4.query.sqlpp
new file mode 100644
index 0000000..8ed44c0
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/failure/escape.4.query.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+/*
+*  Should Throw Error when backticks(`) is not escaped
+*/
+
+select t.`first `name` from [{"userID":"1", "first `name":"XYZ"}] t;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.1.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.1.query.sqlpp
new file mode 100644
index 0000000..d9933ce
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.1.query.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+/*
+*  when backticks(`) is escaped by reverse solidus(\)
+*/
+
+select t.`first \`name` from [{"userID":"1", "first `name":"XYZ"}] t;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.2.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.2.query.sqlpp
new file mode 100644
index 0000000..6aacdd5
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.2.query.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+/*
+*  when backticks(`) is escaped by backticks(`)
+*/
+
+select t.`first ``name` from [{"userID":"1", "first `name":"XYZ"}] t;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.3.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.3.query.sqlpp
new file mode 100644
index 0000000..cd984da
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.3.query.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+/*
+*  when singleQuote(') is escaped by singleQuote(')
+*/
+
+select 'Monet''s House' as name;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.4.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.4.query.sqlpp
new file mode 100644
index 0000000..1b9475d
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.4.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+/*
+*  when backticks(`) is escaped by reverse solidus(\) in literal which is 
surrounded by singleQuote
+*  ex: 'Name\`e'
+*/
+
+SELECT 'Nam\`e' as name;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.5.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.5.query.sqlpp
new file mode 100644
index 0000000..dce7812
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.5.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+/*
+*  when backticks(`) is escaped by reverse solidus(\) in literal which is 
surrounded by doubleQuote
+*  ex: "Name\`e"
+*/
+
+SELECT "Nam\`e" as name;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.6.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.6.query.sqlpp
new file mode 100644
index 0000000..10c8fed
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.6.query.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+/*
+*  when doubleQuote(") is escaped by doubleQuote(")
+*/
+
+
+
+select "Monet""s House" as name;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.7.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.7.query.sqlpp
new file mode 100644
index 0000000..1ab5f61
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/select-star/escaping/success/escape.7.query.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+/*
+*  when two singleQuotes(') is present in the literal,
+*   both should be the part of the result
+*/
+
+
+SELECT "Hello''World" as name1 , "Hello``world" as name2 ;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.1.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.1.adm
new file mode 100644
index 0000000..c1eb05d
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.1.adm
@@ -0,0 +1 @@
+{ "first `name": "XYZ" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.2.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.2.adm
new file mode 100644
index 0000000..c1eb05d
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.2.adm
@@ -0,0 +1 @@
+{ "first `name": "XYZ" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.3.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.3.adm
new file mode 100644
index 0000000..0051fae
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.3.adm
@@ -0,0 +1 @@
+{ "name": "Monet's House" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.4.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.4.adm
new file mode 100644
index 0000000..850100a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.4.adm
@@ -0,0 +1 @@
+{ "name": "Nam`e" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.5.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.5.adm
new file mode 100644
index 0000000..850100a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.5.adm
@@ -0,0 +1 @@
+{ "name": "Nam`e" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.6.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.6.adm
new file mode 100644
index 0000000..9856d4f
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.6.adm
@@ -0,0 +1 @@
+{ "name": "Monet\"s House" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.7.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.7.adm
new file mode 100644
index 0000000..cdb12ae
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/select-star/escaping/escape.7.adm
@@ -0,0 +1 @@
+{ "name1": "Hello''World", "name2": "Hello``world" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 5a88d48..b9c9d69 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -9989,6 +9989,17 @@
         <output-dir compare="Text">var_star_2</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="select-star">
+      <compilation-unit name="escaping/success">
+        <output-dir compare="Text">escaping</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="select-star">
+      <compilation-unit name="escaping/failure">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>ASX1001: Syntax error</expected-error>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="select-exclude">
     <test-case FilePath="select-exclude">
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
index f5aa489..726ecd1 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
@@ -258,50 +258,65 @@
     }

     public static String removeQuotesAndEscapes(String s) {
-        char q = s.charAt(0); // simple or double quote
-        String stripped = s.substring(1, s.length() - 1);
-        int pos = stripped.indexOf('\\');
-        if (pos < 0) {
-            return stripped;
+
+        // It will not pass through lexer, but adding IllegalStateException 
Condition , if something went wrong with lexer
+        if (s.length() < 2) {
+            throw new IllegalStateException("Should have been caught by the 
lexer");
         }
+
         StringBuilder res = new StringBuilder();
-        int start = 0;
-        while (pos >= 0) {
-            res.append(stripped.substring(start, pos));
-            char c = stripped.charAt(pos + 1);
-            switch (c) {
-                case '/':
-                case '\\':
-                    res.append(c);
-                    break;
-                case 'b':
-                    res.append('\b');
-                    break;
-                case 'f':
-                    res.append('\f');
-                    break;
-                case 'n':
-                    res.append('\n');
-                    break;
-                case 'r':
-                    res.append('\r');
-                    break;
-                case 't':
-                    res.append('\t');
-                    break;
-                case '\'':
-                case '"':
-                    if (c == q) {
+        char[] cray = s.toCharArray();
+
+        for (int pos = 1; pos < cray.length - 1;) {
+            char c = cray[pos];
+            pos++;
+            if (c == '\\') {
+                c = cray[pos];
+                pos++;
+                switch (c) {
+                    case 'b':
+                        res.append('\b');
+                        break;
+                    case 'f':
+                        res.append('\f');
+                        break;
+                    case 'n':
+                        res.append('\n');
+                        break;
+                    case 'r':
+                        res.append('\r');
+                        break;
+                    case 't':
+                        res.append('\t');
+                        break;
+                    case '/':
+                    case '\\':
+                    case '"':
+                    case '\'':
+                    case '`':
                         res.append(c);
+                        break;
+                    default:
+                        throw new IllegalStateException("'\\" + c + "' should 
have been caught by the lexer");
+                }
+            } else {
+                res.append(c);
+                if (cray[0] == '\'' && c == '\'') { // if single quoted, allow 
'' as an escaped single quote
+                    if (pos >= cray.length - 1 || cray[pos] != '\'') {
+                        throw new IllegalStateException("'" + c + "' should 
have been caught by the lexer");
                     }
-                    break;
-                default:
-                    throw new IllegalStateException("'\\" + c + "' should have 
been caught by the lexer");
+                    pos++;
+                } else if (cray[0] == '`' && c == '`') { // similar behavior 
for ` (backtick)
+                    if (pos >= cray.length - 1 || cray[pos] != '`') {
+                        throw new IllegalStateException("`" + c + "' should 
have been caught by the lexer");
+                    }
+                    pos++;
+                } else if (cray[0] == c) { // Illegal Character
+                    throw new IllegalStateException("should have been caught 
by lexer");
+                }
             }
-            start = pos + 2;
-            pos = stripped.indexOf('\\', start);
         }
-        res.append(stripped.substring(start));
+
         return res.toString();
     }

diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj 
b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 5ae1eb5..5b0760b 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -5757,6 +5757,8 @@
         | <EscapeNl>
         | <EscapeCr>
         | <EscapeTab>
+        | <EscapeBTickWithBslash>
+        | <EscapeBtickWithBtick>
         | ~["`","\\"])* "`">
   | <STRING_LITERAL : ( ("E")? "\"" (
           <EscapeQuot>
@@ -5765,6 +5767,7 @@
         | <EscapeBspace>
         | <EscapeFormf>
         | <EscapeNl>
+        | <EscapeBTickWithBslash>
         | <EscapeCr>
         | <EscapeTab>
         | ~["\"","\\"])* "\"")
@@ -5775,9 +5778,12 @@
         | <EscapeBspace>
         | <EscapeFormf>
         | <EscapeNl>
+        | <EscapeBTickWithBslash>
         | <EscapeCr>
         | <EscapeTab>
         | ~["\'","\\"])* "\'")>
+  | < #EscapeBTickWithBslash: "\\`" >
+  | < #EscapeBtickWithBtick: "``" >
   | < #EscapeQuot: "\\\"" >
   | < #EscapeApos: "\\\'" >
   | < #EscapeBslash: "\\\\" >

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17450
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I5d9069c6aaa1365545f7e0ca728be6ea2ca4641d
Gerrit-Change-Number: 17450
Gerrit-PatchSet: 10
Gerrit-Owner: Ritik Raj <[email protected]>
Gerrit-Reviewer: Ali Alsuliman <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Murtadha Hubail <[email protected]>
Gerrit-Reviewer: Peeyush Gupta <[email protected]>
Gerrit-Reviewer: Till Westmann <[email protected]>
Gerrit-MessageType: merged

Reply via email to