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 8f522d44e10 Add TableInResultSetSQLStatementAttribute (#35773)
8f522d44e10 is described below
commit 8f522d44e1014ae164e0eac8fcca64da65a33674
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jun 21 15:57:23 2025 +0800
Add TableInResultSetSQLStatementAttribute (#35773)
---
.../encrypt/merge/dal/EncryptDALResultDecorator.java | 4 ++--
.../dal/show/EncryptShowCreateTableMergedResult.java | 5 +++--
.../merge/dal/EncryptDALResultDecoratorTest.java | 7 +++----
.../show/EncryptShowCreateTableMergedResultTest.java | 8 ++++----
.../TableInResultSetSQLStatementAttribute.java} | 18 +++++++++---------
.../core/statement/dal/ShowCreateTableStatement.java | 15 +++------------
6 files changed, 24 insertions(+), 33 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
index b637a21fa53..77ccb6ca7de 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
@@ -27,7 +27,7 @@ import
org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.ColumnInResultSetSQLStatementAttribute;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.TableInResultSetSQLStatementAttribute;
/**
* DAL result decorator for encrypt.
@@ -43,7 +43,7 @@ public final class EncryptDALResultDecorator implements
ResultDecorator<EncryptR
if
(sqlStatement.getAttributes().findAttribute(ColumnInResultSetSQLStatementAttribute.class).isPresent())
{
return new EncryptShowColumnsMergedResult(mergedResult,
sqlStatementContext, rule);
}
- if (sqlStatement instanceof TableInfoInResultSetAvailableSQLStatement)
{
+ if
(sqlStatement.getAttributes().findAttribute(TableInResultSetSQLStatementAttribute.class).isPresent())
{
return new EncryptShowCreateTableMergedResult(globalRuleMetaData,
mergedResult, sqlStatementContext, rule);
}
return mergedResult;
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java
index cd9ba0d071b..daef4e85f1d 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java
@@ -29,7 +29,7 @@ import org.apache.shardingsphere.infra.parser.SQLParserEngine;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.TableInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
import java.sql.SQLException;
@@ -58,7 +58,8 @@ public final class EncryptShowCreateTableMergedResult extends
DecoratorMergedRes
() -> new UnsupportedEncryptSQLException("SHOW CREATE TABLE
FOR MULTI TABLES"));
this.rule = rule;
tableName =
sqlStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue();
- tableNameResultSetIndex = ((TableInfoInResultSetAvailableSQLStatement)
sqlStatementContext.getSqlStatement()).getTableNameResultSetIndex();
+ TableInResultSetSQLStatementAttribute attribute =
sqlStatementContext.getSqlStatement().getAttributes().getAttribute(TableInResultSetSQLStatementAttribute.class);
+ tableNameResultSetIndex = attribute.getNameResultSetIndex();
sqlParserEngine =
globalRuleMetaData.getSingleRule(SQLParserRule.class).getSQLParserEngine(sqlStatementContext.getDatabaseType());
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
index 4f2bfa01e72..4b8cea155c7 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
@@ -32,7 +32,7 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.ColumnInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.TableInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -46,7 +46,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.withSettings;
@ExtendWith(MockitoExtension.class)
class EncryptDALResultDecoratorTest {
@@ -95,8 +94,8 @@ class EncryptDALResultDecoratorTest {
when(result.getDatabaseType()).thenReturn(databaseType);
SimpleTableSegment simpleTableSegment = new SimpleTableSegment(new
TableNameSegment(1, 7, new IdentifierValue("foo_tbl")));
when(result.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(simpleTableSegment));
- SQLStatement sqlStatement = mock(SQLStatement.class,
withSettings().extraInterfaces(TableInfoInResultSetAvailableSQLStatement.class));
- when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes());
+ SQLStatement sqlStatement = mock(SQLStatement.class);
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableInResultSetSQLStatementAttribute(2)));
when(result.getSqlStatement()).thenReturn(sqlStatement);
return result;
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java
index 2fcd06d7a8c..76c55c9edf7 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java
@@ -36,7 +36,8 @@ import org.apache.shardingsphere.sql.parser.api.CacheOption;
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.available.TableInfoInResultSetAvailableSQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.TableInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -58,7 +59,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.withSettings;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
@@ -185,8 +185,8 @@ class EncryptShowCreateTableMergedResultTest {
private EncryptShowCreateTableMergedResult createMergedResult(final
MergedResult mergedResult, final String tableName, final EncryptRule rule) {
CommonSQLStatementContext sqlStatementContext =
mock(CommonSQLStatementContext.class, RETURNS_DEEP_STUBS);
- SQLStatement sqlStatement = mock(SQLStatement.class,
withSettings().extraInterfaces(TableInfoInResultSetAvailableSQLStatement.class).defaultAnswer(RETURNS_DEEP_STUBS));
- when(((TableInfoInResultSetAvailableSQLStatement)
sqlStatement).getTableNameResultSetIndex()).thenReturn(2);
+ SQLStatement sqlStatement = mock(SQLStatement.class,
RETURNS_DEEP_STUBS);
+ when(sqlStatement.getAttributes()).thenReturn(new
SQLStatementAttributes(new TableInResultSetSQLStatementAttribute(2)));
when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
when(sqlStatementContext.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(new
SimpleTableSegment(new TableNameSegment(1, 4, new
IdentifierValue(tableName)))));
when(sqlStatementContext.getDatabaseType()).thenReturn(databaseType);
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableInfoInResultSetAvailableSQLStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/attribute/TableInResultSetSQLStatementAttribute.java
similarity index 75%
rename from
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableInfoInResultSetAvailableSQLStatement.java
rename to
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/attribute/TableInResultSetSQLStatementAttribute.java
index 7d3045d3271..ac13c061c58 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableInfoInResultSetAvailableSQLStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/attribute/TableInResultSetSQLStatementAttribute.java
@@ -15,17 +15,17 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.sql.parser.statement.core.statement.available;
+package
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
/**
- * Table info in result set available SQL statement.
+ * Table in result set SQL statement attribute.
*/
-public interface TableInfoInResultSetAvailableSQLStatement {
+@RequiredArgsConstructor
+@Getter
+public final class TableInResultSetSQLStatementAttribute implements
SQLStatementAttribute {
- /**
- * Get table name result set index.
- *
- * @return table name result set index
- */
- int getTableNameResultSetIndex();
+ private final int nameResultSetIndex;
}
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 b125a19d6e6..0720fcb9744 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
@@ -23,8 +23,8 @@ 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.DatabaseSelectRequiredSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.TableInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailableSQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailableSQLStatement;
import java.util.Collection;
import java.util.Collections;
@@ -34,11 +34,7 @@ import java.util.Collections;
*/
@RequiredArgsConstructor
@Getter
-public final class ShowCreateTableStatement extends AbstractSQLStatement
- implements
- DALStatement,
- TableAvailableSQLStatement,
- TableInfoInResultSetAvailableSQLStatement {
+public final class ShowCreateTableStatement extends AbstractSQLStatement
implements DALStatement, TableAvailableSQLStatement {
private final SimpleTableSegment table;
@@ -47,13 +43,8 @@ public final class ShowCreateTableStatement extends
AbstractSQLStatement
return Collections.singleton(table);
}
- @Override
- public int getTableNameResultSetIndex() {
- return 2;
- }
-
@Override
public SQLStatementAttributes getAttributes() {
- return new SQLStatementAttributes(new
DatabaseSelectRequiredSQLStatementAttribute());
+ return new SQLStatementAttributes(new
DatabaseSelectRequiredSQLStatementAttribute(), new
TableInResultSetSQLStatementAttribute(2));
}
}