[
https://issues.apache.org/jira/browse/CALCITE-4412?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alex Ramos updated CALCITE-4412:
--------------------------------
Description:
I am trying to use Calcite to parse some MySQL-style DDL. The parse fails on
MySQL-style type declarations that include a display size e.g. int(11).
Here is my test code:
{code:java}
public class SqlParserMysqlTest {
private static final Config CONFIG = SqlParser.Config.DEFAULT
.withLex(Lex.MYSQL).withConformance(SqlConformanceEnum.MYSQL_5)
.withParserFactory(SqlDdlParserImpl.FACTORY);
@Test
public void testMysqlCreate() throws SqlParseException {
SqlParser sqlParser = SqlParser.create(
new SourceStringReader("create table `t1` (x int(11))"),
CONFIG);
SqlNode sqlNode = sqlParser.parseQuery();
Assert.assertEquals(SqlKind.CREATE_TABLE, sqlNode.getKind());
SqlCreateTable create = (SqlCreateTable) sqlNode;
Assert.assertEquals("T1", create.name.getSimple());
final SqlColumnDeclaration sqlColumnDeclaration =
(SqlColumnDeclaration) create.columnList
.get(0);
Assert.assertEquals("X", sqlColumnDeclaration.name.getSimple());
Assert.assertEquals("INTEGER",
sqlColumnDeclaration.dataType.getTypeName().getSimple());
}
}
{code}
And here is the error:
{noformat}
org.apache.calcite.sql.parser.SqlParseException: Encountered "(" at line 1,
column 25.
Was expecting one of:
"ARRAY" ...
"AS" ...
"DEFAULT" ...
"GENERATED" ...
"MULTISET" ...
"NOT" ...
"NULL" ...
")" ...
"," ...
at
org.apache.calcite.sql.parser.ddl.SqlDdlParserImpl.convertException(SqlDdlParserImpl.java:394)
at
org.apache.calcite.sql.parser.ddl.SqlDdlParserImpl.normalizeException(SqlDdlParserImpl.java:157)
at
org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:140)
at
org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:155){noformat}
was:
I am trying to use Calcite to parse some MySQL-style DDL. The parse fails on
MySQL-style type declarations that include a display size e.g. int(11).
Here is my test code:
{code:java}
public class SqlParserMysqlTest {
private static final Config CONFIG = SqlParser.Config.DEFAULT
.withLex(Lex.MYSQL).withConformance(SqlConformanceEnum.MYSQL_5)
.withParserFactory(SqlDdlParserImpl.FACTORY);
@Test
public void testMysqlCreate() throws SqlParseException {
SqlParser sqlParser = SqlParser.create(
new SourceStringReader("create table `t1` (x int(11))"),
CONFIG);
SqlNode sqlNode = sqlParser.parseQuery();
Assert.assertEquals(SqlKind.CREATE_TABLE, sqlNode.getKind());
SqlCreateTable create = (SqlCreateTable) sqlNode;
Assert.assertEquals("T1", create.name.getSimple());
final SqlColumnDeclaration sqlColumnDeclaration =
(SqlColumnDeclaration) create.columnList
.get(0);
Assert.assertEquals("X", sqlColumnDeclaration.name.getSimple());
Assert.assertEquals("INTEGER",
sqlColumnDeclaration.dataType.getTypeName().getSimple());
}
}
{code}
> SqlParser MySQL mode fails to parse "INT(11)" type
> --------------------------------------------------
>
> Key: CALCITE-4412
> URL: https://issues.apache.org/jira/browse/CALCITE-4412
> Project: Calcite
> Issue Type: Bug
> Components: server
> Affects Versions: 1.26.0
> Environment: Java 11
> Windows 10
> Reporter: Alex Ramos
> Priority: Major
>
> I am trying to use Calcite to parse some MySQL-style DDL. The parse fails on
> MySQL-style type declarations that include a display size e.g. int(11).
> Here is my test code:
> {code:java}
> public class SqlParserMysqlTest {
> private static final Config CONFIG = SqlParser.Config.DEFAULT
> .withLex(Lex.MYSQL).withConformance(SqlConformanceEnum.MYSQL_5)
> .withParserFactory(SqlDdlParserImpl.FACTORY);
> @Test
> public void testMysqlCreate() throws SqlParseException {
> SqlParser sqlParser = SqlParser.create(
> new SourceStringReader("create table `t1` (x int(11))"),
> CONFIG);
> SqlNode sqlNode = sqlParser.parseQuery();
> Assert.assertEquals(SqlKind.CREATE_TABLE, sqlNode.getKind());
> SqlCreateTable create = (SqlCreateTable) sqlNode;
> Assert.assertEquals("T1", create.name.getSimple());
> final SqlColumnDeclaration sqlColumnDeclaration =
> (SqlColumnDeclaration) create.columnList
> .get(0);
> Assert.assertEquals("X", sqlColumnDeclaration.name.getSimple());
> Assert.assertEquals("INTEGER",
> sqlColumnDeclaration.dataType.getTypeName().getSimple());
> }
> }
> {code}
> And here is the error:
> {noformat}
> org.apache.calcite.sql.parser.SqlParseException: Encountered "(" at line 1,
> column 25.
> Was expecting one of:
> "ARRAY" ...
> "AS" ...
> "DEFAULT" ...
> "GENERATED" ...
> "MULTISET" ...
> "NOT" ...
> "NULL" ...
> ")" ...
> "," ...
>
> at
> org.apache.calcite.sql.parser.ddl.SqlDdlParserImpl.convertException(SqlDdlParserImpl.java:394)
> at
> org.apache.calcite.sql.parser.ddl.SqlDdlParserImpl.normalizeException(SqlDdlParserImpl.java:157)
> at
> org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:140)
> at
> org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:155){noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)