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