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 2d6559d56af Fix generated key with upper case column name (#29485)
2d6559d56af is described below

commit 2d6559d56afba1df07ce0c356a5dbb4cad4980b7
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Dec 21 19:40:42 2023 +0800

    Fix generated key with upper case column name (#29485)
    
    * Fix generated key with upper case column name
    
    * Fix generated key with upper case column name
    
    * Fix generated key with upper case column name
---
 .../insert/keygen/engine/GeneratedKeyContextEngine.java  |  3 ++-
 .../keygen/engine/GeneratedKeyContextEngineTest.java     | 16 ++++++++++++++--
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngine.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngine.java
index 478df7cf50c..9d801f98ea8 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngine.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngine.java
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.engine;
 
+import com.cedarsoftware.util.CaseInsensitiveSet;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.GeneratedKeyContext;
 import 
org.apache.shardingsphere.infra.binder.context.segment.insert.values.InsertValueContext;
@@ -71,7 +72,7 @@ public final class GeneratedKeyContextEngine {
     
     private boolean containsGenerateKey(final List<String> insertColumnNames, 
final String generateKeyColumnName) {
         return insertColumnNames.isEmpty() ? 
schema.getVisibleColumnNames(insertStatement.getTable().getTableName().getIdentifier().getValue()).size()
 == getValueCountForPerGroup()
-                : insertColumnNames.contains(generateKeyColumnName);
+                : new 
CaseInsensitiveSet<>(insertColumnNames).contains(generateKeyColumnName);
     }
     
     private int getValueCountForPerGroup() {
diff --git 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngineTest.java
 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngineTest.java
index 7b2c47bff73..467b57276de 100644
--- 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngineTest.java
+++ 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/keygen/engine/GeneratedKeyContextEngineTest.java
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.engine;
 
+import com.google.common.collect.ImmutableMap;
 import 
org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.GeneratedKeyContext;
 import 
org.apache.shardingsphere.infra.binder.context.segment.insert.values.InsertValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
@@ -61,7 +62,9 @@ class GeneratedKeyContextEngineTest {
     void setUp() {
         ShardingSphereTable table = new ShardingSphereTable(
                 "tbl", Collections.singletonList(new 
ShardingSphereColumn("id", Types.INTEGER, true, true, false, true, false, 
false)), Collections.emptyList(), Collections.emptyList());
-        schema = new ShardingSphereSchema(Collections.singletonMap("tbl", 
table), Collections.emptyMap());
+        ShardingSphereTable table2 = new ShardingSphereTable(
+                "tbl2", Collections.singletonList(new 
ShardingSphereColumn("ID", Types.INTEGER, true, true, false, true, false, 
false)), Collections.emptyList(), Collections.emptyList());
+        schema = new ShardingSphereSchema(ImmutableMap.of(table.getName(), 
table, table2.getName(), table2), Collections.emptyMap());
     }
     
     @Test
@@ -101,6 +104,11 @@ class GeneratedKeyContextEngineTest {
         
assertCreateGenerateKeyContextWhenCreateWithGenerateKeyColumnConfiguration(new 
MySQLInsertStatement());
     }
     
+    @Test
+    void 
assertCreateGenerateKeyContextWhenCreateWithGenerateUpperCaseKeyColumnConfigurationForMySQL2()
 {
+        
assertCreateGenerateKeyContextWhenCreateWithGenerateKeyColumnConfiguration(new 
MySQLInsertStatement(), "tbl2");
+    }
+    
     @Test
     void 
assertCreateGenerateKeyContextWhenCreateWithGenerateKeyColumnConfigurationForOracle()
 {
         
assertCreateGenerateKeyContextWhenCreateWithGenerateKeyColumnConfiguration(new 
OracleInsertStatement());
@@ -122,7 +130,11 @@ class GeneratedKeyContextEngineTest {
     }
     
     private void 
assertCreateGenerateKeyContextWhenCreateWithGenerateKeyColumnConfiguration(final
 InsertStatement insertStatement) {
-        insertStatement.setTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("tbl"))));
+        
assertCreateGenerateKeyContextWhenCreateWithGenerateKeyColumnConfiguration(insertStatement,
 "tbl");
+    }
+    
+    private void 
assertCreateGenerateKeyContextWhenCreateWithGenerateKeyColumnConfiguration(final
 InsertStatement insertStatement, final String tableName) {
+        insertStatement.setTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue(tableName))));
         insertStatement.setInsertColumns(new InsertColumnsSegment(0, 0, 
Collections.singletonList(new ColumnSegment(0, 0, new IdentifierValue("id")))));
         List<ExpressionSegment> expressionSegments = 
Collections.singletonList(new LiteralExpressionSegment(0, 0, 1));
         InsertValueContext insertValueContext = new 
InsertValueContext(expressionSegments, Collections.emptyList(), 0);

Reply via email to