You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2022/12/22 13:56:51 UTC

[GitHub] [shardingsphere] boyjoy1127 opened a new pull request, #23040: Replace FilterableTableScanExecutor with TranslatableTableScanExecutor

boyjoy1127 opened a new pull request, #23040:
URL: https://github.com/apache/shardingsphere/pull/23040

   Ref #19937
   
   Changes proposed in this pull request:
     - Replace FilterableTableScanExecutor with TranslatableTableScanExecutor
   
   ---
   
   Before committing this PR, I'm sure that I have checked the following options:
   - [X] My code follows the [code of conduct](https://shardingsphere.apache.org/community/en/involved/conduct/code/) of this project.
   - [X] I have self-reviewed the commit code.
   - [X] I have (or in comment I request) added corresponding labels for the pull request.
   - [X] I have passed maven check locally : `./mvnw clean install -B -T1C -Dmaven.javadoc.skip -Dmaven.jacoco.skip -e`.
   - [X] I have made corresponding changes to the documentation.
   - [X] I have added corresponding unit tests for my changes.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [shardingsphere] boyjoy1127 commented on a diff in pull request #23040: Refactor and enhance Translatable Executor and Optimizer

Posted by GitBox <gi...@apache.org>.
boyjoy1127 commented on code in PR #23040:
URL: https://github.com/apache/shardingsphere/pull/23040#discussion_r1068119802


##########
kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/TranslatableTableScanExecutor.java:
##########
@@ -229,26 +327,47 @@ private RelNode createRelNode(final ShardingSphereTable table, final Translatabl
         RelOptCluster relOptCluster = RelOptCluster.create(SQLFederationPlannerUtil.createVolcanoPlanner(), new RexBuilder(JAVA_TYPE_FACTORY));
         RelBuilder builder = RelFactories.LOGICAL_BUILDER.create(relOptCluster, catalogReader).scan(table.getName());
         if (null != scanContext.getFilterValues()) {
-            builder.filter(createFilters(scanContext.getFilterValues()));
+            builder.filter(createFilters(scanContext.getFilterValues(), (SQLFederationDataContext) scanContext.getRoot()));
         }
         if (null != scanContext.getProjects()) {
             builder.project(createProjections(scanContext.getProjects(), builder, table.getColumnNames()));
         }
         return builder.build();
     }
     
-    private Collection<RexNode> createFilters(final String[] filterValues) {
+    private Collection<RexNode> createFilters(final String[] filterValues, final SQLFederationDataContext context) {
         Collection<RexNode> result = new LinkedList<>();
         JavaTypeFactory typeFactory = new JavaTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
         RexBuilder rexBuilder = new RexBuilder(typeFactory);
         for (String each : filterValues) {
             if (!Strings.isNullOrEmpty(each)) {
-                result.add(StringToRexNodeUtil.buildRexNode(each, rexBuilder));
+                Map<Integer, Integer> columnMap = extractColumnMap(each);
+                String filterValue = extractFilterValue(each);
+                result.add(StringToRexNodeUtil.buildRexNode(filterValue, rexBuilder, context.getParameters(), columnMap));
             }
         }
         return result;
     }
     
+    private Map<Integer, Integer> extractColumnMap(final String filterExpression) {

Review Comment:
   Example as : "{1=4}"
   This means column 1 with type int, 4 represent int. According below:
   ```
   private Class getClass(final int dataType) {
           switch (dataType) {
               case -5:
                   return Long.class;
               case 4:
                   return Integer.class;
               case 6:
                   return Float.class;
               case 8:
                   return Double.class;
               case 1:
                   return String.class;
               case 12:
                   return String.class;
               case 91:
                   return Date.class;
               default:
                   return String.class;
           }
   ```
   
   
   
           public final static int BIT             =  -7;
   
           public final static int TINYINT         =  -6;
   
           public final static int SMALLINT        =   5;
   
           public final static int INTEGER         =   4;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>BIGINT</code>.
    */
           public final static int BIGINT          =  -5;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>FLOAT</code>.
    */
           public final static int FLOAT           =   6;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>REAL</code>.
    */
           public final static int REAL            =   7;
   
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>DOUBLE</code>.
    */
           public final static int DOUBLE          =   8;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>NUMERIC</code>.
    */
           public final static int NUMERIC         =   2;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>DECIMAL</code>.
    */
           public final static int DECIMAL         =   3;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>CHAR</code>.
    */
           public final static int CHAR            =   1;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>VARCHAR</code>.
    */
           public final static int VARCHAR         =  12;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>LONGVARCHAR</code>.
    */
           public final static int LONGVARCHAR     =  -1;
   
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>DATE</code>.
    */
           public final static int DATE            =  91;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>TIME</code>.
    */
           public final static int TIME            =  92;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>TIMESTAMP</code>.
    */
           public final static int TIMESTAMP       =  93;
   
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>BINARY</code>.
    */
           public final static int BINARY          =  -2;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>VARBINARY</code>.
    */
           public final static int VARBINARY       =  -3;
   
   /**
    * <P>The constant in the Java programming language, sometimes referred
    * to as a type code, that identifies the generic SQL type
    * <code>LONGVARBINARY</code>.
    */
           public final static int LONGVARBINARY   =  -4;
   
   /**
    * <P>The constant in the Java programming language
    * that identifies the generic SQL value
    * <code>NULL</code>.
    */
           public final static int NULL            =   0;
   
       /**
        * The constant in the Java programming language that indicates
        * that the SQL type is database-specific and
        * gets mapped to a Java object that can be accessed via
        * the methods <code>getObject</code> and <code>setObject</code>.
        */
           public final static int OTHER           = 1111;
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [shardingsphere] strongduanmu commented on a diff in pull request #23040: Refactor and enhance Translatable Executor and Optimizer

Posted by GitBox <gi...@apache.org>.
strongduanmu commented on code in PR #23040:
URL: https://github.com/apache/shardingsphere/pull/23040#discussion_r1065761598


##########
kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/FilterableTableScanExecutor.java:
##########
@@ -117,6 +117,11 @@ public final class FilterableTableScanExecutor implements TableScanExecutor {
     
     private final EventBusContext eventBusContext;
     
+    @Override
+    public Enumerable<Object> executeScalar(final ShardingSphereTable table, final ScanNodeExecutorContext scanContext) {
+        return null;

Review Comment:
   Why return null here? Can we return empty Enumerable?



##########
kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/translatable/ParseRexNodeVisitorImpl.java:
##########
@@ -138,9 +144,44 @@ public RexNode visitInput(final InputContext ctx) {
     
     @Override
     public RexNode visitInputRef(final InputRefContext ctx) {
+        // 处理inputRef位于cast的场景:CAST($1,INTEGER)。

Review Comment:
   Please remove inline doc here.



##########
kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/translatable/ParseRexNodeVisitorImpl.java:
##########
@@ -138,9 +144,44 @@ public RexNode visitInput(final InputContext ctx) {
     
     @Override
     public RexNode visitInputRef(final InputRefContext ctx) {
+        // 处理inputRef位于cast的场景:CAST($1,INTEGER)。
         Integer index = Integer.valueOf(ctx.INTEGER_().getText());
-        RelDataType nonNullableInt = typeFactory.createSqlType(SqlTypeName.INTEGER);
-        return rexBuilder.makeInputRef(nonNullableInt, index);
+        if ((ctx.getParent() instanceof CastContext) && "VARCHAR".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(String.class), index);
+        } else if ((ctx.getParent() instanceof CastContext) && "INTEGER".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(Integer.class), index);
+        } else if ((ctx.getParent() instanceof CastContext) && "BIGINT".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(Long.class), index);
+        }
+        // 处理inputRef的普通场景:$0。
+        if (null != columnMap.get(index)) {
+            Class dataType = getClass(columnMap.get(index));
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(dataType), index);
+        }
+        // 需要处理关联查询的场景:$cor0.merchant_id。
+        return rexBuilder.makeInputRef(typeFactory.createJavaType(Integer.class), index);
+    }
+    
+    private Class getClass(final int dataType) {
+        // Reference to java.sql.Types

Review Comment:
   Please remove inline doc here.



##########
kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/translatable/ParseRexNodeVisitorImpl.java:
##########
@@ -138,9 +144,44 @@ public RexNode visitInput(final InputContext ctx) {
     
     @Override
     public RexNode visitInputRef(final InputRefContext ctx) {
+        // 处理inputRef位于cast的场景:CAST($1,INTEGER)。
         Integer index = Integer.valueOf(ctx.INTEGER_().getText());
-        RelDataType nonNullableInt = typeFactory.createSqlType(SqlTypeName.INTEGER);
-        return rexBuilder.makeInputRef(nonNullableInt, index);
+        if ((ctx.getParent() instanceof CastContext) && "VARCHAR".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(String.class), index);
+        } else if ((ctx.getParent() instanceof CastContext) && "INTEGER".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(Integer.class), index);
+        } else if ((ctx.getParent() instanceof CastContext) && "BIGINT".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(Long.class), index);
+        }
+        // 处理inputRef的普通场景:$0。
+        if (null != columnMap.get(index)) {
+            Class dataType = getClass(columnMap.get(index));
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(dataType), index);
+        }
+        // 需要处理关联查询的场景:$cor0.merchant_id。

Review Comment:
   Please remove inline doc here.



##########
kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/TranslatableTableScanExecutor.java:
##########
@@ -229,26 +327,47 @@ private RelNode createRelNode(final ShardingSphereTable table, final Translatabl
         RelOptCluster relOptCluster = RelOptCluster.create(SQLFederationPlannerUtil.createVolcanoPlanner(), new RexBuilder(JAVA_TYPE_FACTORY));
         RelBuilder builder = RelFactories.LOGICAL_BUILDER.create(relOptCluster, catalogReader).scan(table.getName());
         if (null != scanContext.getFilterValues()) {
-            builder.filter(createFilters(scanContext.getFilterValues()));
+            builder.filter(createFilters(scanContext.getFilterValues(), (SQLFederationDataContext) scanContext.getRoot()));
         }
         if (null != scanContext.getProjects()) {
             builder.project(createProjections(scanContext.getProjects(), builder, table.getColumnNames()));
         }
         return builder.build();
     }
     
-    private Collection<RexNode> createFilters(final String[] filterValues) {
+    private Collection<RexNode> createFilters(final String[] filterValues, final SQLFederationDataContext context) {
         Collection<RexNode> result = new LinkedList<>();
         JavaTypeFactory typeFactory = new JavaTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
         RexBuilder rexBuilder = new RexBuilder(typeFactory);
         for (String each : filterValues) {
             if (!Strings.isNullOrEmpty(each)) {
-                result.add(StringToRexNodeUtil.buildRexNode(each, rexBuilder));
+                Map<Integer, Integer> columnMap = extractColumnMap(each);
+                String filterValue = extractFilterValue(each);
+                result.add(StringToRexNodeUtil.buildRexNode(filterValue, rexBuilder, context.getParameters(), columnMap));
             }
         }
         return result;
     }
     
+    private Map<Integer, Integer> extractColumnMap(final String filterExpression) {

Review Comment:
   Can you give an example of filterExpression? It looks like a json format value.



##########
kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/translatable/ParseRexNodeVisitorImpl.java:
##########
@@ -138,9 +144,44 @@ public RexNode visitInput(final InputContext ctx) {
     
     @Override
     public RexNode visitInputRef(final InputRefContext ctx) {
+        // 处理inputRef位于cast的场景:CAST($1,INTEGER)。
         Integer index = Integer.valueOf(ctx.INTEGER_().getText());
-        RelDataType nonNullableInt = typeFactory.createSqlType(SqlTypeName.INTEGER);
-        return rexBuilder.makeInputRef(nonNullableInt, index);
+        if ((ctx.getParent() instanceof CastContext) && "VARCHAR".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(String.class), index);
+        } else if ((ctx.getParent() instanceof CastContext) && "INTEGER".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(Integer.class), index);
+        } else if ((ctx.getParent() instanceof CastContext) && "BIGINT".equals(ctx.getParent().getStop().getText())) {
+            return rexBuilder.makeInputRef(typeFactory.createJavaType(Long.class), index);
+        }
+        // 处理inputRef的普通场景:$0。

Review Comment:
   Please remove inline doc here.



##########
kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/TranslatableTableScanExecutor.java:
##########
@@ -229,26 +327,47 @@ private RelNode createRelNode(final ShardingSphereTable table, final Translatabl
         RelOptCluster relOptCluster = RelOptCluster.create(SQLFederationPlannerUtil.createVolcanoPlanner(), new RexBuilder(JAVA_TYPE_FACTORY));
         RelBuilder builder = RelFactories.LOGICAL_BUILDER.create(relOptCluster, catalogReader).scan(table.getName());
         if (null != scanContext.getFilterValues()) {
-            builder.filter(createFilters(scanContext.getFilterValues()));
+            builder.filter(createFilters(scanContext.getFilterValues(), (SQLFederationDataContext) scanContext.getRoot()));
         }
         if (null != scanContext.getProjects()) {
             builder.project(createProjections(scanContext.getProjects(), builder, table.getColumnNames()));
         }
         return builder.build();
     }
     
-    private Collection<RexNode> createFilters(final String[] filterValues) {
+    private Collection<RexNode> createFilters(final String[] filterValues, final SQLFederationDataContext context) {
         Collection<RexNode> result = new LinkedList<>();
         JavaTypeFactory typeFactory = new JavaTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
         RexBuilder rexBuilder = new RexBuilder(typeFactory);
         for (String each : filterValues) {
             if (!Strings.isNullOrEmpty(each)) {
-                result.add(StringToRexNodeUtil.buildRexNode(each, rexBuilder));
+                Map<Integer, Integer> columnMap = extractColumnMap(each);
+                String filterValue = extractFilterValue(each);
+                result.add(StringToRexNodeUtil.buildRexNode(filterValue, rexBuilder, context.getParameters(), columnMap));
             }
         }
         return result;
     }
     
+    private Map<Integer, Integer> extractColumnMap(final String filterExpression) {
+        String columnInformationPattern = "\\{.*}";
+        Matcher matcher = Pattern.compile(columnInformationPattern).matcher(filterExpression);

Review Comment:
   In order to improve performance, can we extract Pattern as a static field?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [shardingsphere] strongduanmu merged pull request #23040: Refactor and enhance Translatable Executor and Optimizer

Posted by GitBox <gi...@apache.org>.
strongduanmu merged PR #23040:
URL: https://github.com/apache/shardingsphere/pull/23040


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [shardingsphere] codecov-commenter commented on pull request #23040: Replace FilterableTableScanExecutor with TranslatableTableScanExecutor

Posted by GitBox <gi...@apache.org>.
codecov-commenter commented on PR #23040:
URL: https://github.com/apache/shardingsphere/pull/23040#issuecomment-1362905770

   # [Codecov](https://codecov.io/gh/apache/shardingsphere/pull/23040?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) Report
   > Merging [#23040](https://codecov.io/gh/apache/shardingsphere/pull/23040?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (9800969) into [master](https://codecov.io/gh/apache/shardingsphere/commit/2f0c333e6d57554bba3cbf7a07ba50bc7cc7d30f?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (2f0c333) will **increase** coverage by `0.56%`.
   > The diff coverage is `0.00%`.
   
   ```diff
   @@             Coverage Diff              @@
   ##             master   #23040      +/-   ##
   ============================================
   + Coverage     49.40%   49.96%   +0.56%     
   + Complexity     2443     2428      -15     
   ============================================
     Files          4107     4113       +6     
     Lines         57475    57437      -38     
     Branches       9847     9044     -803     
   ============================================
   + Hits          28396    28701     +305     
   + Misses        26639    26229     -410     
   - Partials       2440     2507      +67     
   ```
   
   
   | [Impacted Files](https://codecov.io/gh/apache/shardingsphere/pull/23040?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | Coverage Δ | |
   |---|---|---|
   | [...ration/advanced/AdvancedSQLFederationExecutor.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL2V4ZWN1dG9yL2FkdmFuY2VkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zaGFyZGluZ3NwaGVyZS9zcWxmZWRlcmF0aW9uL2FkdmFuY2VkL0FkdmFuY2VkU1FMRmVkZXJhdGlvbkV4ZWN1dG9yLmphdmE=) | `24.44% <0.00%> (ø)` | |
   | [...deration/executor/FilterableTableScanExecutor.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL2V4ZWN1dG9yL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NoYXJkaW5nc3BoZXJlL3NxbGZlZGVyYXRpb24vZXhlY3V0b3IvRmlsdGVyYWJsZVRhYmxlU2NhbkV4ZWN1dG9yLmphdmE=) | `9.61% <0.00%> (-0.10%)` | :arrow_down: |
   | [...ration/executor/TranslatableTableScanExecutor.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL2V4ZWN1dG9yL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NoYXJkaW5nc3BoZXJlL3NxbGZlZGVyYXRpb24vZXhlY3V0b3IvVHJhbnNsYXRhYmxlVGFibGVTY2FuRXhlY3V0b3IuamF2YQ==) | `0.00% <0.00%> (ø)` | |
   | [...re/sqlfederation/row/EmptyRowScalarEnumerator.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL2V4ZWN1dG9yL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NoYXJkaW5nc3BoZXJlL3NxbGZlZGVyYXRpb24vcm93L0VtcHR5Um93U2NhbGFyRW51bWVyYXRvci5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [...here/sqlfederation/row/MemoryScalarEnumerator.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL2V4ZWN1dG9yL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NoYXJkaW5nc3BoZXJlL3NxbGZlZGVyYXRpb24vcm93L01lbW9yeVNjYWxhckVudW1lcmF0b3IuamF2YQ==) | `0.00% <0.00%> (ø)` | |
   | [...lfederation/row/SQLFederationScalarEnumerator.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL2V4ZWN1dG9yL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NoYXJkaW5nc3BoZXJlL3NxbGZlZGVyYXRpb24vcm93L1NRTEZlZGVyYXRpb25TY2FsYXJFbnVtZXJhdG9yLmphdmE=) | `0.00% <0.00%> (ø)` | |
   | [...data/translatable/FederationTranslatableTable.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL29wdGltaXplci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2hhcmRpbmdzcGhlcmUvc3FsZmVkZXJhdGlvbi9vcHRpbWl6ZXIvbWV0YWRhdGEvdHJhbnNsYXRhYmxlL0ZlZGVyYXRpb25UcmFuc2xhdGFibGVUYWJsZS5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [...r/metadata/translatable/TranslatableTableScan.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-a2VybmVsL3NxbC1mZWRlcmF0aW9uL29wdGltaXplci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2hhcmRpbmdzcGhlcmUvc3FsZmVkZXJhdGlvbi9vcHRpbWl6ZXIvbWV0YWRhdGEvdHJhbnNsYXRhYmxlL1RyYW5zbGF0YWJsZVRhYmxlU2Nhbi5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [...handler/distsql/ral/hint/enums/HintSourceType.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-cHJveHkvYmFja2VuZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2hhcmRpbmdzcGhlcmUvcHJveHkvYmFja2VuZC9oYW5kbGVyL2Rpc3RzcWwvcmFsL2hpbnQvZW51bXMvSGludFNvdXJjZVR5cGUuamF2YQ==) | `0.00% <0.00%> (-42.86%)` | :arrow_down: |
   | [...iver/jdbc/core/driver/ShardingSphereDriverURL.java](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-amRiYy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zaGFyZGluZ3NwaGVyZS9kcml2ZXIvamRiYy9jb3JlL2RyaXZlci9TaGFyZGluZ1NwaGVyZURyaXZlclVSTC5qYXZh) | `72.41% <0.00%> (-17.06%)` | :arrow_down: |
   | ... and [551 more](https://codecov.io/gh/apache/shardingsphere/pull/23040/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | |
   
   :mega: We’re building smart automated test selection to slash your CI/CD build times. [Learn more](https://about.codecov.io/iterative-testing/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org