This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 e436e48 fixbug: columnMatchTableAndCheckAmbiguous on same
simpleTableSegment but alias (#13485)
e436e48 is described below
commit e436e48487ab1bf4aa50976965bfbfbb36b97764
Author: cheese8 <[email protected]>
AuthorDate: Sun Nov 7 07:27:07 2021 +0800
fixbug: columnMatchTableAndCheckAmbiguous on same simpleTableSegment but
alias (#13485)
* fixbug: columnMatchTableAndCheckAmbiguous on same simpleTableSegment but
alias
* fix checkstyle
* fix checkstyle
* fix checkstyle
---
.../impl/EncryptProjectionTokenGenerator.java | 4 +--
.../impl/EncryptProjectionTokenGeneratorTest.java | 33 +++++++++++++++++++---
2 files changed, 31 insertions(+), 6 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/impl/EncryptProjectionTokenGenerator.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/impl/EncryptProjectionTokenGenerator.java
index b43d874..385861f 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/impl/EncryptProjectionTokenGenerator.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/impl/EncryptProjectionTokenGenerator.java
@@ -115,7 +115,7 @@ public final class EncryptProjectionTokenGenerator extends
BaseEncryptSQLTokenGe
if (!columnProjectionSegment.getColumn().getOwner().isPresent()) {
return false;
}
- return
selectStatementContext.getTablesContext().getAllUniqueTables().stream().anyMatch(table
-> tableName.equals(table.getTableName().getIdentifier().getValue())
+ return
selectStatementContext.getTablesContext().getOriginalTables().stream().anyMatch(table
-> tableName.equals(table.getTableName().getIdentifier().getValue())
&& table.getAlias().isPresent() &&
columnProjectionSegment.getColumn().getOwner().get().getIdentifier().getValue().equals(table.getAlias().get()));
}
@@ -123,7 +123,7 @@ public final class EncryptProjectionTokenGenerator extends
BaseEncryptSQLTokenGe
if (!columnProjectionSegment.getColumn().getOwner().isPresent()) {
return false;
}
- return
selectStatementContext.getTablesContext().getAllUniqueTables().stream().anyMatch(table
-> tableName.equals(table.getTableName().getIdentifier().getValue())
+ return
selectStatementContext.getTablesContext().getOriginalTables().stream().anyMatch(table
-> tableName.equals(table.getTableName().getIdentifier().getValue())
&& !table.getAlias().isPresent() &&
columnProjectionSegment.getColumn().getOwner().get().getIdentifier().getValue().equals(tableName));
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptProjectionTokenGeneratorTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptProjectionTokenGeneratorTest.java
index a555ea0..4f88654 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptProjectionTokenGeneratorTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptProjectionTokenGeneratorTest.java
@@ -25,8 +25,10 @@ import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.Substituta
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.Before;
import org.junit.Rule;
@@ -63,9 +65,31 @@ public final class EncryptProjectionTokenGeneratorTest {
ProjectionsSegment projectionsSegment = mock(ProjectionsSegment.class);
SelectStatementContext sqlStatementContext =
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(sqlStatementContext.getSqlStatement().getProjections()).thenReturn(projectionsSegment);
+ SimpleTableSegment doctor = new SimpleTableSegment(new
TableNameSegment(1, 7, new IdentifierValue("doctor")));
+ doctor.setAlias(new AliasSegment(8, 9, new IdentifierValue("a")));
+ SimpleTableSegment doctor1 = new SimpleTableSegment(new
TableNameSegment(10, 17, new IdentifierValue("doctor1")));
+
when(sqlStatementContext.getTablesContext().getOriginalTables()).thenReturn(Arrays.asList(doctor,
doctor1));
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Arrays.asList("doctor",
"doctor1"));
- List<SimpleTableSegment> allUniqueTables = buildAllUniqueTables();
-
when(sqlStatementContext.getTablesContext().getAllUniqueTables()).thenReturn(allUniqueTables);
+ IdentifierValue identifierValue = new IdentifierValue("mobile");
+ ColumnSegment columnSegment = new ColumnSegment(0, 0, identifierValue);
+ OwnerSegment ownerSegment = new OwnerSegment(0, 0, new
IdentifierValue("a"));
+ columnSegment.setOwner(ownerSegment);
+ ColumnProjectionSegment columnProjectionSegment = new
ColumnProjectionSegment(columnSegment);
+
when(projectionsSegment.getProjections()).thenReturn(Collections.singletonList(columnProjectionSegment));
+ Collection<SubstitutableColumnNameToken> tokens =
encryptProjectionTokenGenerator.generateSQLTokens(sqlStatementContext);
+ assertThat(tokens.size(), is(1));
+ }
+
+ @Test
+ public void assertOwnerExistsMatchTableAliasGenerateSQLTokens2() {
+ ProjectionsSegment projectionsSegment = mock(ProjectionsSegment.class);
+ SelectStatementContext sqlStatementContext =
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
+
when(sqlStatementContext.getSqlStatement().getProjections()).thenReturn(projectionsSegment);
+ SimpleTableSegment doctor = new SimpleTableSegment(new
TableNameSegment(1, 7, new IdentifierValue("doctor")));
+ doctor.setAlias(new AliasSegment(8, 9, new IdentifierValue("a")));
+ SimpleTableSegment doctor1 = new SimpleTableSegment(new
TableNameSegment(10, 17, new IdentifierValue("doctor")));
+
when(sqlStatementContext.getTablesContext().getOriginalTables()).thenReturn(Arrays.asList(doctor,
doctor1));
+
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Arrays.asList("doctor"));
IdentifierValue identifierValue = new IdentifierValue("mobile");
ColumnSegment columnSegment = new ColumnSegment(0, 0, identifierValue);
OwnerSegment ownerSegment = new OwnerSegment(0, 0, new
IdentifierValue("a"));
@@ -81,9 +105,10 @@ public final class EncryptProjectionTokenGeneratorTest {
ProjectionsSegment projectionsSegment = mock(ProjectionsSegment.class);
SelectStatementContext sqlStatementContext =
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(sqlStatementContext.getSqlStatement().getProjections()).thenReturn(projectionsSegment);
+ SimpleTableSegment doctor = new SimpleTableSegment(new
TableNameSegment(1, 7, new IdentifierValue("doctor")));
+ SimpleTableSegment doctor1 = new SimpleTableSegment(new
TableNameSegment(10, 17, new IdentifierValue("doctor1")));
+
when(sqlStatementContext.getTablesContext().getOriginalTables()).thenReturn(Arrays.asList(doctor,
doctor1));
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Arrays.asList("doctor",
"doctor1"));
- List<SimpleTableSegment> allUniqueTables = buildAllUniqueTables(false);
-
when(sqlStatementContext.getTablesContext().getAllUniqueTables()).thenReturn(allUniqueTables);
IdentifierValue identifierValue = new IdentifierValue("mobile");
ColumnSegment columnSegment = new ColumnSegment(0, 0, identifierValue);
OwnerSegment ownerSegment = new OwnerSegment(0, 0, new
IdentifierValue("doctor"));