You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2024/10/08 12:16:37 UTC
(shardingsphere) branch master updated: Add more test cases on GeneratedKeyInsertColumnTokenGenerator (#33174)
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 28fc93467c0 Add more test cases on GeneratedKeyInsertColumnTokenGenerator (#33174)
28fc93467c0 is described below
commit 28fc93467c02840c0fea7aac2beaebed2a8ac9ee
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue Oct 8 20:16:30 2024 +0800
Add more test cases on GeneratedKeyInsertColumnTokenGenerator (#33174)
* Add more test cases on GeneratedKeyInsertValueParameterRewriter
* Add more test cases on GeneratedKeyInsertValueParameterRewriter
* Add more test cases on GeneratedKeyInsertColumnTokenGenerator
---
.../GeneratedKeyInsertColumnTokenGenerator.java | 15 +++---
...GeneratedKeyInsertColumnTokenGeneratorTest.java | 59 ++++++++++++++++++----
2 files changed, 55 insertions(+), 19 deletions(-)
diff --git a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGenerator.java b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGenerator.java
index c0816bc6d06..bac8e1a393d 100644
--- a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGenerator.java
+++ b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGenerator.java
@@ -31,19 +31,18 @@ import java.util.Optional;
public final class GeneratedKeyInsertColumnTokenGenerator extends BaseGeneratedKeyTokenGenerator {
@Override
- protected boolean isGenerateSQLToken(final InsertStatementContext insertStatementContext) {
- Optional<InsertColumnsSegment> sqlSegment = insertStatementContext.getSqlStatement().getInsertColumns();
- return sqlSegment.isPresent() && !sqlSegment.get().getColumns().isEmpty()
- && insertStatementContext.getGeneratedKeyContext().isPresent()
- && !insertStatementContext.getGeneratedKeyContext().get().getGeneratedValues().isEmpty();
+ protected boolean isGenerateSQLToken(final InsertStatementContext statementContext) {
+ Optional<InsertColumnsSegment> insertColumns = statementContext.getSqlStatement().getInsertColumns();
+ return insertColumns.isPresent() && !insertColumns.get().getColumns().isEmpty()
+ && statementContext.getGeneratedKeyContext().isPresent() && !statementContext.getGeneratedKeyContext().get().getGeneratedValues().isEmpty();
}
@Override
public GeneratedKeyInsertColumnToken generateSQLToken(final InsertStatementContext insertStatementContext) {
Optional<GeneratedKeyContext> generatedKey = insertStatementContext.getGeneratedKeyContext();
Preconditions.checkState(generatedKey.isPresent());
- Optional<InsertColumnsSegment> sqlSegment = insertStatementContext.getSqlStatement().getInsertColumns();
- Preconditions.checkState(sqlSegment.isPresent());
- return new GeneratedKeyInsertColumnToken(sqlSegment.get().getStopIndex(), generatedKey.get().getColumnName());
+ Optional<InsertColumnsSegment> insertColumns = insertStatementContext.getSqlStatement().getInsertColumns();
+ Preconditions.checkState(insertColumns.isPresent());
+ return new GeneratedKeyInsertColumnToken(insertColumns.get().getStopIndex(), generatedKey.get().getColumnName());
}
}
diff --git a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGeneratorTest.java b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGeneratorTest.java
index 7ec8f4b22c3..cb0d42a90ab 100644
--- a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGeneratorTest.java
+++ b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/keygen/generator/GeneratedKeyInsertColumnTokenGeneratorTest.java
@@ -19,31 +19,68 @@ package org.apache.shardingsphere.infra.rewrite.sql.token.keygen.generator;
import org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.GeneratedKeyContext;
import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.InsertColumnsSegment;
import org.junit.jupiter.api.Test;
+import java.util.Collections;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+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;
class GeneratedKeyInsertColumnTokenGeneratorTest {
+ @Test
+ void assertIsNotGenerateSQLTokenWithoutInsertColumns() {
+ InsertStatementContext statementContext = mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+ when(statementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.empty());
+ assertFalse(new GeneratedKeyInsertColumnTokenGenerator().isGenerateSQLToken(statementContext));
+ }
+
+ @Test
+ void assertIsNotGenerateSQLTokenWithEmptyInsertColumns() {
+ InsertStatementContext statementContext = mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+ when(statementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(new InsertColumnsSegment(0, 0, Collections.emptyList())));
+ assertFalse(new GeneratedKeyInsertColumnTokenGenerator().isGenerateSQLToken(statementContext));
+ }
+
+ @Test
+ void assertIsNotGenerateSQLTokenWithoutGeneratedKeyContext() {
+ InsertStatementContext statementContext = mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+ when(statementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(new InsertColumnsSegment(0, 0, Collections.singleton(mock(ColumnSegment.class)))));
+ when(statementContext.getGeneratedKeyContext()).thenReturn(Optional.empty());
+ assertFalse(new GeneratedKeyInsertColumnTokenGenerator().isGenerateSQLToken(statementContext));
+ }
+
+ @Test
+ void assertIsNotGenerateSQLTokenWithEmptyGeneratedValues() {
+ InsertStatementContext statementContext = mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+ when(statementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(new InsertColumnsSegment(0, 0, Collections.singleton(mock(ColumnSegment.class)))));
+ when(statementContext.getGeneratedKeyContext()).thenReturn(Optional.of(new GeneratedKeyContext("foo_col", false)));
+ assertFalse(new GeneratedKeyInsertColumnTokenGenerator().isGenerateSQLToken(statementContext));
+ }
+
+ @Test
+ void assertIsGenerateSQLToken() {
+ InsertStatementContext statementContext = mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+ when(statementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(new InsertColumnsSegment(0, 0, Collections.singleton(mock(ColumnSegment.class)))));
+ GeneratedKeyContext generatedKeyContext = new GeneratedKeyContext("foo_col", false);
+ generatedKeyContext.getGeneratedValues().add(1);
+ when(statementContext.getGeneratedKeyContext()).thenReturn(Optional.of(generatedKeyContext));
+ assertTrue(new GeneratedKeyInsertColumnTokenGenerator().isGenerateSQLToken(statementContext));
+ }
+
@Test
void assertGenerateSQLToken() {
- GeneratedKeyContext generatedKeyContext = mock(GeneratedKeyContext.class);
- final String testColumnName = "TEST_COLUMN_NAME";
- when(generatedKeyContext.getColumnName()).thenReturn(testColumnName);
- InsertStatementContext insertStatementContext = mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
- when(insertStatementContext.getGeneratedKeyContext()).thenReturn(Optional.of(generatedKeyContext));
- InsertColumnsSegment insertColumnsSegment = mock(InsertColumnsSegment.class);
- final int testStopIndex = 4;
- when(insertColumnsSegment.getStopIndex()).thenReturn(testStopIndex);
- when(insertStatementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(insertColumnsSegment));
- GeneratedKeyInsertColumnTokenGenerator generatedKeyInsertColumnTokenGenerator = new GeneratedKeyInsertColumnTokenGenerator();
- assertThat(generatedKeyInsertColumnTokenGenerator.generateSQLToken(insertStatementContext).toString(), is(", " + testColumnName));
+ InsertStatementContext statementContext = mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+ when(statementContext.getGeneratedKeyContext()).thenReturn(Optional.of(new GeneratedKeyContext("foo_col", false)));
+ when(statementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(new InsertColumnsSegment(0, 4, Collections.emptyList())));
+ assertThat(new GeneratedKeyInsertColumnTokenGenerator().generateSQLToken(statementContext).toString(), is(", foo_col"));
}
}