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.aware.CursorDefinitionAware;
22 import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
23 import org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext;
24 import org.apache.shardingsphere.infra.binder.context.type.CursorAvailable;
25 import org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
26 import org.apache.shardingsphere.sql.parser.sql.common.extractor.TableExtractor;
27 import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.cursor.CursorNameSegment;
28 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
29 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
30 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
31 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.MoveStatement;
32
33 import java.util.Collection;
34 import java.util.Collections;
35 import java.util.Optional;
36
37
38
39
40 @Getter
41 public final class MoveStatementContext extends CommonSQLStatementContext implements CursorAvailable, WhereAvailable, CursorDefinitionAware {
42
43 private CursorStatementContext cursorStatementContext;
44
45 private TablesContext tablesContext;
46
47 public MoveStatementContext(final MoveStatement sqlStatement) {
48 super(sqlStatement);
49 tablesContext = new TablesContext(Collections.emptyList(), getDatabaseType());
50 }
51
52 @Override
53 public MoveStatement getSqlStatement() {
54 return (MoveStatement) super.getSqlStatement();
55 }
56
57 @Override
58 public Optional<CursorNameSegment> getCursorName() {
59 return Optional.of(getSqlStatement().getCursorName());
60 }
61
62 @Override
63 public void setUpCursorDefinition(final CursorStatementContext cursorStatementContext) {
64 this.cursorStatementContext = cursorStatementContext;
65 TableExtractor tableExtractor = new TableExtractor();
66 tableExtractor.extractTablesFromSelect(cursorStatementContext.getSqlStatement().getSelect());
67 tablesContext = new TablesContext(tableExtractor.getRewriteTables(), getDatabaseType());
68 }
69
70 @Override
71 public Collection<WhereSegment> getWhereSegments() {
72 return null == cursorStatementContext ? Collections.emptyList() : cursorStatementContext.getWhereSegments();
73 }
74
75 @Override
76 public Collection<ColumnSegment> getColumnSegments() {
77 return null == cursorStatementContext ? Collections.emptyList() : cursorStatementContext.getColumnSegments();
78 }
79
80 @Override
81 public Collection<BinaryOperationExpression> getJoinConditions() {
82 return null == cursorStatementContext ? Collections.emptyList() : cursorStatementContext.getJoinConditions();
83 }
84 }