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 2032ced1813 [Issue #20366] (#20887)
2032ced1813 is described below

commit 2032ced1813208a452d8a134010d7792057dc312
Author: Abhinav Koppula <[email protected]>
AuthorDate: Fri Sep 9 08:26:27 2022 +0530

    [Issue #20366] (#20887)
    
    - Refactor existing tests of InsertStatementHandler
    - Improve coverage of InsertStatementHandler
---
 .../handler/dml/InsertStatementHandlerTest.java    | 137 +++++++++++++++++----
 1 file changed, 110 insertions(+), 27 deletions(-)

diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
index 7ea505a3965..2004095e905 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandlerTest.java
@@ -17,95 +17,178 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml;
 
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.dml.OpenGaussInsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleInsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleSelectStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dml.PostgreSQLInsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sql92.dml.SQL92InsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dml.SQLServerInsertStatement;
 import org.junit.Test;
 
 import java.util.Collections;
 import java.util.Optional;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
 public final class InsertStatementHandlerTest {
     
     @Test
-    public void 
assertGetOnDuplicateKeyColumnsSegmentWithOnDuplicateKeyColumnsSegmentForMySQL() 
{
+    public void assertGetOnDuplicateKeyColumnsSegmentForMySQL() {
         MySQLInsertStatement insertStatement = new MySQLInsertStatement();
         insertStatement.setOnDuplicateKeyColumns(new 
OnDuplicateKeyColumnsSegment(0, 0, Collections.emptyList()));
         Optional<OnDuplicateKeyColumnsSegment> onDuplicateKeyColumnsSegment = 
InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement);
         assertTrue(onDuplicateKeyColumnsSegment.isPresent());
+        assertThat(onDuplicateKeyColumnsSegment.get(), 
is(insertStatement.getOnDuplicateKeyColumns().get()));
+        assertFalse(InsertStatementHandler.getOnDuplicateKeyColumnsSegment(new 
MySQLInsertStatement()).isPresent());
     }
     
     @Test
-    public void 
assertGetOnDuplicateKeyColumnsSegmentWithoutOnDuplicateKeyColumnsSegmentForMySQL()
 {
-        MySQLInsertStatement insertStatement = new MySQLInsertStatement();
+    public void assertGetOnDuplicateKeyColumnsSegmentForOpenGauss() {
+        OpenGaussInsertStatement insertStatement = new 
OpenGaussInsertStatement();
+        insertStatement.setOnDuplicateKeyColumnsSegment(new 
OnDuplicateKeyColumnsSegment(0, 0, Collections.emptyList()));
         Optional<OnDuplicateKeyColumnsSegment> onDuplicateKeyColumnsSegment = 
InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement);
-        assertFalse(onDuplicateKeyColumnsSegment.isPresent());
+        assertTrue(onDuplicateKeyColumnsSegment.isPresent());
+        assertThat(onDuplicateKeyColumnsSegment.get(), 
is(insertStatement.getOnDuplicateKeyColumns().get()));
+        assertFalse(InsertStatementHandler.getOnDuplicateKeyColumnsSegment(new 
OpenGaussInsertStatement()).isPresent());
     }
     
     @Test
-    public void 
assertGetOnDuplicateKeyColumnsSegmentWithOnDuplicateKeyColumnsSegmentForOpenGauss()
 {
-        OpenGaussInsertStatement insertStatement = new 
OpenGaussInsertStatement();
+    public void assertGetOnDuplicateKeyColumnsSegmentForPostgreSQL() {
+        PostgreSQLInsertStatement insertStatement = new 
PostgreSQLInsertStatement();
         insertStatement.setOnDuplicateKeyColumnsSegment(new 
OnDuplicateKeyColumnsSegment(0, 0, Collections.emptyList()));
         Optional<OnDuplicateKeyColumnsSegment> onDuplicateKeyColumnsSegment = 
InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement);
         assertTrue(onDuplicateKeyColumnsSegment.isPresent());
+        assertThat(onDuplicateKeyColumnsSegment.get(), 
is(insertStatement.getOnDuplicateKeyColumns().get()));
+        assertFalse(InsertStatementHandler.getOnDuplicateKeyColumnsSegment(new 
PostgreSQLInsertStatement()).isPresent());
     }
     
     @Test
-    public void 
assertGetOnDuplicateKeyColumnsSegmentWithoutOnDuplicateKeyColumnsSegmentForOpenGauss()
 {
-        OpenGaussInsertStatement insertStatement = new 
OpenGaussInsertStatement();
-        Optional<OnDuplicateKeyColumnsSegment> onDuplicateKeyColumnsSegment = 
InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement);
-        assertFalse(onDuplicateKeyColumnsSegment.isPresent());
+    public void assertGetOnDuplicateKeyColumnsSegmentForOtherDatabases() {
+        assertFalse(InsertStatementHandler.getOnDuplicateKeyColumnsSegment(new 
OracleInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getOnDuplicateKeyColumnsSegment(new 
SQL92InsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getOnDuplicateKeyColumnsSegment(new 
SQLServerInsertStatement()).isPresent());
     }
     
     @Test
-    public void 
assertGetSetAssignmentSegmentWithSetAssignmentSegmentForMySQL() {
+    public void assertGetSetAssignmentSegmentForMySQL() {
         MySQLInsertStatement insertStatement = new MySQLInsertStatement();
         insertStatement.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.emptyList()));
         Optional<SetAssignmentSegment> setAssignmentSegment = 
InsertStatementHandler.getSetAssignmentSegment(insertStatement);
         assertTrue(setAssignmentSegment.isPresent());
+        assertThat(setAssignmentSegment.get(), 
is(insertStatement.getSetAssignment().get()));
+        assertFalse(InsertStatementHandler.getSetAssignmentSegment(new 
MySQLInsertStatement()).isPresent());
     }
     
     @Test
-    public void 
assertGetSetAssignmentSegmentWithoutSetAssignmentSegmentForMySQL() {
-        MySQLInsertStatement insertStatement = new MySQLInsertStatement();
-        Optional<SetAssignmentSegment> setAssignmentSegment = 
InsertStatementHandler.getSetAssignmentSegment(insertStatement);
-        assertFalse(setAssignmentSegment.isPresent());
+    public void assertGetSetAssignmentSegmentForOtherDatabases() {
+        assertFalse(InsertStatementHandler.getSetAssignmentSegment(new 
OpenGaussInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSetAssignmentSegment(new 
OracleInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSetAssignmentSegment(new 
PostgreSQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSetAssignmentSegment(new 
SQL92InsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSetAssignmentSegment(new 
SQLServerInsertStatement()).isPresent());
     }
     
     @Test
-    public void assertGetWithSegmentWithWithSegmentForPostgreSQL() {
+    public void assertGetWithSegmentForPostgreSQL() {
         PostgreSQLInsertStatement insertStatement = new 
PostgreSQLInsertStatement();
         insertStatement.setWithSegment(new WithSegment(0, 0, 
Collections.emptyList()));
         Optional<WithSegment> withSegment = 
InsertStatementHandler.getWithSegment(insertStatement);
         assertTrue(withSegment.isPresent());
+        assertThat(withSegment.get(), 
is(insertStatement.getWithSegment().get()));
+        assertFalse(InsertStatementHandler.getWithSegment(new 
PostgreSQLInsertStatement()).isPresent());
     }
     
     @Test
-    public void assertGetWithSegmentWithoutWithSegmentForPostgreSQL() {
-        PostgreSQLInsertStatement insertStatement = new 
PostgreSQLInsertStatement();
+    public void assertGetWithSegmentForSQLServer() {
+        SQLServerInsertStatement insertStatement = new 
SQLServerInsertStatement();
+        insertStatement.setWithSegment(new WithSegment(0, 0, 
Collections.emptyList()));
         Optional<WithSegment> withSegment = 
InsertStatementHandler.getWithSegment(insertStatement);
-        assertFalse(withSegment.isPresent());
+        assertTrue(withSegment.isPresent());
+        assertThat(withSegment.get(), 
is(insertStatement.getWithSegment().get()));
+        assertFalse(InsertStatementHandler.getWithSegment(new 
SQLServerInsertStatement()).isPresent());
     }
     
     @Test
-    public void assertGetWithSegmentWithWithSegmentForSQLServer() {
-        SQLServerInsertStatement insertStatement = new 
SQLServerInsertStatement();
+    public void assertGetWithSegmentForOpenGauss() {
+        OpenGaussInsertStatement insertStatement = new 
OpenGaussInsertStatement();
         insertStatement.setWithSegment(new WithSegment(0, 0, 
Collections.emptyList()));
         Optional<WithSegment> withSegment = 
InsertStatementHandler.getWithSegment(insertStatement);
         assertTrue(withSegment.isPresent());
+        assertThat(withSegment.get(), 
is(insertStatement.getWithSegment().get()));
+        assertFalse(InsertStatementHandler.getWithSegment(new 
OpenGaussInsertStatement()).isPresent());
     }
     
     @Test
-    public void assertGetWithSegmentWithoutWithSegmentForSQLServer() {
+    public void assertGetWithSegmentForOtherDatabases() {
+        assertFalse(InsertStatementHandler.getWithSegment(new 
MySQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getWithSegment(new 
OracleInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getWithSegment(new 
SQL92InsertStatement()).isPresent());
+    }
+    
+    @Test
+    public void assertGetOutputSegmentForSQLServer() {
         SQLServerInsertStatement insertStatement = new 
SQLServerInsertStatement();
-        Optional<WithSegment> withSegment = 
InsertStatementHandler.getWithSegment(insertStatement);
-        assertFalse(withSegment.isPresent());
+        insertStatement.setOutputSegment(new OutputSegment(0, 0));
+        Optional<OutputSegment> outputSegment = 
InsertStatementHandler.getOutputSegment(insertStatement);
+        assertTrue(outputSegment.isPresent());
+        assertThat(outputSegment.get(), 
is(insertStatement.getOutputSegment().get()));
+        assertFalse(InsertStatementHandler.getOutputSegment(new 
SQLServerInsertStatement()).isPresent());
+    }
+    
+    @Test
+    public void assertGetOutputSegmentForOtherDatabases() {
+        assertFalse(InsertStatementHandler.getOutputSegment(new 
MySQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getOutputSegment(new 
OpenGaussInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getOutputSegment(new 
OracleInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getOutputSegment(new 
PostgreSQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getOutputSegment(new 
SQL92InsertStatement()).isPresent());
+    }
+    
+    @Test
+    public void assertGetInsertMultiTableElementSegmentForOracle() {
+        OracleInsertStatement insertStatement = new OracleInsertStatement();
+        insertStatement.setInsertMultiTableElementSegment(new 
InsertMultiTableElementSegment(0, 0));
+        Optional<InsertMultiTableElementSegment> 
insertMultiTableElementSegment = 
InsertStatementHandler.getInsertMultiTableElementSegment(insertStatement);
+        assertTrue(insertMultiTableElementSegment.isPresent());
+        assertThat(insertMultiTableElementSegment.get(), 
is(insertStatement.getInsertMultiTableElementSegment().get()));
+        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
SQLServerInsertStatement()).isPresent());
+    }
+    
+    @Test
+    public void assertGetInsertMultiTableElementSegmentForOtherDatabases() {
+        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
MySQLInsertStatement()).isPresent());
+        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
OpenGaussInsertStatement()).isPresent());
+        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
PostgreSQLInsertStatement()).isPresent());
+        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
SQL92InsertStatement()).isPresent());
+        
assertFalse(InsertStatementHandler.getInsertMultiTableElementSegment(new 
SQLServerInsertStatement()).isPresent());
+    }
+    
+    @Test
+    public void assertGetSelectSubqueryForOracle() {
+        OracleInsertStatement insertStatement = new OracleInsertStatement();
+        insertStatement.setSelectSubquery(new SubquerySegment(0, 0, new 
OracleSelectStatement()));
+        Optional<SubquerySegment> subquerySegment = 
InsertStatementHandler.getSelectSubquery(insertStatement);
+        assertTrue(subquerySegment.isPresent());
+        assertThat(subquerySegment.get(), 
is(insertStatement.getSelectSubquery().get()));
+        assertFalse(InsertStatementHandler.getSelectSubquery(new 
OracleInsertStatement()).isPresent());
+    }
+    
+    @Test
+    public void assertGetSelectSubqueryForOtherDatabases() {
+        assertFalse(InsertStatementHandler.getSelectSubquery(new 
MySQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSelectSubquery(new 
OpenGaussInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSelectSubquery(new 
PostgreSQLInsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSelectSubquery(new 
SQL92InsertStatement()).isPresent());
+        assertFalse(InsertStatementHandler.getSelectSubquery(new 
SQLServerInsertStatement()).isPresent());
     }
 }

Reply via email to