Repository: ignite Updated Branches: refs/heads/ignite-2.5 b329071af -> 9de5fce44
IGNITE-8342: SQL: Fixed parameter parsing in CREATE INDEX command leading to infinite loop. This closes #3893. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9de5fce4 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9de5fce4 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9de5fce4 Branch: refs/heads/ignite-2.5 Commit: 9de5fce4470e63e19be1882c021672bf87b4cb44 Parents: b329071 Author: shtykh_roman <[email protected]> Authored: Thu Apr 26 12:27:44 2018 +0300 Committer: devozerov <[email protected]> Committed: Thu Apr 26 12:31:18 2018 +0300 ---------------------------------------------------------------------- .../sql/command/SqlCreateIndexCommand.java | 38 +++++++++----------- .../sql/SqlParserCreateIndexSelfTest.java | 2 ++ 2 files changed, 19 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/9de5fce4/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlCreateIndexCommand.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlCreateIndexCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlCreateIndexCommand.java index f3f38d4..2f31973 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlCreateIndexCommand.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/command/SqlCreateIndexCommand.java @@ -21,7 +21,6 @@ import org.apache.ignite.cache.QueryIndex; import org.apache.ignite.internal.sql.SqlLexer; import org.apache.ignite.internal.sql.SqlLexerTokenType; import org.apache.ignite.internal.sql.SqlLexerToken; -import org.apache.ignite.internal.sql.SqlParserUtils; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -175,7 +174,7 @@ public class SqlCreateIndexCommand implements SqlCommand { } /** - * Pasrse index name. + * Parse index name. * * @param lex Lexer. * @return Index name. @@ -249,34 +248,31 @@ public class SqlCreateIndexCommand implements SqlCommand { while (true) { SqlLexerToken token = lex.lookAhead(); - if (token.tokenType() == SqlLexerTokenType.EOF) - return; + if (token.tokenType() != SqlLexerTokenType.DEFAULT) + break; - if (token.tokenType() == SqlLexerTokenType.DEFAULT) { - switch (token.token()) { - case PARALLEL: - parallel = getIntProperty(lex, PARALLEL, foundProps); + switch (token.token()) { + case PARALLEL: + parallel = getIntProperty(lex, PARALLEL, foundProps); - if (parallel < 0) - throw error(lex, "Illegal " + PARALLEL + " value. Should be positive: " + parallel); + if (parallel < 0) + throw error(lex, "Illegal " + PARALLEL + " value. Should be positive: " + parallel); - break; + break; - case INLINE_SIZE: - inlineSize = getIntProperty(lex, INLINE_SIZE, foundProps); + case INLINE_SIZE: + inlineSize = getIntProperty(lex, INLINE_SIZE, foundProps); - if (inlineSize < 0) - throw error(lex, "Illegal " + INLINE_SIZE + - " value. Should be positive: " + inlineSize); + if (inlineSize < 0) + throw error(lex, "Illegal " + INLINE_SIZE + + " value. Should be positive: " + inlineSize); - break; + break; - default: - return; - } + default: + return; } } - } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/9de5fce4/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserCreateIndexSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserCreateIndexSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserCreateIndexSelfTest.java index 80328ab..465e8d1 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserCreateIndexSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/sql/SqlParserCreateIndexSelfTest.java @@ -46,8 +46,10 @@ public class SqlParserCreateIndexSelfTest extends SqlParserAbstractSelfTest { public void testCreateIndex() throws Exception { // Base. parseValidate(null, "CREATE INDEX idx ON tbl(a)", null, "TBL", "IDX", DEFAULT_PROPS, "A", false); + parseValidate(null, "CREATE INDEX idx ON tbl(a);", null, "TBL", "IDX", DEFAULT_PROPS, "A", false); parseValidate(null, "CREATE INDEX idx ON tbl(a ASC)", null, "TBL", "IDX", DEFAULT_PROPS, "A", false); parseValidate(null, "CREATE INDEX idx ON tbl(a DESC)", null, "TBL", "IDX", DEFAULT_PROPS, "A", true); + assertParseError(null, "CREATE INDEX idx ON tbl(a) ,", "Unexpected token: \",\""); // Case (in)sensitivity. parseValidate(null, "CREATE INDEX IDX ON TBL(COL)", null, "TBL", "IDX", DEFAULT_PROPS, "COL", false);
