Currently, there is no DDL in Calcite's "core" module (or its SQL
parser) and the SQL parser in the "server" module adds DDL extensions
for Calcite's object types.

There is a PR [1][2] to add support for "CREATE TABLE" to Babel, and
it makes "babel" extend the "server" module. In particular, it uses
classes SqlDdlNodes and SqlCreateTable from "server".

I am uncomfortable with that approach, because "server" does other
things besides parse DDL (it creates a stateful server and handles
RPC). Also, the needs of other DBMSs' DDL might make Calcite's DDL
classes more complicated. So, it all seems to be unnecessary coupling.

The alternative is to copy-paste the DDL classes (currently
SqlDdlNodes, SqlCreateTable and SqlColumnDeclaration) from "babel"
into "server".

Another alternative would be to move all DDL classes into "core".

None of the alternatives are great, but I prefer the copy-paste
approach. What do y'all think?

Julian

[1] https://github.com/apache/calcite/pull/1938
[2] https://issues.apache.org/jira/browse/CALCITE-3946

Reply via email to