You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ay...@apache.org on 2023/10/30 04:07:45 UTC

(hive) branch master updated: HIVE-27825: Better error message for an empty quoted identifier (#4829). (okumin, reviewed by Ayush Saxena)

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 <gi...@okumin.com>
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