Repository: ignite
Updated Branches:
  refs/heads/master f00edeaef -> fe9fe5dce


IGNITE-7709: SQL COPY command: make sure file name is always quoted. This 
closes #3526.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fe9fe5dc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fe9fe5dc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fe9fe5dc

Branch: refs/heads/master
Commit: fe9fe5dce877f6a518a0611dae90d348ae7b8433
Parents: f00edea
Author: shq <kirill.shiro...@gmail.com>
Authored: Thu Feb 15 13:36:00 2018 +0300
Committer: devozerov <voze...@gridgain.com>
Committed: Thu Feb 15 13:36:00 2018 +0300

----------------------------------------------------------------------
 .../sql/command/SqlBulkLoadCommand.java         |  8 +++++-
 .../internal/sql/SqlParserBulkLoadSelfTest.java | 26 +++++++++++++++++---
 2 files changed, 30 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/fe9fe5dc/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlBulkLoadCommand.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlBulkLoadCommand.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlBulkLoadCommand.java
index e5246d5..4f065f2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlBulkLoadCommand.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlBulkLoadCommand.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.ignite.internal.sql.SqlParserUtils.error;
+import static 
org.apache.ignite.internal.sql.SqlParserUtils.errorUnexpectedToken;
 import static org.apache.ignite.internal.sql.SqlParserUtils.parseIdentifier;
 import static org.apache.ignite.internal.sql.SqlParserUtils.parseInt;
 import static 
org.apache.ignite.internal.sql.SqlParserUtils.parseQualifiedIdentifier;
@@ -83,7 +84,12 @@ public class SqlBulkLoadCommand implements SqlCommand {
      * @param lex The lexer.
      */
     private void parseFileName(SqlLexer lex) {
-        locFileName = parseIdentifier(lex);
+        if (lex.lookAhead().tokenType() != SqlLexerTokenType.QUOTED)
+            throw errorUnexpectedToken(lex.lookAhead(), "[quoted file name]");
+
+        lex.shift();
+
+        locFileName = lex.token();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/fe9fe5dc/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserBulkLoadSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserBulkLoadSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserBulkLoadSelfTest.java
index b5cd55b..ff09c73 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserBulkLoadSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserBulkLoadSelfTest.java
@@ -33,11 +33,31 @@ public class SqlParserBulkLoadSelfTest extends 
SqlParserAbstractSelfTest {
 
         assertParseError(null,
             "copy from into Person (_key, age, firstName, lastName) format 
csv",
-            "Unexpected token: \"INTO\" (expected: \"[identifier]\"");
+            "Unexpected token: \"INTO\" (expected: \"[quoted file name]\"");
 
         assertParseError(null,
-            "copy from any.file into Person (_key, age, firstName, lastName) 
format csv",
-            "Unexpected token: \".\" (expected: \"INTO\"");
+            "copy from unquoted into Person (_key, age, firstName, lastName) 
format csv",
+            "Unexpected token: \"UNQUOTED\" (expected: \"[quoted file 
name]\"");
+
+        assertParseError(null,
+            "copy from unquoted.file into Person (_key, age, firstName, 
lastName) format csv",
+            "Unexpected token: \"UNQUOTED\" (expected: \"[quoted file 
name]\"");
+
+        new SqlParser(null,
+            "copy from \"\" into Person (_key, age, firstName, lastName) 
format csv")
+            .nextCommand();
+
+        new SqlParser(null,
+            "copy from \"d:/copy/from/into/format.csv\" into Person (_key, 
age, firstName, lastName) format csv")
+            .nextCommand();
+
+        new SqlParser(null,
+            "copy from \"/into\" into Person (_key, age, firstName, lastName) 
format csv")
+            .nextCommand();
+
+        new SqlParser(null,
+            "copy from \"into\" into Person (_key, age, firstName, lastName) 
format csv")
+            .nextCommand();
 
         assertParseError(null,
             "copy from \"any.file\" to Person (_key, age, firstName, lastName) 
format csv",

Reply via email to