1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.binder.context.statement.ddl;
19
20 import lombok.Getter;
21 import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
22 import org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext;
23 import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable;
24 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
25 import org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtils;
26 import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexNameSegment;
27 import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
28 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
29 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
30 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
31 import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
32 import org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.CreateIndexStatementHandler;
33
34 import java.util.Collection;
35 import java.util.Collections;
36
37
38
39
40 @Getter
41 public final class CreateIndexStatementContext extends CommonSQLStatementContext implements TableAvailable, IndexAvailable {
42
43 private final TablesContext tablesContext;
44
45 private final boolean generatedIndex;
46
47 public CreateIndexStatementContext(final CreateIndexStatement sqlStatement) {
48 super(sqlStatement);
49 tablesContext = new TablesContext(sqlStatement.getTable(), getDatabaseType());
50 generatedIndex = null == sqlStatement.getIndex();
51 }
52
53 @Override
54 public CreateIndexStatement getSqlStatement() {
55 return (CreateIndexStatement) super.getSqlStatement();
56 }
57
58 @Override
59 public Collection<SimpleTableSegment> getAllTables() {
60 return null == getSqlStatement().getTable() ? Collections.emptyList() : Collections.singletonList(getSqlStatement().getTable());
61 }
62
63 @Override
64 public Collection<IndexSegment> getIndexes() {
65 if (null == getSqlStatement().getIndex()) {
66 return CreateIndexStatementHandler.getGeneratedIndexStartIndex(getSqlStatement()).map(each -> Collections.singletonList(new IndexSegment(each, each,
67 new IndexNameSegment(each, each, new IdentifierValue(IndexMetaDataUtils.getGeneratedLogicIndexName(getSqlStatement().getColumns())))))).orElseGet(Collections::emptyList);
68 }
69 return Collections.singletonList(getSqlStatement().getIndex());
70 }
71
72 @Override
73 public Collection<ColumnSegment> getIndexColumns() {
74 return getSqlStatement().getColumns();
75 }
76 }