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