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