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);

Reply via email to