This is an automated email from the ASF dual-hosted git repository.

ayushsaxena pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 52011ce2aff HIVE-27825: Better error message for an empty quoted 
identifier (#4829). (okumin, reviewed by Ayush Saxena)
52011ce2aff is described below

commit 52011ce2aff57771f90345c6292da683836799e9
Author: okumin <[email protected]>
AuthorDate: Mon Oct 30 13:07:39 2023 +0900

    HIVE-27825: Better error message for an empty quoted identifier (#4829). 
(okumin, reviewed by Ayush Saxena)
---
 parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g           | 2 +-
 parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerStandard.g   | 4 ++--
 .../test/queries/clientnegative/empty_quoted_identifier_column_name.q | 1 +
 .../empty_quoted_identifier_column_name_standard_backtick.q           | 2 ++
 .../empty_quoted_identifier_column_name_standard_double_quote.q       | 2 ++
 .../test/queries/clientnegative/empty_quoted_identifier_table_name.q  | 1 +
 .../empty_quoted_identifier_table_name_standard_backtick.q            | 2 ++
 .../empty_quoted_identifier_table_name_standard_double_quote.q        | 2 ++
 .../results/clientnegative/empty_quoted_identifier_column_name.q.out  | 1 +
 .../empty_quoted_identifier_column_name_standard_backtick.q.out       | 1 +
 .../empty_quoted_identifier_column_name_standard_double_quote.q.out   | 1 +
 .../results/clientnegative/empty_quoted_identifier_table_name.q.out   | 1 +
 .../empty_quoted_identifier_table_name_standard_backtick.q.out        | 1 +
 .../empty_quoted_identifier_table_name_standard_double_quote.q.out    | 1 +
 14 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g 
b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g
index fff0fdade05..f3497d9edee 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g
@@ -35,5 +35,5 @@ StringLiteral
 fragment
 QuotedIdentifier
     :
-    ('`'  ( '``' | ~('`') )* '`') { 
setText(StringUtils.replace(getText().substring(1, getText().length() -1 ), 
"``", "`")); }
+    ('`'  ( '``' | ~('`') )+ '`') { 
setText(StringUtils.replace(getText().substring(1, getText().length() -1 ), 
"``", "`")); }
     ;
diff --git 
a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerStandard.g 
b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerStandard.g
index 466b20014b6..b1b1e4aa65d 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerStandard.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerStandard.g
@@ -35,6 +35,6 @@ StringLiteral
 fragment
 QuotedIdentifier
     :
-    ('"'  ( '""' | ~('"') )* '"') { 
setText(StringUtils.replace(getText().substring(1, getText().length() -1 ), 
"\"\"", "\"")); }
-    | ('`'  ( '``' | ~('`') )* '`') { 
setText(StringUtils.replace(getText().substring(1, getText().length() -1 ), 
"``", "`")); }
+    ('"'  ( '""' | ~('"') )+ '"') { 
setText(StringUtils.replace(getText().substring(1, getText().length() -1 ), 
"\"\"", "\"")); }
+    | ('`'  ( '``' | ~('`') )+ '`') { 
setText(StringUtils.replace(getText().substring(1, getText().length() -1 ), 
"``", "`")); }
     ;
diff --git 
a/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name.q 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name.q
new file mode 100644
index 00000000000..8dccc381acf
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name.q
@@ -0,0 +1 @@
+select `` from `test_database`.`test_table`
diff --git 
a/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name_standard_backtick.q
 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name_standard_backtick.q
new file mode 100644
index 00000000000..7c4ede22cc4
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name_standard_backtick.q
@@ -0,0 +1,2 @@
+set hive.support.quoted.identifiers=standard;
+select `` from `test_database`.`test_table`
diff --git 
a/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name_standard_double_quote.q
 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name_standard_double_quote.q
new file mode 100644
index 00000000000..f6b66651d96
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_column_name_standard_double_quote.q
@@ -0,0 +1,2 @@
+set hive.support.quoted.identifiers=standard;
+select "" from "test_database"."test_table"
diff --git 
a/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name.q 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name.q
new file mode 100644
index 00000000000..245892d9bee
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name.q
@@ -0,0 +1 @@
+select * from `test_database`.``;
diff --git 
a/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name_standard_backtick.q
 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name_standard_backtick.q
new file mode 100644
index 00000000000..b1ba96fa64a
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name_standard_backtick.q
@@ -0,0 +1,2 @@
+set hive.support.quoted.identifiers=standard;
+select * from `test_database`.``;
diff --git 
a/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name_standard_double_quote.q
 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name_standard_double_quote.q
new file mode 100644
index 00000000000..3d5a8a4921f
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/empty_quoted_identifier_table_name_standard_double_quote.q
@@ -0,0 +1,2 @@
+set hive.support.quoted.identifiers=standard;
+select * from "test_database"."";
diff --git 
a/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name.q.out 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name.q.out
new file mode 100644
index 00000000000..0635ad3b29e
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name.q.out
@@ -0,0 +1 @@
+FAILED: ParseException line 1:10 cannot recognize input near 'from' 
'test_database' '.' in select clause
diff --git 
a/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name_standard_backtick.q.out
 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name_standard_backtick.q.out
new file mode 100644
index 00000000000..0da914f6b0a
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name_standard_backtick.q.out
@@ -0,0 +1 @@
+FAILED: ParseException line 2:10 cannot recognize input near 'from' 
'test_database' '.' in select clause
diff --git 
a/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name_standard_double_quote.q.out
 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name_standard_double_quote.q.out
new file mode 100644
index 00000000000..0da914f6b0a
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_column_name_standard_double_quote.q.out
@@ -0,0 +1 @@
+FAILED: ParseException line 2:10 cannot recognize input near 'from' 
'test_database' '.' in select clause
diff --git 
a/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name.q.out 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name.q.out
new file mode 100644
index 00000000000..33f9b4b1692
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name.q.out
@@ -0,0 +1 @@
+FAILED: ParseException line 1:32 cannot recognize input near 'test_database' 
'.' '<EOF>' in table name
diff --git 
a/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name_standard_backtick.q.out
 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name_standard_backtick.q.out
new file mode 100644
index 00000000000..b9c938633b0
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name_standard_backtick.q.out
@@ -0,0 +1 @@
+FAILED: ParseException line 2:32 cannot recognize input near 'test_database' 
'.' '<EOF>' in table name
diff --git 
a/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name_standard_double_quote.q.out
 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name_standard_double_quote.q.out
new file mode 100644
index 00000000000..b9c938633b0
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/empty_quoted_identifier_table_name_standard_double_quote.q.out
@@ -0,0 +1 @@
+FAILED: ParseException line 2:32 cannot recognize input near 'test_database' 
'.' '<EOF>' in table name

Reply via email to