This is an automated email from the ASF dual-hosted git repository.

jianglongtao 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 5e72f8daeea Fix Oracle encrypt e2e error caused by expression segment 
rewrite (#30807)
5e72f8daeea is described below

commit 5e72f8daeea7f5bf213ecaa14a40d98c34ef80fb
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Apr 8 20:04:50 2024 +0800

    Fix Oracle encrypt e2e error caused by expression segment rewrite (#30807)
---
 .../from/impl/SubqueryTableSegmentBinder.java      | 24 +++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SubqueryTableSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SubqueryTableSegmentBinder.java
index a10785e2691..156703a1992 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SubqueryTableSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SubqueryTableSegmentBinder.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.infra.binder.segment.from.impl;
 import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.util.ProjectionUtils;
 import 
org.apache.shardingsphere.infra.binder.segment.from.SimpleTableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.segment.parameter.impl.ParameterMarkerExpressionSegmentBinder;
@@ -28,6 +29,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementBinde
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
@@ -35,6 +37,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnPr
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvailable;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.bounded.ColumnSegmentBoundedInfo;
@@ -129,10 +132,9 @@ public final class SubqueryTableSegmentBinder {
         return result;
     }
     
-    private static ColumnProjectionSegment createColumnProjection(final 
ExpressionProjectionSegment expressionProjectionSegment, final IdentifierValue 
subqueryTableName,
-                                                                  final 
DatabaseType databaseType) {
-        ColumnSegment newColumnSegment = new ColumnSegment(0, 0, 
expressionProjectionSegment.getAlias().orElseGet(() -> new 
IdentifierValue(expressionProjectionSegment.getText(),
-                new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getQuoteCharacter())));
+    private static ColumnProjectionSegment createColumnProjection(final 
ExpressionSegment expressionSegment, final IdentifierValue subqueryTableName, 
final DatabaseType databaseType) {
+        ColumnSegment newColumnSegment = new ColumnSegment(0, 0,
+                new 
IdentifierValue(getColumnNameFromExpression(expressionSegment, databaseType), 
new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getQuoteCharacter()));
         if (!Strings.isNullOrEmpty(subqueryTableName.getValue())) {
             newColumnSegment.setOwner(new OwnerSegment(0, 0, 
subqueryTableName));
         }
@@ -141,15 +143,13 @@ public final class SubqueryTableSegmentBinder {
         return result;
     }
     
-    private static ProjectionSegment createColumnProjection(final 
AggregationProjectionSegment aggregationProjectionSegment, final 
IdentifierValue subqueryTableName,
-                                                            final DatabaseType 
databaseType) {
-        ColumnSegment newColumnSegment = new ColumnSegment(0, 0, 
aggregationProjectionSegment.getAlias().orElseGet(() -> new 
IdentifierValue(aggregationProjectionSegment.getText(),
-                new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getQuoteCharacter())));
-        if (!Strings.isNullOrEmpty(subqueryTableName.getValue())) {
-            newColumnSegment.setOwner(new OwnerSegment(0, 0, 
subqueryTableName));
+    private static String getColumnNameFromExpression(final ExpressionSegment 
expressionSegment, final DatabaseType databaseType) {
+        String result;
+        if (expressionSegment instanceof AliasAvailable && ((AliasAvailable) 
expressionSegment).getAlias().isPresent()) {
+            result = ProjectionUtils.getColumnLabelFromAlias(((AliasAvailable) 
expressionSegment).getAlias().get(), databaseType);
+        } else {
+            result = 
ProjectionUtils.getColumnNameFromExpression(expressionSegment.getText(), 
databaseType);
         }
-        ColumnProjectionSegment result = new 
ColumnProjectionSegment(newColumnSegment);
-        result.setVisible(true);
         return result;
     }
 }

Reply via email to