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 2020/10/17 08:42:41 UTC
[shardingsphere] branch master updated: Add QuoteCharacter.wrap
(#7824)
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 b072473 Add QuoteCharacter.wrap (#7824)
b072473 is described below
commit b072473ada45fd5220dc3b1d7ad78fe4ae69d7c1
Author: Liang Zhang <te...@163.com>
AuthorDate: Sat Oct 17 16:42:13 2020 +0800
Add QuoteCharacter.wrap (#7824)
* Add QuoteCharacter.wrap
* Use QuoteCharacter.wrap on ProjectionsTokenGenerator
* Use QuoteCharacter.wrap on TableToken
* Use QuoteCharacter.wrap on IdentifierValue
* Use QuoteCharacter.wrap on IndexToken
* Add test case
---
.../generator/impl/ProjectionsTokenGenerator.java | 10 +++-------
.../sharding/rewrite/token/pojo/IndexToken.java | 8 +++++---
.../sharding/rewrite/token/pojo/TableToken.java | 4 ++--
.../model/column/PhysicalColumnMetaDataLoader.java | 2 +-
.../DatabaseMetaDataDialectHandlerTest.java | 2 +-
.../parser/sql/common/constant/QuoteCharacter.java | 13 +++++++++++-
.../common/value/identifier/IdentifierValue.java | 2 +-
.../sql/common/constant/QuoteCharacterTest.java | 23 +++++-----------------
8 files changed, 30 insertions(+), 34 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
index c815680..7d4714e 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
@@ -104,8 +104,7 @@ public final class ProjectionsTokenGenerator implements OptionalSQLTokenGenerato
Preconditions.checkState(projection.getDerivedProjection() instanceof ColumnOrderByItemSegment);
ColumnOrderByItemSegment columnOrderByItemSegment = (ColumnOrderByItemSegment) projection.getDerivedProjection();
ColumnOrderByItemSegment newColumnOrderByItem = generateNewColumnOrderByItem(columnOrderByItemSegment, routeUnit, tableExtractor);
- String result = new StringBuilder().append(newColumnOrderByItem.getText()).append(" AS ").append(projection.getAlias().get()).append(" ").toString();
- return result;
+ return new StringBuilder().append(newColumnOrderByItem.getText()).append(" AS ").append(projection.getAlias().get()).append(" ").toString();
}
private Optional<String> getActualTables(final RouteUnit routeUnit, final String logicalTableName) {
@@ -128,12 +127,9 @@ public final class ProjectionsTokenGenerator implements OptionalSQLTokenGenerato
Optional<String> actualTableName = getActualTables(routeUnit, ownerSegment.get().getIdentifier().getValue());
Preconditions.checkState(actualTableName.isPresent());
ColumnSegment newColumnSegment = new ColumnSegment(0, 0, old.getColumn().getIdentifier());
- String newOwnerString = String.format("%s%s%s", ownerSegment.get().getIdentifier().getQuoteCharacter().getStartDelimiter(), actualTableName.get(),
- ownerSegment.get().getIdentifier().getQuoteCharacter().getEndDelimiter());
- IdentifierValue newOwnerIdentifier = new IdentifierValue(newOwnerString);
+ IdentifierValue newOwnerIdentifier = new IdentifierValue(ownerSegment.get().getIdentifier().getQuoteCharacter().wrap(actualTableName.get()));
OwnerSegment newOwner = new OwnerSegment(0, 0, newOwnerIdentifier);
newColumnSegment.setOwner(newOwner);
- ColumnOrderByItemSegment result = new ColumnOrderByItemSegment(newColumnSegment, old.getOrderDirection());
- return result;
+ return new ColumnOrderByItemSegment(newColumnSegment, old.getOrderDirection());
}
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
index 7dbad89..7a8e578 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
@@ -55,13 +55,15 @@ public final class IndexToken extends SQLToken implements Substitutable, RouteUn
@Override
public String toString(final RouteUnit routeUnit) {
- StringBuilder result = new StringBuilder();
- result.append(identifier.getQuoteCharacter().getStartDelimiter()).append(identifier.getValue());
+ return identifier.getQuoteCharacter().wrap(getIndexValue(routeUnit));
+ }
+
+ private String getIndexValue(final RouteUnit routeUnit) {
+ StringBuilder result = new StringBuilder(identifier.getValue());
Map<String, String> logicAndActualTables = getLogicAndActualTables(routeUnit);
if (!logicAndActualTables.isEmpty()) {
result.append("_").append(logicAndActualTables.values().iterator().next());
}
- result.append(identifier.getQuoteCharacter().getEndDelimiter());
return result.toString();
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/TableToken.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/TableToken.java
index 89bad1d..bb41805 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/TableToken.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/TableToken.java
@@ -64,9 +64,9 @@ public final class TableToken extends SQLToken implements Substitutable, RouteUn
actualTableName = null == actualTableName ? tableName.getValue().toLowerCase() : actualTableName;
String owner = "";
if (null != this.owner && routeUnit.getDataSourceMapper().getLogicName().equals(this.owner.getValue())) {
- owner = this.owner.getQuoteCharacter().getStartDelimiter() + routeUnit.getDataSourceMapper().getActualName() + this.owner.getQuoteCharacter().getEndDelimiter() + ".";
+ owner = this.owner.getQuoteCharacter().wrap(routeUnit.getDataSourceMapper().getActualName()) + ".";
}
- return Joiner.on("").join(owner, tableName.getQuoteCharacter().getStartDelimiter(), actualTableName, tableName.getQuoteCharacter().getEndDelimiter());
+ return Joiner.on("").join(owner, tableName.getQuoteCharacter().wrap(actualTableName));
}
private Map<String, String> getLogicAndActualTables(final RouteUnit routeUnit) {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java
index 29012be..5bd6b96 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java
@@ -91,7 +91,7 @@ public final class PhysicalColumnMetaDataLoader {
private static String generateEmptyResultSQL(final String table, final DatabaseType databaseType) {
QuoteCharacter quoteCharacter = DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(DatabaseMetaDataDialectHandler::getQuoteCharacter).orElse(QuoteCharacter.NONE);
- return String.format("SELECT * FROM %s%s%s WHERE 1 != 1", quoteCharacter.getStartDelimiter(), table, quoteCharacter.getEndDelimiter());
+ return String.format("SELECT * FROM %s WHERE 1 != 1", quoteCharacter.wrap(table));
}
private static Collection<String> loadPrimaryKeys(final Connection connection, final String table) throws SQLException {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java
index 89696cb..1ae4e3f 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java
@@ -99,7 +99,7 @@ public final class DatabaseMetaDataDialectHandlerTest {
}
@Test
- public void assertGetDelimiter() {
+ public void assertGetQuoteCharacter() {
QuoteCharacter oracleQuoteCharacter = findQuoteCharacter(new OracleDatabaseType());
assertThat(oracleQuoteCharacter.getStartDelimiter(), is("\""));
assertThat(oracleQuoteCharacter.getEndDelimiter(), is("\""));
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacter.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacter.java
index f3de8a6..90fe63a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacter.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacter.java
@@ -18,10 +18,11 @@
package org.apache.shardingsphere.sql.parser.sql.common.constant;
import com.google.common.base.Strings;
-import java.util.Arrays;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import java.util.Arrays;
+
/**
* Quote character.
*/
@@ -55,4 +56,14 @@ public enum QuoteCharacter {
}
return Arrays.stream(values()).filter(each -> NONE != each && each.startDelimiter.charAt(0) == value.charAt(0)).findFirst().orElse(NONE);
}
+
+ /**
+ * Wrap value with quote character.
+ *
+ * @param value value to be wrapped
+ * @return wrapped value
+ */
+ public String wrap(final String value) {
+ return String.format("%s%s%s", startDelimiter, value, endDelimiter);
+ }
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/value/identifier/IdentifierValue.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/value/identifier/IdentifierValue.java
index 39f8ad9..f5dce65 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/value/identifier/IdentifierValue.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/value/identifier/IdentifierValue.java
@@ -45,6 +45,6 @@ public final class IdentifierValue implements ValueASTNode<String> {
* @return value with quote characters
*/
public String getValueWithQuoteCharacters() {
- return null == value ? "" : quoteCharacter.getStartDelimiter() + value + quoteCharacter.getEndDelimiter();
+ return null == value ? "" : quoteCharacter.wrap(value);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacterTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacterTest.java
index cdc75d1..96c2b21 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacterTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/constant/QuoteCharacterTest.java
@@ -25,24 +25,6 @@ import static org.junit.Assert.assertThat;
public final class QuoteCharacterTest {
@Test
- public void assertGetStartDelimiter() {
- assertThat(QuoteCharacter.BACK_QUOTE.getStartDelimiter(), is("`"));
- assertThat(QuoteCharacter.SINGLE_QUOTE.getStartDelimiter(), is("'"));
- assertThat(QuoteCharacter.QUOTE.getStartDelimiter(), is("\""));
- assertThat(QuoteCharacter.BRACKETS.getStartDelimiter(), is("["));
- assertThat(QuoteCharacter.NONE.getStartDelimiter(), is(""));
- }
-
- @Test
- public void assertGetEndDelimiter() {
- assertThat(QuoteCharacter.BACK_QUOTE.getEndDelimiter(), is("`"));
- assertThat(QuoteCharacter.SINGLE_QUOTE.getEndDelimiter(), is("'"));
- assertThat(QuoteCharacter.QUOTE.getEndDelimiter(), is("\""));
- assertThat(QuoteCharacter.BRACKETS.getEndDelimiter(), is("]"));
- assertThat(QuoteCharacter.NONE.getEndDelimiter(), is(""));
- }
-
- @Test
public void assertGetQuoteCharacterWithNullValue() {
assertThat(QuoteCharacter.getQuoteCharacter(null), is(QuoteCharacter.NONE));
}
@@ -76,4 +58,9 @@ public final class QuoteCharacterTest {
public void assertGetQuoteCharacterWithBrackets() {
assertThat(QuoteCharacter.getQuoteCharacter("[tbl]"), is(QuoteCharacter.BRACKETS));
}
+
+ @Test
+ public void assertWarp() {
+ assertThat(QuoteCharacter.BACK_QUOTE.wrap("test"), is("`test`"));
+ }
}