This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 1a3f3497774 Add TableSQLStatementAttribute (#35778)
1a3f3497774 is described below
commit 1a3f3497774abbcbeae8fb6e9198f909b2ad3802
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jun 22 00:36:27 2025 +0800
Add TableSQLStatementAttribute (#35778)
* Add TableSQLStatementAttribute
* Add TableSQLStatementAttribute
* Add TableSQLStatementAttribute
* Add TableSQLStatementAttribute
* Add TableSQLStatementAttribute
* Add TableSQLStatementAttribute
---
...ShardingCreateFunctionSupportedCheckerTest.java | 13 ++++----
.../ShardingRenameTableSupportedCheckerTest.java | 4 ++-
.../sql/dml/ShardingCopySupportedCheckerTest.java | 3 ++
.../dml/ShardingLoadDataSupportedCheckerTest.java | 8 ++---
.../dml/ShardingLoadXmlSupportedCheckerTest.java | 8 ++---
.../merge/ShardingResultMergerEngineTest.java | 12 ++++++--
...ShardingRenameTableRouteContextCheckerTest.java | 4 ++-
.../binder/context/SQLStatementContextFactory.java | 10 +++----
.../statement/type/CommonSQLStatementContext.java | 4 +--
.../type/dal/ExplainStatementContext.java | 4 ++-
.../statement/SQLStatementContextFactoryTest.java | 2 ++
.../sql/SingleDropSchemaSupportedCheckerTest.java | 2 ++
.../sql/SingleDropTableSupportedCheckerTest.java | 2 ++
.../type/TableSQLStatementAttribute.java} | 14 +++++----
.../available/TableAvailableSQLStatement.java | 35 ----------------------
.../core/statement/dal/AnalyzeTableStatement.java | 12 +++++---
.../core/statement/dal/ExplainStatement.java | 12 ++++----
.../statement/dal/ShowCreateTableStatement.java | 16 +++-------
.../core/statement/dcl/DenyUserStatement.java | 10 +++----
.../core/statement/dcl/GrantStatement.java | 10 +++++--
.../core/statement/dcl/RevokeStatement.java | 10 +++++--
.../core/statement/ddl/CommentStatement.java | 10 +++----
.../statement/ddl/CreateFunctionStatement.java | 12 ++++----
.../core/statement/ddl/DropTableStatement.java | 10 +++++--
.../core/statement/ddl/DropViewStatement.java | 9 +++---
.../core/statement/ddl/PrepareStatement.java | 12 ++++----
.../core/statement/ddl/RenameTableStatement.java | 15 +++++-----
.../core/statement/ddl/TruncateStatement.java | 10 +++++--
.../core/statement/dml/CopyStatement.java | 9 +++---
.../core/statement/dml/LoadDataStatement.java | 12 ++++----
.../core/statement/dml/LoadXMLStatement.java | 12 ++++----
.../statement/mysql/dal/MySQLFlushStatement.java | 10 +++++--
.../mysql/dal/MySQLOptimizeTableStatement.java | 10 +++++--
.../dal/show/column/MySQLDescribeStatement.java | 15 +++-------
.../dal/show/column/MySQLShowColumnsStatement.java | 13 ++------
.../dal/show/index/MySQLShowIndexStatement.java | 13 ++------
.../backend/connector/ProxySQLExecutorTest.java | 4 ++-
37 files changed, 184 insertions(+), 187 deletions(-)
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
index 57dbb4bf362..7bb7cd0761a 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
@@ -17,8 +17,8 @@
package org.apache.shardingsphere.sharding.checker.sql.ddl;
-import
org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import
org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.table.NoSuchTableException;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.table.TableExistsException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -29,6 +29,8 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.R
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.ValidStatementSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateFunctionStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
@@ -38,7 +40,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import java.util.Collections;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -69,7 +70,7 @@ class ShardingCreateFunctionSupportedCheckerTest {
routineBody.getValidStatements().add(selectValidStatementSegment);
CreateFunctionStatement sqlStatement =
mock(CreateFunctionStatement.class);
when(sqlStatement.getRoutineBody()).thenReturn(Optional.of(routineBody));
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(fromTable));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(fromTable)));
SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(mock(), sqlStatement);
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
@@ -88,7 +89,7 @@ class ShardingCreateFunctionSupportedCheckerTest {
routineBody.getValidStatements().add(validStatementSegment);
CreateFunctionStatement sqlStatement =
mock(CreateFunctionStatement.class);
when(sqlStatement.getRoutineBody()).thenReturn(Optional.of(routineBody));
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(fromTable));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(fromTable)));
SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(mock(), sqlStatement);
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(rule.isShardingTable("foo_tbl")).thenReturn(true);
@@ -106,7 +107,7 @@ class ShardingCreateFunctionSupportedCheckerTest {
routineBody.getValidStatements().add(validStatementSegment);
CreateFunctionStatement sqlStatement =
mock(CreateFunctionStatement.class);
when(sqlStatement.getRoutineBody()).thenReturn(Optional.of(routineBody));
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(fromTable));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(fromTable)));
SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(mock(), sqlStatement);
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
assertThrows(NoSuchTableException.class, () -> new
ShardingCreateFunctionSupportedChecker().check(rule, database, mock(),
sqlStatementContext));
@@ -123,7 +124,7 @@ class ShardingCreateFunctionSupportedCheckerTest {
routineBody.getValidStatements().add(validStatementSegment);
CreateFunctionStatement sqlStatement =
mock(CreateFunctionStatement.class);
when(sqlStatement.getRoutineBody()).thenReturn(Optional.of(routineBody));
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(table));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(table)));
SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(mock(), sqlStatement);
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
index 5e5d0c34d40..b5d032633d4 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingRenameTableSupportedCheckerTest.java
@@ -24,6 +24,8 @@ import org.apache.shardingsphere.sharding.rule.ShardingRule;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameTableStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -67,7 +69,7 @@ class ShardingRenameTableSupportedCheckerTest {
renameTableDefinitionSegment.setTable(table);
renameTableDefinitionSegment.setRenameTable(renameTable);
when(sqlStatement.getRenameTables()).thenReturn(Collections.singleton(renameTableDefinitionSegment));
- when(sqlStatement.getTables()).thenReturn(Arrays.asList(table,
renameTable));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(Arrays.asList(table,
renameTable))));
return new CommonSQLStatementContext(mock(), sqlStatement);
}
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingCopySupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingCopySupportedCheckerTest.java
index 603c59230e6..0371b36ebaa 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingCopySupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingCopySupportedCheckerTest.java
@@ -22,6 +22,8 @@ import
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedShardingOp
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -57,6 +59,7 @@ class ShardingCopySupportedCheckerTest {
CopyStatement sqlStatement = mock(CopyStatement.class);
SimpleTableSegment table = new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("foo_tbl")));
when(sqlStatement.getTable()).thenReturn(Optional.of(table));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(table)));
return new CommonSQLStatementContext(mock(), sqlStatement);
}
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadDataSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadDataSupportedCheckerTest.java
index 4bce713fe3d..c97d9679628 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadDataSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadDataSupportedCheckerTest.java
@@ -22,6 +22,8 @@ import
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedShardingOp
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadDataStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -29,8 +31,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import java.util.Collections;
-
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock;
@@ -47,7 +47,7 @@ class ShardingLoadDataSupportedCheckerTest {
LoadDataStatement sqlStatement = mock(LoadDataStatement.class);
SimpleTableSegment table = new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("foo_tbl")));
when(sqlStatement.getTable()).thenReturn(table);
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(table));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(table)));
assertDoesNotThrow(() -> new
ShardingLoadDataSupportedChecker().check(rule, mock(), mock(), new
CommonSQLStatementContext(mock(), sqlStatement)));
}
@@ -56,7 +56,7 @@ class ShardingLoadDataSupportedCheckerTest {
LoadDataStatement sqlStatement = mock(LoadDataStatement.class);
SimpleTableSegment table = new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("foo_tbl")));
when(sqlStatement.getTable()).thenReturn(table);
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(table));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(table)));
when(rule.isShardingTable("foo_tbl")).thenReturn(true);
assertThrows(UnsupportedShardingOperationException.class, () -> new
ShardingLoadDataSupportedChecker().check(rule, mock(), mock(), new
CommonSQLStatementContext(mock(), sqlStatement)));
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadXmlSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadXmlSupportedCheckerTest.java
index 5ef51d70f51..0bf58defa05 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadXmlSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingLoadXmlSupportedCheckerTest.java
@@ -22,6 +22,8 @@ import
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedShardingOp
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadXMLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -29,8 +31,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import java.util.Collections;
-
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock;
@@ -47,7 +47,7 @@ class ShardingLoadXmlSupportedCheckerTest {
LoadXMLStatement sqlStatement = mock(LoadXMLStatement.class);
SimpleTableSegment table = new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("foo_tbl")));
when(sqlStatement.getTable()).thenReturn(table);
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(table));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(table)));
assertDoesNotThrow(() -> new
ShardingLoadXmlSupportedChecker().check(rule, mock(), mock(), new
CommonSQLStatementContext(mock(), sqlStatement)));
}
@@ -57,7 +57,7 @@ class ShardingLoadXmlSupportedCheckerTest {
SimpleTableSegment table = new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("foo_tbl")));
when(sqlStatement.getTable()).thenReturn(table);
when(rule.isShardingTable("foo_tbl")).thenReturn(true);
-
when(sqlStatement.getTables()).thenReturn(Collections.singleton(table));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(table)));
assertThrows(UnsupportedShardingOperationException.class, () -> new
ShardingLoadXmlSupportedChecker().check(rule, mock(), mock(), new
CommonSQLStatementContext(mock(), sqlStatement)));
}
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
index 0c43c58306d..6a5f2239839 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
@@ -17,8 +17,8 @@
package org.apache.shardingsphere.sharding.merge;
-import
org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import
org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
@@ -35,6 +35,8 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.In
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionsSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.FetchStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertStatement;
@@ -70,7 +72,9 @@ class ShardingResultMergerEngineTest {
@Test
void assertNewInstanceWithDALStatement() {
ConfigurationProperties props = new ConfigurationProperties(new
Properties());
- SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(databaseType, mock(ShowStatement.class));
+ SQLStatement sqlStatement = mock(ShowStatement.class);
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes());
+ SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(databaseType, sqlStatement);
assertThat(new ShardingResultMergerEngine().newInstance("foo_db",
databaseType, null, props, sqlStatementContext),
instanceOf(ShardingDALResultMerger.class));
}
@@ -94,7 +98,9 @@ class ShardingResultMergerEngineTest {
@Test
void assertNewInstanceWithDDLStatement() {
ConfigurationProperties props = new ConfigurationProperties(new
Properties());
- SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(databaseType, mock(FetchStatement.class));
+ SQLStatement sqlStatement = mock(FetchStatement.class);
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes());
+ SQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(databaseType, sqlStatement);
assertThat(new ShardingResultMergerEngine().newInstance("foo_db",
databaseType, null, props, sqlStatementContext),
instanceOf(ShardingDDLResultMerger.class));
}
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
index 97fe237469f..b197e16dab3 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
@@ -31,6 +31,8 @@ import org.apache.shardingsphere.sharding.rule.ShardingTable;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameTableStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -93,7 +95,7 @@ class ShardingRenameTableRouteContextCheckerTest {
SimpleTableSegment renameTable = new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("bar_tbl")));
renameTableDefinitionSegment.setRenameTable(renameTable);
when(sqlStatement.getRenameTables()).thenReturn(Collections.singleton(renameTableDefinitionSegment));
- when(sqlStatement.getTables()).thenReturn(Arrays.asList(table,
renameTable));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(Arrays.asList(table,
renameTable))));
return new CommonSQLStatementContext(mock(), sqlStatement);
}
}
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/SQLStatementContextFactory.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/SQLStatementContextFactory.java
index 0df6060f528..aba3f97410b 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/SQLStatementContextFactory.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/SQLStatementContextFactory.java
@@ -42,7 +42,7 @@ import
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dcl.DCLStatement;
@@ -67,7 +67,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateS
import java.util.Collections;
import java.util.List;
-import java.util.Optional;
/**
* SQL statement context factory.
@@ -87,10 +86,9 @@ public final class SQLStatementContextFactory {
*/
public static SQLStatementContext newInstance(final ShardingSphereMetaData
metaData,
final DatabaseType
databaseType, final SQLStatement sqlStatement, final List<Object> params, final
String currentDatabaseName) {
- Optional<DialectCommonSQLStatementContextWarpProvider>
dialectCommonSQLStatementContextWarpProvider =
DatabaseTypedSPILoader.findService(
- DialectCommonSQLStatementContextWarpProvider.class,
databaseType);
- if (sqlStatement instanceof TableAvailableSQLStatement &&
dialectCommonSQLStatementContextWarpProvider
- .map(optional ->
dialectCommonSQLStatementContextWarpProvider.get().getNeedToWarpSQLStatementTypes().contains(sqlStatement.getClass())).orElse(false))
{
+ if
(sqlStatement.getAttributes().findAttribute(TableSQLStatementAttribute.class).isPresent()
+ &&
DatabaseTypedSPILoader.findService(DialectCommonSQLStatementContextWarpProvider.class,
databaseType)
+ .map(optional ->
optional.getNeedToWarpSQLStatementTypes().contains(sqlStatement.getClass())).orElse(false))
{
return new CommonSQLStatementContext(databaseType, sqlStatement);
}
if (sqlStatement instanceof DMLStatement) {
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/CommonSQLStatementContext.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/CommonSQLStatementContext.java
index 0151c2c9c93..cc1f8f4a404 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/CommonSQLStatementContext.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/CommonSQLStatementContext.java
@@ -23,7 +23,7 @@ import
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContex
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collections;
@@ -43,6 +43,6 @@ public final class CommonSQLStatementContext implements
SQLStatementContext {
public CommonSQLStatementContext(final DatabaseType databaseType, final
SQLStatement sqlStatement) {
this.databaseType = databaseType;
this.sqlStatement = sqlStatement;
- tablesContext = new TablesContext(sqlStatement instanceof
TableAvailableSQLStatement ? ((TableAvailableSQLStatement)
sqlStatement).getTables() : Collections.emptyList());
+ tablesContext = new
TablesContext(sqlStatement.getAttributes().findAttribute(TableSQLStatementAttribute.class).map(TableSQLStatementAttribute::getTables).orElse(Collections.emptyList()));
}
}
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
index ef68b07ee59..4fbc4900505 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ExplainStatementContext.java
@@ -23,8 +23,10 @@ import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import
org.apache.shardingsphere.infra.binder.context.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement;
+import java.util.Collections;
import java.util.List;
/**
@@ -45,7 +47,7 @@ public final class ExplainStatementContext implements
SQLStatementContext {
final DatabaseType databaseType, final
ExplainStatement sqlStatement, final List<Object> params, final String
currentDatabaseName) {
this.databaseType = databaseType;
this.sqlStatement = sqlStatement;
- tablesContext = new TablesContext(sqlStatement.getTables());
+ tablesContext = new
TablesContext(sqlStatement.getAttributes().findAttribute(TableSQLStatementAttribute.class).map(TableSQLStatementAttribute::getTables).orElse(Collections.emptyList()));
explainableSQLStatementContext =
SQLStatementContextFactory.newInstance(metaData, databaseType,
sqlStatement.getExplainableSQLStatement(), params, currentDatabaseName);
}
}
diff --git
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java
index b2c566c1e66..a305a6b6456 100644
---
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java
+++
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java
@@ -37,6 +37,7 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Proj
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.limit.LimitSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterDatabaseStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CloseStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CursorStatement;
@@ -80,6 +81,7 @@ class SQLStatementContextFactoryTest {
@Test
void
assertSQLStatementContextCreatedWhenSQLStatementNotInstanceOfSelectStatementAndInsertStatement()
{
AlterDatabaseStatement alterDatabaseStatement =
mock(AlterDatabaseStatement.class);
+ when(alterDatabaseStatement.getAttributes()).thenReturn(new
SQLStatementAttributes());
SQLStatementContext sqlStatementContext = new
SQLBindEngine(mockMetaData(), "foo_db", new
HintValueContext()).bind(databaseType, alterDatabaseStatement,
Collections.emptyList());
assertThat(sqlStatementContext,
instanceOf(CommonSQLStatementContext.class));
}
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
index 767149465ae..5da3e3b0d77 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
@@ -27,6 +27,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import
org.apache.shardingsphere.single.checker.sql.schema.SingleDropSchemaSupportedChecker;
import org.apache.shardingsphere.single.exception.DropNotEmptySchemaException;
import org.apache.shardingsphere.single.rule.SingleRule;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -77,6 +78,7 @@ class SingleDropSchemaSupportedCheckerTest {
DropSchemaStatement dropSchemaStatement =
mock(DropSchemaStatement.class, RETURNS_DEEP_STUBS);
when(dropSchemaStatement.isContainsCascade()).thenReturn(containsCascade);
when(dropSchemaStatement.getSchemaNames()).thenReturn(Collections.singleton(new
IdentifierValue(schemaName)));
+ when(dropSchemaStatement.getAttributes()).thenReturn(new
SQLStatementAttributes());
return new CommonSQLStatementContext(mock(), dropSchemaStatement);
}
}
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
index ba519579d4d..bc95c15e218 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.single.checker.sql.table.SingleDropTableSupportedChecker;
import org.apache.shardingsphere.single.rule.SingleRule;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -67,6 +68,7 @@ class SingleDropTableSupportedCheckerTest {
DropTableStatement dropSchemaStatement =
mock(DropTableStatement.class, RETURNS_DEEP_STUBS);
when(dropSchemaStatement.isContainsCascade()).thenReturn(containsCascade);
when(dropSchemaStatement.getTables()).thenReturn(Collections.emptyList());
+ when(dropSchemaStatement.getAttributes()).thenReturn(new
SQLStatementAttributes());
return new CommonSQLStatementContext(mock(), dropSchemaStatement);
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/AnalyzeTableStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/attribute/type/TableSQLStatementAttribute.java
similarity index 78%
copy from
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/AnalyzeTableStatement.java
copy to
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/attribute/type/TableSQLStatementAttribute.java
index e199bc075ef..4500edba5d0 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/AnalyzeTableStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/attribute/type/TableSQLStatementAttribute.java
@@ -15,22 +15,26 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.statement.core.statement.dal;
+package
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttribute;
import java.util.Collection;
+import java.util.Collections;
/**
- * Analyze table statement.
+ * Table SQL statement attribute.
*/
@RequiredArgsConstructor
@Getter
-public final class AnalyzeTableStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
+public final class TableSQLStatementAttribute implements SQLStatementAttribute
{
private final Collection<SimpleTableSegment> tables;
+
+ public TableSQLStatementAttribute(final SimpleTableSegment table) {
+ this(Collections.singleton(table));
+ }
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableAvailableSQLStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableAvailableSQLStatement.java
deleted file mode 100644
index 22ca1080ae6..00000000000
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableAvailableSQLStatement.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package
org.apache.shardingsphere.sql.parser.statement.core.statement.available;
-
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
-
-import java.util.Collection;
-
-/**
- * Table available SQL statement.
- */
-public interface TableAvailableSQLStatement {
-
- /**
- * Get tables.
- *
- * @return tables
- */
- Collection<SimpleTableSegment> getTables();
-}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/AnalyzeTableStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/AnalyzeTableStatement.java
index e199bc075ef..b84aed19633 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/AnalyzeTableStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/AnalyzeTableStatement.java
@@ -17,11 +17,11 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement.dal;
-import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
@@ -29,8 +29,12 @@ import java.util.Collection;
* Analyze table statement.
*/
@RequiredArgsConstructor
-@Getter
-public final class AnalyzeTableStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
+public final class AnalyzeTableStatement extends AbstractSQLStatement
implements DALStatement {
private final Collection<SimpleTableSegment> tables;
+
+ @Override
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
+ }
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
index 282ea68e455..f6a05d8c99c 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ExplainStatement.java
@@ -20,27 +20,25 @@ package
org.apache.shardingsphere.sql.parser.statement.core.statement.dal;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtractor;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
-
-import java.util.Collection;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
/**
* Explain statement.
*/
@RequiredArgsConstructor
@Getter
-public final class ExplainStatement extends AbstractSQLStatement implements
DALStatement, TableAvailableSQLStatement {
+public final class ExplainStatement extends AbstractSQLStatement implements
DALStatement {
private final SQLStatement explainableSQLStatement;
@Override
- public Collection<SimpleTableSegment> getTables() {
+ public SQLStatementAttributes getAttributes() {
TableExtractor extractor = new TableExtractor();
// TODO extract table from declare, execute, createMaterializedView,
refreshMaterializedView
extractor.extractTablesFromSQLStatement(explainableSQLStatement);
- return extractor.getRewriteTables();
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(extractor.getRewriteTables()));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java
index 98c375ab15c..1faeead3270 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java
@@ -21,30 +21,22 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.DatabaseSelectRequiredSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.DatabaseSelectRequiredSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableInResultSetSQLStatementAttribute;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
-
-import java.util.Collection;
-import java.util.Collections;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
/**
* Show create table statement.
*/
@RequiredArgsConstructor
@Getter
-public final class ShowCreateTableStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
+public final class ShowCreateTableStatement extends AbstractSQLStatement
implements DALStatement {
private final SimpleTableSegment table;
- @Override
- public Collection<SimpleTableSegment> getTables() {
- return Collections.singleton(table);
- }
-
@Override
public SQLStatementAttributes getAttributes() {
- return new SQLStatementAttributes(new
DatabaseSelectRequiredSQLStatementAttribute(), new
TableInResultSetSQLStatementAttribute(2));
+ return new SQLStatementAttributes(new
DatabaseSelectRequiredSQLStatementAttribute(), new
TableInResultSetSQLStatementAttribute(2), new
TableSQLStatementAttribute(table));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/DenyUserStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/DenyUserStatement.java
index c7b4c7fdca6..16264d222ae 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/DenyUserStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/DenyUserStatement.java
@@ -22,10 +22,10 @@ import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedList;
/**
@@ -33,14 +33,14 @@ import java.util.LinkedList;
*/
@Getter
@Setter
-public final class DenyUserStatement extends AbstractSQLStatement implements
DCLStatement, TableAvailableSQLStatement {
+public final class DenyUserStatement extends AbstractSQLStatement implements
DCLStatement {
private SimpleTableSegment table;
private final Collection<ColumnSegment> columns = new LinkedList<>();
@Override
- public Collection<SimpleTableSegment> getTables() {
- return Collections.singleton(table);
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(table));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/GrantStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/GrantStatement.java
index 894f09603c4..ad1e09d2009 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/GrantStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/GrantStatement.java
@@ -20,7 +20,8 @@ package
org.apache.shardingsphere.sql.parser.statement.core.statement.dcl;
import lombok.Getter;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
import java.util.LinkedList;
@@ -29,7 +30,12 @@ import java.util.LinkedList;
* Grant statement.
*/
@Getter
-public class GrantStatement extends AbstractSQLStatement implements
DCLStatement, TableAvailableSQLStatement {
+public class GrantStatement extends AbstractSQLStatement implements
DCLStatement {
private final Collection<SimpleTableSegment> tables = new LinkedList<>();
+
+ @Override
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
+ }
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/RevokeStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/RevokeStatement.java
index b3a49c785fc..dec0ab8b02a 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/RevokeStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dcl/RevokeStatement.java
@@ -20,7 +20,8 @@ package
org.apache.shardingsphere.sql.parser.statement.core.statement.dcl;
import lombok.Getter;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
import java.util.LinkedList;
@@ -29,7 +30,12 @@ import java.util.LinkedList;
* Revoke statement.
*/
@Getter
-public class RevokeStatement extends AbstractSQLStatement implements
DCLStatement, TableAvailableSQLStatement {
+public class RevokeStatement extends AbstractSQLStatement implements
DCLStatement {
private final Collection<SimpleTableSegment> tables = new LinkedList<>();
+
+ @Override
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
+ }
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CommentStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CommentStatement.java
index 23ff5f07464..7f1d98540ad 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CommentStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CommentStatement.java
@@ -23,10 +23,10 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.Ind
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
-import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
@@ -35,7 +35,7 @@ import java.util.Optional;
*/
@Getter
@Setter
-public class CommentStatement extends AbstractSQLStatement implements
DDLStatement, TableAvailableSQLStatement {
+public class CommentStatement extends AbstractSQLStatement implements
DDLStatement {
private SimpleTableSegment table;
@@ -55,7 +55,7 @@ public class CommentStatement extends AbstractSQLStatement
implements DDLStateme
}
@Override
- public Collection<SimpleTableSegment> getTables() {
- return null == table ? Collections.emptyList() :
Collections.singletonList(table);
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new TableSQLStatementAttribute(null
== table ? Collections.emptyList() : Collections.singletonList(table)));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateFunctionStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateFunctionStatement.java
index d7de432c583..29c4343e1cd 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateFunctionStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateFunctionStatement.java
@@ -23,12 +23,11 @@ import
org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtrac
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.RoutineBodySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -38,7 +37,7 @@ import java.util.Optional;
*/
@Getter
@Setter
-public class CreateFunctionStatement extends AbstractSQLStatement implements
DDLStatement, TableAvailableSQLStatement {
+public class CreateFunctionStatement extends AbstractSQLStatement implements
DDLStatement {
private FunctionNameSegment functionName;
@@ -65,7 +64,8 @@ public class CreateFunctionStatement extends
AbstractSQLStatement implements DDL
}
@Override
- public Collection<SimpleTableSegment> getTables() {
- return getRoutineBody().map(optional -> new
TableExtractor().extractExistTableFromRoutineBody(optional)).orElseGet(Collections::emptyList);
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(
+ new TableSQLStatementAttribute(getRoutineBody().map(optional
-> new
TableExtractor().extractExistTableFromRoutineBody(optional)).orElseGet(Collections::emptyList)));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
index 3ee6e3df330..ca3e6bc6d88 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropTableStatement.java
@@ -21,7 +21,8 @@ import lombok.Getter;
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
import java.util.LinkedList;
@@ -31,11 +32,16 @@ import java.util.LinkedList;
*/
@Getter
@Setter
-public final class DropTableStatement extends AbstractSQLStatement implements
DDLStatement, TableAvailableSQLStatement {
+public final class DropTableStatement extends AbstractSQLStatement implements
DDLStatement {
private final Collection<SimpleTableSegment> tables = new LinkedList<>();
private boolean ifExists;
private boolean containsCascade;
+
+ @Override
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
+ }
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
index aa8030f3433..7d4a5b9a403 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/DropViewStatement.java
@@ -21,7 +21,8 @@ import lombok.Getter;
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
import java.util.LinkedList;
@@ -31,14 +32,14 @@ import java.util.LinkedList;
*/
@Getter
@Setter
-public final class DropViewStatement extends AbstractSQLStatement implements
DDLStatement, TableAvailableSQLStatement {
+public final class DropViewStatement extends AbstractSQLStatement implements
DDLStatement {
private final Collection<SimpleTableSegment> views = new LinkedList<>();
private boolean ifExists;
@Override
- public Collection<SimpleTableSegment> getTables() {
- return views;
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(views));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/PrepareStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/PrepareStatement.java
index 6ae6b5f8f15..6b8744fe825 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/PrepareStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/PrepareStatement.java
@@ -20,16 +20,14 @@ package
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl;
import lombok.Getter;
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtractor;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateStatement;
-import java.util.Collection;
-import java.util.LinkedList;
import java.util.Optional;
/**
@@ -37,7 +35,7 @@ import java.util.Optional;
*/
@Getter
@Setter
-public final class PrepareStatement extends AbstractSQLStatement implements
DDLStatement, TableAvailableSQLStatement {
+public final class PrepareStatement extends AbstractSQLStatement implements
DDLStatement {
private SelectStatement select;
@@ -84,12 +82,12 @@ public final class PrepareStatement extends
AbstractSQLStatement implements DDLS
}
@Override
- public Collection<SimpleTableSegment> getTables() {
+ public SQLStatementAttributes getAttributes() {
TableExtractor tableExtractor = new TableExtractor();
Optional.ofNullable(select).ifPresent(tableExtractor::extractTablesFromSelect);
Optional.ofNullable(insert).ifPresent(tableExtractor::extractTablesFromInsert);
Optional.ofNullable(update).ifPresent(tableExtractor::extractTablesFromUpdate);
Optional.ofNullable(delete).ifPresent(tableExtractor::extractTablesFromDelete);
- return new LinkedList<>(tableExtractor.getRewriteTables());
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tableExtractor.getRewriteTables()));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
index b62e098ddda..fa13e689351 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/RenameTableStatement.java
@@ -22,7 +22,8 @@ import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
import java.util.LinkedList;
@@ -32,17 +33,17 @@ import java.util.LinkedList;
*/
@RequiredArgsConstructor
@Getter
-public final class RenameTableStatement extends AbstractSQLStatement
implements DDLStatement, TableAvailableSQLStatement {
+public final class RenameTableStatement extends AbstractSQLStatement
implements DDLStatement {
private final Collection<RenameTableDefinitionSegment> renameTables;
@Override
- public Collection<SimpleTableSegment> getTables() {
- Collection<SimpleTableSegment> result = new LinkedList<>();
+ public SQLStatementAttributes getAttributes() {
+ Collection<SimpleTableSegment> tables = new LinkedList<>();
for (RenameTableDefinitionSegment each : renameTables) {
- result.add(each.getTable());
- result.add(each.getRenameTable());
+ tables.add(each.getTable());
+ tables.add(each.getRenameTable());
}
- return result;
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/TruncateStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/TruncateStatement.java
index 3acd02f0c9a..5820efd454f 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/TruncateStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/TruncateStatement.java
@@ -20,7 +20,8 @@ package
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl;
import lombok.Getter;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
import java.util.LinkedList;
@@ -29,7 +30,12 @@ import java.util.LinkedList;
* Truncate table statement.
*/
@Getter
-public final class TruncateStatement extends AbstractSQLStatement implements
DDLStatement, TableAvailableSQLStatement {
+public final class TruncateStatement extends AbstractSQLStatement implements
DDLStatement {
private final Collection<SimpleTableSegment> tables = new LinkedList<>();
+
+ @Override
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
+ }
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
index d2d95baa26f..87058d0d73f 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
@@ -23,7 +23,8 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.Co
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import java.util.Collection;
import java.util.Collections;
@@ -34,7 +35,7 @@ import java.util.Optional;
*/
@RequiredArgsConstructor
@Getter
-public final class CopyStatement extends AbstractSQLStatement implements
DMLStatement, TableAvailableSQLStatement {
+public final class CopyStatement extends AbstractSQLStatement implements
DMLStatement {
private final SimpleTableSegment table;
@@ -61,7 +62,7 @@ public final class CopyStatement extends AbstractSQLStatement
implements DMLStat
}
@Override
- public Collection<SimpleTableSegment> getTables() {
- return null == table ? Collections.emptyList() :
Collections.singletonList(table);
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new TableSQLStatementAttribute(null
== table ? Collections.emptyList() : Collections.singletonList(table)));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
index 85534e1aace..b6e739a67e9 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
@@ -21,22 +21,20 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
-
-import java.util.Collection;
-import java.util.Collections;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
/**
* Load data statement.
*/
@RequiredArgsConstructor
@Getter
-public final class LoadDataStatement extends AbstractSQLStatement implements
DMLStatement, TableAvailableSQLStatement {
+public final class LoadDataStatement extends AbstractSQLStatement implements
DMLStatement {
private final SimpleTableSegment table;
@Override
- public Collection<SimpleTableSegment> getTables() {
- return Collections.singleton(table);
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(table));
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
index 0dde94e2609..773ae8b742c 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
@@ -21,22 +21,20 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
-
-import java.util.Collection;
-import java.util.Collections;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
/**
* Load xml statement.
*/
@RequiredArgsConstructor
@Getter
-public final class LoadXMLStatement extends AbstractSQLStatement implements
DMLStatement, TableAvailableSQLStatement {
+public final class LoadXMLStatement extends AbstractSQLStatement implements
DMLStatement {
private final SimpleTableSegment table;
@Override
- public Collection<SimpleTableSegment> getTables() {
- return Collections.singleton(table);
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(table));
}
}
diff --git
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLFlushStatement.java
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLFlushStatement.java
index 5eca78ec96c..7e971af146c 100644
---
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLFlushStatement.java
+++
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLFlushStatement.java
@@ -21,7 +21,8 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
import java.util.Collection;
@@ -31,9 +32,14 @@ import java.util.Collection;
*/
@RequiredArgsConstructor
@Getter
-public final class MySQLFlushStatement extends AbstractSQLStatement implements
DALStatement, TableAvailableSQLStatement {
+public final class MySQLFlushStatement extends AbstractSQLStatement implements
DALStatement {
private final Collection<SimpleTableSegment> tables;
private final boolean flushTable;
+
+ @Override
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
+ }
}
diff --git
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLOptimizeTableStatement.java
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLOptimizeTableStatement.java
index 1f7c632724f..39d2f055a78 100644
---
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLOptimizeTableStatement.java
+++
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLOptimizeTableStatement.java
@@ -21,7 +21,8 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
import java.util.Collection;
@@ -31,7 +32,12 @@ import java.util.Collection;
*/
@RequiredArgsConstructor
@Getter
-public final class MySQLOptimizeTableStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
+public final class MySQLOptimizeTableStatement extends AbstractSQLStatement
implements DALStatement {
private final Collection<SimpleTableSegment> tables;
+
+ @Override
+ public SQLStatementAttributes getAttributes() {
+ return new SQLStatementAttributes(new
TableSQLStatementAttribute(tables));
+ }
}
diff --git
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLDescribeStatement.java
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLDescribeStatement.java
index 989d627811a..b0bede5085e 100644
---
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLDescribeStatement.java
+++
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLDescribeStatement.java
@@ -22,13 +22,11 @@ import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.ColumnInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.ColumnInResultSetSQLStatementAttribute;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Optional;
/**
@@ -36,7 +34,7 @@ import java.util.Optional;
*/
@RequiredArgsConstructor
@Getter
-public final class MySQLDescribeStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
+public final class MySQLDescribeStatement extends AbstractSQLStatement
implements DALStatement {
private final SimpleTableSegment table;
@@ -51,13 +49,8 @@ public final class MySQLDescribeStatement extends
AbstractSQLStatement implement
return Optional.ofNullable(columnWildcard);
}
- @Override
- public Collection<SimpleTableSegment> getTables() {
- return Collections.singleton(table);
- }
-
@Override
public SQLStatementAttributes getAttributes() {
- return new SQLStatementAttributes(new
ColumnInResultSetSQLStatementAttribute(1));
+ return new SQLStatementAttributes(new
ColumnInResultSetSQLStatementAttribute(1), new
TableSQLStatementAttribute(table));
}
}
diff --git
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLShowColumnsStatement.java
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLShowColumnsStatement.java
index e3447c6cbf0..de86e522971 100644
---
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLShowColumnsStatement.java
+++
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLShowColumnsStatement.java
@@ -26,11 +26,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.ColumnInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.FromDatabaseSQLStatementAttribute;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Optional;
/**
@@ -38,7 +36,7 @@ import java.util.Optional;
*/
@RequiredArgsConstructor
@Getter
-public final class MySQLShowColumnsStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
+public final class MySQLShowColumnsStatement extends AbstractSQLStatement
implements DALStatement {
private final SimpleTableSegment table;
@@ -64,13 +62,8 @@ public final class MySQLShowColumnsStatement extends
AbstractSQLStatement implem
return Optional.ofNullable(filter);
}
- @Override
- public Collection<SimpleTableSegment> getTables() {
- return Collections.singleton(table);
- }
-
@Override
public SQLStatementAttributes getAttributes() {
- return new SQLStatementAttributes(new
ColumnInResultSetSQLStatementAttribute(1), new
FromDatabaseSQLStatementAttribute(fromDatabase));
+ return new SQLStatementAttributes(new
ColumnInResultSetSQLStatementAttribute(1), new
FromDatabaseSQLStatementAttribute(fromDatabase), new
TableSQLStatementAttribute(table));
}
}
diff --git
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/index/MySQLShowIndexStatement.java
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/index/MySQLShowIndexStatement.java
index d4eb0bd3eaa..688e57c3804 100644
---
a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/index/MySQLShowIndexStatement.java
+++
b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/index/MySQLShowIndexStatement.java
@@ -24,11 +24,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.FromDatabaseSQLStatementAttribute;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Optional;
/**
@@ -36,7 +34,7 @@ import java.util.Optional;
*/
@RequiredArgsConstructor
@Getter
-public final class MySQLShowIndexStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
+public final class MySQLShowIndexStatement extends AbstractSQLStatement
implements DALStatement {
private final SimpleTableSegment table;
@@ -51,13 +49,8 @@ public final class MySQLShowIndexStatement extends
AbstractSQLStatement implemen
return Optional.ofNullable(fromDatabase);
}
- @Override
- public Collection<SimpleTableSegment> getTables() {
- return Collections.singleton(table);
- }
-
@Override
public SQLStatementAttributes getAttributes() {
- return new SQLStatementAttributes(new
FromDatabaseSQLStatementAttribute(fromDatabase));
+ return new SQLStatementAttributes(new
FromDatabaseSQLStatementAttribute(fromDatabase), new
TableSQLStatementAttribute(table));
}
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index 13df7b8ead2..00aa11c6f4e 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -48,6 +48,8 @@ import
org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.TruncateStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertStatement;
@@ -254,7 +256,7 @@ class ProxySQLExecutorTest {
private SQLStatementContext createTruncateStatementContext(final
DatabaseType databaseType) {
TruncateStatement sqlStatement = mock(TruncateStatement.class);
-
when(sqlStatement.getTables()).thenReturn(Collections.singletonList(new
SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order")))));
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableSQLStatementAttribute(new
SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))));
return new CommonSQLStatementContext(databaseType, sqlStatement);
}