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