Skip to content

Commit ff3607d

Browse files
authored
fix(isthmus): support DDL statements in SqlToSubstrait conversion (#736)
1 parent 631df9d commit ff3607d

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

isthmus/src/main/java/io/substrait/isthmus/SqlToSubstrait.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.substrait.plan.Plan;
66
import io.substrait.plan.Plan.Version;
77
import org.apache.calcite.prepare.Prepare;
8+
import org.apache.calcite.server.ServerDdlExecutor;
89
import org.apache.calcite.sql.SqlDialect;
910
import org.apache.calcite.sql.SqlOperatorTable;
1011
import org.apache.calcite.sql.parser.SqlParseException;
@@ -67,7 +68,9 @@ public Plan convert(
6768
Builder builder = io.substrait.plan.Plan.builder();
6869
builder.version(Version.builder().from(Version.DEFAULT_VERSION).producer("isthmus").build());
6970

70-
final SqlParser.Config sqlParserConfig = sqlDialect.configureParser(SqlParser.config());
71+
final SqlParser.Config sqlParserConfig =
72+
sqlDialect.configureParser(
73+
SqlParser.config().withParserFactory(ServerDdlExecutor.PARSER_FACTORY));
7174

7275
// TODO: consider case in which one sql passes conversion while others don't
7376
SubstraitSqlToCalcite.convertQueries(sqlStatements, catalogReader, sqlParserConfig).stream()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.substrait.isthmus;
2+
3+
import io.substrait.isthmus.sql.SubstraitCreateStatementParser;
4+
import org.apache.calcite.prepare.Prepare;
5+
import org.apache.calcite.sql.SqlDialect;
6+
import org.apache.calcite.sql.parser.SqlParseException;
7+
import org.junit.jupiter.api.Test;
8+
9+
class DdlToSubstraitConversionTest {
10+
@Test
11+
void testConversion() throws SqlParseException {
12+
final Prepare.CatalogReader catalogReader =
13+
SubstraitCreateStatementParser.processCreateStatementsToCatalog(
14+
"create table src1 (intcol int, charcol varchar(10))");
15+
16+
final SqlToSubstrait converter = new SqlToSubstrait();
17+
converter.convert(
18+
"create table dst1 as select * from src1",
19+
catalogReader,
20+
SqlDialect.DatabaseProduct.CALCITE.getDialect());
21+
}
22+
}

0 commit comments

Comments
 (0)