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));
     }
 }

Reply via email to