From b27193f11647e41559c0707992a4e39541a60845 Mon Sep 17 00:00:00 2001 From: hustfeiwang Date: Thu, 28 Feb 2019 16:11:58 +0800 Subject: [PATCH] HIVE-21345 Fix the error when hive cliDriver parses sql statement with semicolon in a pair of double quote --- cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java | 11 +++++++++++ .../test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java index 8e6b01bfb4..e51bb27ef1 100644 --- a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java +++ b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java @@ -446,6 +446,17 @@ public void handle(Signal signal) { } break; case '"': + if (!escape) { + if (!inQuotes) { + quoteChar = c; + inQuotes = !inQuotes; + } else { + if (c == quoteChar) { + inQuotes = !inQuotes; + } + } + } + break; case '\'': if (!escape) { if (!inQuotes) { diff --git a/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java b/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java index 4a2bae5c7c..358118e844 100644 --- a/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java +++ b/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java @@ -378,6 +378,11 @@ public void testCommandSplits() { results = CliDriver.splitSemiColon(cmd1 + ";" + cmd2 + ";"); assertEquals(cmd1, results.get(0)); assertEquals(cmd2, results.get(1)); + + // Test semicolon in double quote + String cmd3 = "select * from table_a where column_a not like \"%;\""; + assertEquals(cmd3, CliDriver.splitSemiColon(cmd3).get(0)); + assertEquals(cmd3, CliDriver.splitSemiColon(cmd3 + ";").get(0)); } private static void setEnv(String key, String value) throws Exception { -- 2.15.1