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",