Search in sources :

Example 1 with ColumnDefinition

use of io.dingodb.common.table.ColumnDefinition in project dingo by dingodb.

the class DingoDdlExecutor method execute.

@SuppressWarnings({ "unused", "MethodMayBeStatic" })
public void execute(SqlCreateTable create, CalcitePrepare.Context context) {
    log.info("DDL execute: {}", create);
    final String tableName = getTableName(create.name, context);
    TableDefinition td = new TableDefinition(tableName);
    List<String> keyList = null;
    SqlNodeList columnList = create.columnList;
    if (columnList == null) {
        throw SqlUtil.newContextException(create.name.getParserPosition(), RESOURCE.createTableRequiresColumnList());
    }
    for (SqlNode sqlNode : create.columnList) {
        if (sqlNode instanceof SqlKeyConstraint) {
            SqlKeyConstraint constraint = (SqlKeyConstraint) sqlNode;
            if (constraint.getOperator().getKind() == SqlKind.PRIMARY_KEY) {
                // The 0th element is the name of the constraint
                keyList = ((SqlNodeList) constraint.getOperandList().get(1)).getList().stream().map(t -> ((SqlIdentifier) Objects.requireNonNull(t)).getSimple()).collect(Collectors.toList());
                break;
            }
        }
    }
    SqlValidator validator = new ContextSqlValidator(context, true);
    for (SqlNode sqlNode : create.columnList) {
        if (sqlNode.getKind() == SqlKind.COLUMN_DECL) {
            SqlColumnDeclaration scd = (SqlColumnDeclaration) sqlNode;
            ColumnDefinition cd = fromSqlColumnDeclaration(scd, validator, keyList);
            td.addColumn(cd);
        }
    }
    if (td.getColumns().stream().noneMatch(ColumnDefinition::isPrimary)) {
        throw new RuntimeException("Not have primary key!");
    }
    final MutableSchema schema = getSchema(context);
    if (schema.getTable(tableName) != null) {
        if (!create.ifNotExists) {
            // They did not specify IF NOT EXISTS, so give error.
            throw SqlUtil.newContextException(create.name.getParserPosition(), RESOURCE.tableExists(tableName));
        }
    }
    schema.createTable(tableName, td);
}
Also used : SqlValidator(org.apache.calcite.sql.validate.SqlValidator) ContextSqlValidator(org.apache.calcite.jdbc.ContextSqlValidator) TableDefinition(io.dingodb.common.table.TableDefinition) SqlNodeList(org.apache.calcite.sql.SqlNodeList) ContextSqlValidator(org.apache.calcite.jdbc.ContextSqlValidator) SqlColumnDeclaration(org.apache.calcite.sql.ddl.SqlColumnDeclaration) SqlKeyConstraint(org.apache.calcite.sql.ddl.SqlKeyConstraint) SqlNode(org.apache.calcite.sql.SqlNode) ColumnDefinition(io.dingodb.common.table.ColumnDefinition)

Aggregations

ColumnDefinition (io.dingodb.common.table.ColumnDefinition)1 TableDefinition (io.dingodb.common.table.TableDefinition)1 ContextSqlValidator (org.apache.calcite.jdbc.ContextSqlValidator)1 SqlNode (org.apache.calcite.sql.SqlNode)1 SqlNodeList (org.apache.calcite.sql.SqlNodeList)1 SqlColumnDeclaration (org.apache.calcite.sql.ddl.SqlColumnDeclaration)1 SqlKeyConstraint (org.apache.calcite.sql.ddl.SqlKeyConstraint)1 SqlValidator (org.apache.calcite.sql.validate.SqlValidator)1