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 d996d0a   fix issue[14566]: TablesContext#findTableNameFromMetaData() 
can not find the correct table name for column names when column names are in 
upper case. #14575 (#14587)
d996d0a is described below

commit d996d0a33ba99bdd6cdecbfbb3b7726c87df3705
Author: setamv <[email protected]>
AuthorDate: Fri Jan 7 11:54:10 2022 +0800

     fix issue[14566]: TablesContext#findTableNameFromMetaData() can not find 
the correct table name for column names when column names are in upper case. 
#14575 (#14587)
    
    * fix issue[14566]: TablesContext#findTableNameFromMetaData() can not find 
the correct table name for column names when column names are in upper case.
    
    * fix issue[14566]: TablesContext#findTableNameFromMetaData() can not find 
the correct table name for column names when column names are in upper case.
    
    * keep indents consistent with the previous one.
    
    Co-authored-by: luowei <[email protected]>
---
 .../infra/binder/segment/table/TablesContext.java       |  4 ++--
 .../infra/binder/segment/table/TablesContextTest.java   | 17 +++++++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
index 2c2656d..1388e6d 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
@@ -34,7 +34,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
+import java.util.TreeSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -122,7 +122,7 @@ public final class TablesContext {
         }
         Map<String, String> result = new HashMap<>(columns.size(), 1);
         result.putAll(findTableNameFromSQL(getOwnerColumnNames(columns)));
-        Collection<String> columnNames = new LinkedHashSet<>();
+        Collection<String> columnNames = new 
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
         for (ColumnProjection each : columns) {
             if (null == each.getOwner()) {
                 columnNames.add(each.getName());
diff --git 
a/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContextTest.java
 
b/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContextTest.java
index b652682..fd8f004 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContextTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContextTest.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.infra.binder.segment.table;
 import com.google.common.collect.Sets;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
+import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
 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;
@@ -30,6 +32,7 @@ import org.junit.Test;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertFalse;
@@ -94,6 +97,20 @@ public final class TablesContextTest {
         assertThat(actual.get("col"), is("table_1"));
     }
     
+    @Test
+    public void 
assertFindTableNameWhenColumnSegmentOwnerAbsentAndSchemaMetaDataContainsColumnInUpperCase()
 {
+        SimpleTableSegment tableSegment1 = createTableSegment("TABLE_1", 
"TBL_1");
+        SimpleTableSegment tableSegment2 = createTableSegment("TABLE_2", 
"TBL_2");
+        TableMetaData tableMetaData = new TableMetaData("TABLE_1",
+                Arrays.asList(new ColumnMetaData("COL", 0, false, false, 
true)),
+                Collections.EMPTY_LIST);
+        ShardingSphereSchema schema = new 
ShardingSphereSchema(Arrays.asList(tableMetaData).stream().collect(Collectors.toMap(TableMetaData::getName,
 v -> v)));
+        ColumnProjection columnProjection = createColumnProjection(null, 
"COL", null);
+        Map<String, String> actual = new 
TablesContext(Arrays.asList(tableSegment1, 
tableSegment2)).findTableName(Collections.singletonList(columnProjection), 
schema);
+        assertFalse(actual.isEmpty());
+        assertThat(actual.get("col"), is("TABLE_1"));
+    }
+    
     private SimpleTableSegment createTableSegment(final String tableName, 
final String alias) {
         SimpleTableSegment result = new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue(tableName)));
         AliasSegment aliasSegment = new AliasSegment(0, 0, new 
IdentifierValue(alias));

Reply via email to