This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 210071f5bdf Refactor InsertStatementContext.containsInsertColumns()
(#18974)
210071f5bdf is described below
commit 210071f5bdf639774e4fa47a0f4824f81acbd530
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jul 9 14:54:18 2022 +0800
Refactor InsertStatementContext.containsInsertColumns() (#18974)
* Refactor InsertStatementContext.containsInsertColumns()
* Refactor InsertStatementContext.containsInsertColumns()
---
...stQueryAndPlainInsertColumnsTokenGenerator.java | 6 +---
...ptForUseDefaultInsertColumnsTokenGenerator.java | 4 +--
...eryAndPlainInsertColumnsTokenGeneratorTest.java | 14 ++--------
...eyForUseDefaultInsertColumnsTokenGenerator.java | 2 +-
.../statement/dml/InsertStatementContext.java | 28 +++++++------------
.../statement/impl/InsertStatementContextTest.java | 32 +++++++++++-----------
.../proxy/arguments/BootstrapArgumentsTest.java | 14 +++++-----
.../handler/dml/InsertStatementHandler.java | 5 +---
8 files changed, 40 insertions(+), 65 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
index 961125f5a8a..3d6539a208b 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
@@ -43,11 +43,7 @@ public final class
AssistQueryAndPlainInsertColumnsTokenGenerator implements Col
@Override
public boolean isGenerateSQLToken(final SQLStatementContext<?>
sqlStatementContext) {
- if (sqlStatementContext instanceof InsertStatementContext) {
- InsertStatementContext insertStatementContext =
(InsertStatementContext) sqlStatementContext;
- return
insertStatementContext.getSqlStatement().getInsertColumns().isPresent() &&
!insertStatementContext.useDefaultColumns();
- }
- return false;
+ return sqlStatementContext instanceof InsertStatementContext &&
((InsertStatementContext) sqlStatementContext).containsInsertColumns();
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
index 7cf4b887ada..4c6c9db880c 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
@@ -46,8 +46,8 @@ public final class
EncryptForUseDefaultInsertColumnsTokenGenerator implements Op
private EncryptRule encryptRule;
@Override
- public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
- return sqlStatementContext instanceof InsertStatementContext &&
((InsertStatementContext) sqlStatementContext).useDefaultColumns();
+ public boolean isGenerateSQLToken(final SQLStatementContext<?>
sqlStatementContext) {
+ return sqlStatementContext instanceof InsertStatementContext &&
!((InsertStatementContext) sqlStatementContext).containsInsertColumns();
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
index 5260a2a43ce..58907728fec 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
@@ -24,7 +24,6 @@ import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.InsertColumnsToken;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.InsertColumnsSegment;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
@@ -52,22 +51,13 @@ public class
AssistQueryAndPlainInsertColumnsTokenGeneratorTest {
@Test
public void assertIsNotGenerateSQLTokenWithoutInsertColumns() {
InsertStatementContext insertStatementContext =
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
-
when(insertStatementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.empty());
assertFalse(new
AssistQueryAndPlainInsertColumnsTokenGenerator().isGenerateSQLToken(insertStatementContext));
}
@Test
- public void assertIsNotGenerateSQLTokenWithDefaultColumns() {
+ public void assertIsGenerateSQLTokenWithInsertColumns() {
InsertStatementContext insertStatementContext =
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
-
when(insertStatementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(mock(InsertColumnsSegment.class)));
- when(insertStatementContext.useDefaultColumns()).thenReturn(true);
- assertFalse(new
AssistQueryAndPlainInsertColumnsTokenGenerator().isGenerateSQLToken(insertStatementContext));
- }
-
- @Test
- public void assertIsGenerateSQLToken() {
- InsertStatementContext insertStatementContext =
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
-
when(insertStatementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(mock(InsertColumnsSegment.class)));
+ when(insertStatementContext.containsInsertColumns()).thenReturn(true);
assertTrue(new
AssistQueryAndPlainInsertColumnsTokenGenerator().isGenerateSQLToken(insertStatementContext));
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/keygen/GeneratedKeyForUseDefaultInsertColumnsTokenGenerator.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/keygen/GeneratedKeyForUseDefaultInsertColumnsTokenGenerator.java
index 6b772d5b804..3eb1b98ccae 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/keygen/GeneratedKeyForUseDefaultInsertColumnsTokenGenerator.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/keygen/GeneratedKeyForUseDefaultInsertColumnsTokenGenerator.java
@@ -34,7 +34,7 @@ public final class
GeneratedKeyForUseDefaultInsertColumnsTokenGenerator extends
@Override
protected boolean isGenerateSQLToken(final InsertStatementContext
insertStatementContext) {
- return insertStatementContext.useDefaultColumns();
+ return !insertStatementContext.containsInsertColumns();
}
@Override
diff --git
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementContext.java
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementContext.java
index aeea3f77dac..f06cf047e88 100644
---
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementContext.java
+++
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementContext.java
@@ -92,9 +92,8 @@ public final class InsertStatementContext extends
CommonSQLStatementContext<Inse
onDuplicateKeyUpdateValueContext =
getOnDuplicateKeyUpdateValueContext(parameters, parametersOffset).orElse(null);
tablesContext = new TablesContext(getAllSimpleTableSegments(),
getDatabaseType());
ShardingSphereSchema schema = getSchema(databases,
defaultDatabaseName);
- columnNames = useDefaultColumns() ?
schema.getAllColumnNames(sqlStatement.getTable().getTableName().getIdentifier().getValue())
: insertColumnNames;
- generatedKeyContext = new GeneratedKeyContextEngine(sqlStatement,
schema)
- .createGenerateKeyContext(insertColumnNames,
getAllValueExpressions(sqlStatement), parameters).orElse(null);
+ columnNames = containsInsertColumns() ? insertColumnNames :
schema.getAllColumnNames(sqlStatement.getTable().getTableName().getIdentifier().getValue());
+ generatedKeyContext = new GeneratedKeyContextEngine(sqlStatement,
schema).createGenerateKeyContext(insertColumnNames,
getAllValueExpressions(sqlStatement), parameters).orElse(null);
}
private ShardingSphereSchema getSchema(final Map<String,
ShardingSphereDatabase> databases, final String defaultDatabaseName) {
@@ -107,8 +106,7 @@ public final class InsertStatementContext extends
CommonSQLStatementContext<Inse
throw new DatabaseNotExistedException(databaseName);
}
String defaultSchema =
DatabaseTypeEngine.getDefaultSchemaName(getDatabaseType(), databaseName);
- return tablesContext.getSchemaName()
- .map(optional ->
database.getSchemas().get(optional)).orElseGet(() ->
database.getSchemas().get(defaultSchema));
+ return tablesContext.getSchemaName().map(optional ->
database.getSchemas().get(optional)).orElseGet(() ->
database.getSchemas().get(defaultSchema));
}
private Collection<SimpleTableSegment> getAllSimpleTableSegments() {
@@ -181,10 +179,7 @@ public final class InsertStatementContext extends
CommonSQLStatementContext<Inse
* @return on duplicate key update parameters
*/
public List<Object> getOnDuplicateKeyUpdateParameters() {
- if (null == onDuplicateKeyUpdateValueContext) {
- return new ArrayList<>(0);
- }
- return onDuplicateKeyUpdateValueContext.getParameters();
+ return null == onDuplicateKeyUpdateValueContext ? new ArrayList<>() :
onDuplicateKeyUpdateValueContext.getParameters();
}
/**
@@ -202,14 +197,13 @@ public final class InsertStatementContext extends
CommonSQLStatementContext<Inse
}
/**
- * Judge whether use default columns or not.
+ * Judge whether contains insert columns.
*
- * @return whether use default columns or not
+ * @return contains insert columns or not
*/
- public boolean useDefaultColumns() {
+ public boolean containsInsertColumns() {
InsertStatement insertStatement = getSqlStatement();
- Optional<SetAssignmentSegment> setAssignment =
InsertStatementHandler.getSetAssignmentSegment(insertStatement);
- return insertStatement.getColumns().isEmpty() &&
!setAssignment.isPresent();
+ return !insertStatement.getColumns().isEmpty() ||
InsertStatementHandler.getSetAssignmentSegment(insertStatement).isPresent();
}
/**
@@ -219,8 +213,7 @@ public final class InsertStatementContext extends
CommonSQLStatementContext<Inse
*/
public int getValueListCount() {
InsertStatement insertStatement = getSqlStatement();
- Optional<SetAssignmentSegment> setAssignment =
InsertStatementHandler.getSetAssignmentSegment(insertStatement);
- return setAssignment.isPresent() ? 1 :
insertStatement.getValues().size();
+ return
InsertStatementHandler.getSetAssignmentSegment(insertStatement).isPresent() ? 1
: insertStatement.getValues().size();
}
/**
@@ -230,8 +223,7 @@ public final class InsertStatementContext extends
CommonSQLStatementContext<Inse
*/
public List<String> getInsertColumnNames() {
InsertStatement insertStatement = getSqlStatement();
- Optional<SetAssignmentSegment> setAssignment =
InsertStatementHandler.getSetAssignmentSegment(insertStatement);
- return
setAssignment.map(this::getColumnNamesForSetAssignment).orElseGet(() ->
getColumnNamesForInsertColumns(insertStatement.getColumns()));
+ return
InsertStatementHandler.getSetAssignmentSegment(insertStatement).map(this::getColumnNamesForSetAssignment).orElseGet(()
-> getColumnNamesForInsertColumns(insertStatement.getColumns()));
}
private List<String> getColumnNamesForSetAssignment(final
SetAssignmentSegment setAssignment) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/impl/InsertStatementContextTest.java
b/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/impl/InsertStatementContextTest.java
index 1ea568aaf14..0a1f171bc20 100644
---
a/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/impl/InsertStatementContextTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/impl/InsertStatementContextTest.java
@@ -210,75 +210,75 @@ public final class InsertStatementContextTest {
@Test
public void assertUseDefaultColumnsForMySQL() {
- assertUseDefaultColumns(new MySQLInsertStatement());
+ assertContainsInsertColumns(new MySQLInsertStatement());
}
@Test
public void assertUseDefaultColumnsForOracle() {
- assertUseDefaultColumns(new OracleInsertStatement());
+ assertContainsInsertColumns(new OracleInsertStatement());
}
@Test
public void assertUseDefaultColumnsForPostgreSQL() {
- assertUseDefaultColumns(new PostgreSQLInsertStatement());
+ assertContainsInsertColumns(new PostgreSQLInsertStatement());
}
@Test
public void assertUseDefaultColumnsForSQL92() {
- assertUseDefaultColumns(new SQL92InsertStatement());
+ assertContainsInsertColumns(new SQL92InsertStatement());
}
@Test
public void assertUseDefaultColumnsForSQLServer() {
- assertUseDefaultColumns(new SQLServerInsertStatement());
+ assertContainsInsertColumns(new SQLServerInsertStatement());
}
- private void assertUseDefaultColumns(final InsertStatement
insertStatement) {
+ private void assertNotContainsInsertColumns(final InsertStatement
insertStatement) {
insertStatement.setTable(new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue(""))));
InsertStatementContext insertStatementContext =
createInsertStatementContext(Collections.emptyList(), insertStatement);
- assertTrue(insertStatementContext.useDefaultColumns());
+ assertFalse(insertStatementContext.containsInsertColumns());
}
@Test
public void assertNotUseDefaultColumnsWithColumnsForMySQL() {
- assertNotUseDefaultColumnsWithColumns(new MySQLInsertStatement());
+ assertNotContainsInsertColumns(new MySQLInsertStatement());
}
@Test
public void assertNotUseDefaultColumnsWithColumnsForOracle() {
- assertNotUseDefaultColumnsWithColumns(new OracleInsertStatement());
+ assertNotContainsInsertColumns(new OracleInsertStatement());
}
@Test
public void assertNotUseDefaultColumnsWithColumnsForPostgreSQL() {
- assertNotUseDefaultColumnsWithColumns(new PostgreSQLInsertStatement());
+ assertNotContainsInsertColumns(new PostgreSQLInsertStatement());
}
@Test
public void assertNotUseDefaultColumnsWithColumnsForSQL92() {
- assertNotUseDefaultColumnsWithColumns(new SQL92InsertStatement());
+ assertNotContainsInsertColumns(new SQL92InsertStatement());
}
@Test
public void assertNotUseDefaultColumnsWithColumnsForSQLServer() {
- assertNotUseDefaultColumnsWithColumns(new SQLServerInsertStatement());
+ assertNotContainsInsertColumns(new SQLServerInsertStatement());
}
- private void assertNotUseDefaultColumnsWithColumns(final InsertStatement
insertStatement) {
+ private void assertContainsInsertColumns(final InsertStatement
insertStatement) {
InsertColumnsSegment insertColumnsSegment = new
InsertColumnsSegment(0, 0, Collections.singletonList(new ColumnSegment(0, 0,
new IdentifierValue("col"))));
insertStatement.setInsertColumns(insertColumnsSegment);
insertStatement.setTable(new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue(""))));
InsertStatementContext insertStatementContext =
createInsertStatementContext(Collections.emptyList(), insertStatement);
- assertFalse(insertStatementContext.useDefaultColumns());
+ assertTrue(insertStatementContext.containsInsertColumns());
}
@Test
- public void assertNotUseDefaultColumnsWithSetAssignmentForMySQL() {
+ public void assertContainsInsertColumnsWithSetAssignmentForMySQL() {
MySQLInsertStatement insertStatement = new MySQLInsertStatement();
insertStatement.setSetAssignment(new SetAssignmentSegment(0, 0,
Collections.emptyList()));
insertStatement.setTable(new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue(""))));
InsertStatementContext insertStatementContext =
createInsertStatementContext(Collections.emptyList(), insertStatement);
- assertFalse(insertStatementContext.useDefaultColumns());
+ assertTrue(insertStatementContext.containsInsertColumns());
}
@Test
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/arguments/BootstrapArgumentsTest.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/arguments/BootstrapArgumentsTest.java
index db601348a4a..50e1fa235e8 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/arguments/BootstrapArgumentsTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/arguments/BootstrapArgumentsTest.java
@@ -50,14 +50,14 @@ public final class BootstrapArgumentsTest {
assertTrue(actual.isPresent());
assertThat(actual.get(), is(3306));
}
-
+
@Test
public void assertGetPortWithTwoArgument() {
Optional<Integer> actual = new BootstrapArguments(new String[]{"3306",
"/test_conf/"}).getPort();
assertTrue(actual.isPresent());
assertThat(actual.get(), is(3306));
}
-
+
@Test
public void assertGetPortWithThreeArgument() {
Optional<Integer> actual = new BootstrapArguments(new String[]{"3306",
"/test_conf/", "127.0.0.1"}).getPort();
@@ -74,7 +74,7 @@ public final class BootstrapArgumentsTest {
public void assertGetConfigurationPathWithSingleArgument() {
assertThat(new BootstrapArguments(new
String[]{"3306"}).getConfigurationPath(), is("/conf/"));
}
-
+
@Test
public void assertGetConfigurationPathWithTwoArguments() {
assertThat(new BootstrapArguments(new String[]{"3306",
"test_conf"}).getConfigurationPath(), is("/test_conf/"));
@@ -82,22 +82,22 @@ public final class BootstrapArgumentsTest {
assertThat(new BootstrapArguments(new String[]{"3306",
"test_conf/"}).getConfigurationPath(), is("/test_conf/"));
assertThat(new BootstrapArguments(new String[]{"3306",
"/test_conf/"}).getConfigurationPath(), is("/test_conf/"));
}
-
+
@Test
public void assertGetAddressesWithEmptyArgument() {
assertThat(new BootstrapArguments(new String[]{}).getAddresses(),
is(Arrays.asList("0.0.0.0")));
}
-
+
@Test
public void assertGetAddressesWithSingleArgument() {
assertThat(new BootstrapArguments(new
String[]{"3306"}).getAddresses(), is(Arrays.asList("0.0.0.0")));
}
-
+
@Test
public void assertGetAddressesWithTwoArgument() {
assertThat(new BootstrapArguments(new String[]{"3306",
"test_conf"}).getAddresses(), is(Arrays.asList("0.0.0.0")));
}
-
+
@Test
public void assertGetAddressesWithThreeArguments() {
assertThat(new BootstrapArguments(new String[]{"3306", "test_conf",
"127.0.0.1"}).getAddresses(), is(Arrays.asList("127.0.0.1")));
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
index dcce2d43908..d34e3cfaeff 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/dml/InsertStatementHandler.java
@@ -69,10 +69,7 @@ public final class InsertStatementHandler implements
SQLStatementHandler {
* @return set assignment segment
*/
public static Optional<SetAssignmentSegment> getSetAssignmentSegment(final
InsertStatement insertStatement) {
- if (insertStatement instanceof MySQLStatement) {
- return ((MySQLInsertStatement) insertStatement).getSetAssignment();
- }
- return Optional.empty();
+ return insertStatement instanceof MySQLStatement ?
((MySQLInsertStatement) insertStatement).getSetAssignment() : Optional.empty();
}
/**