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 a4b557d4e48 Move ColumnSegmentInputInfo to inner class (#35691)
a4b557d4e48 is described below
commit a4b557d4e484cca7e17e4cd4d905cc66df0b4c00
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 13 13:55:54 2025 +0800
Move ColumnSegmentInputInfo to inner class (#35691)
---
.../dml/expression/type/ColumnSegmentBinder.java | 58 ++++++++++++++--------
.../generic/bound/ColumnSegmentInputInfo.java | 51 -------------------
2 files changed, 36 insertions(+), 73 deletions(-)
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/ColumnSegmentBinder.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/ColumnSegmentBinder.java
index 163325b59a5..3b9951271b8 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/ColumnSegmentBinder.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/ColumnSegmentBinder.java
@@ -22,7 +22,9 @@ import com.cedarsoftware.util.CaseInsensitiveSet;
import com.google.common.base.Strings;
import com.google.common.collect.Multimap;
import lombok.AccessLevel;
+import lombok.Getter;
import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
import org.apache.groovy.util.Maps;
import org.apache.shardingsphere.infra.binder.engine.segment.SegmentType;
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
@@ -38,7 +40,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Colu
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentInputInfo;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.TableSegmentBoundInfo;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -84,11 +85,11 @@ public final class ColumnSegmentBinder {
}
ColumnSegment result = copy(segment);
Collection<TableSegmentBinderContext> tableSegmentBinderContexts =
getTableSegmentBinderContexts(segment, parentSegmentType, binderContext,
tableBinderContexts, outerTableBinderContexts);
- ColumnSegmentInputInfo columnSegmentInputInfo =
getColumnSegmentInputInfo(segment, parentSegmentType,
tableSegmentBinderContexts, outerTableBinderContexts, binderContext);
- Optional<ColumnSegment> inputColumnSegment =
columnSegmentInputInfo.getInputColumnSegment();
+ ColumnSegmentInfo columnSegmentInfo = getColumnSegmentInfo(segment,
parentSegmentType, tableSegmentBinderContexts, outerTableBinderContexts,
binderContext);
+ Optional<ColumnSegment> inputColumnSegment =
columnSegmentInfo.getInputColumnSegment();
inputColumnSegment.ifPresent(optional ->
result.setVariable(optional.isVariable()));
segment.getOwner().ifPresent(optional ->
result.setOwner(bindOwnerTableContext(optional,
inputColumnSegment.orElse(null))));
- result.setColumnBoundInfo(createColumnSegmentBoundInfo(segment,
inputColumnSegment.orElse(null), columnSegmentInputInfo.getTableSourceType()));
+ result.setColumnBoundInfo(createColumnSegmentBoundInfo(segment,
inputColumnSegment.orElse(null), columnSegmentInfo.getTableSourceType()));
return result;
}
@@ -145,29 +146,29 @@ public final class ColumnSegmentBinder {
|| SegmentType.PREDICATE == parentSegmentType &&
binderContext.getUsingColumnNames().contains(segment.getIdentifier().getValue());
}
- private static ColumnSegmentInputInfo getColumnSegmentInputInfo(final
ColumnSegment segment, final SegmentType parentSegmentType, final
Collection<TableSegmentBinderContext> tableBinderContexts,
- final
Multimap<CaseInsensitiveString, TableSegmentBinderContext>
outerTableBinderContexts,
- final
SQLStatementBinderContext binderContext) {
- ColumnSegmentInputInfo result =
getInputInfoFromTableBinderContexts(tableBinderContexts, segment,
parentSegmentType);
+ private static ColumnSegmentInfo getColumnSegmentInfo(final ColumnSegment
segment, final SegmentType parentSegmentType, final
Collection<TableSegmentBinderContext> tableBinderContexts,
+ final
Multimap<CaseInsensitiveString, TableSegmentBinderContext>
outerTableBinderContexts,
+ final
SQLStatementBinderContext binderContext) {
+ ColumnSegmentInfo result =
getInputInfoFromTableBinderContexts(tableBinderContexts, segment,
parentSegmentType);
if (!result.getInputColumnSegment().isPresent()) {
- result = new
ColumnSegmentInputInfo(findInputColumnSegmentFromOuterTable(segment,
outerTableBinderContexts).orElse(null));
+ result = new
ColumnSegmentInfo(findInputColumnSegmentFromOuterTable(segment,
outerTableBinderContexts).orElse(null), TableSourceType.TEMPORARY_TABLE);
}
if (!result.getInputColumnSegment().isPresent()) {
- result = new
ColumnSegmentInputInfo(findInputColumnSegmentFromExternalTables(segment,
binderContext.getExternalTableBinderContexts()).orElse(null));
+ result = new
ColumnSegmentInfo(findInputColumnSegmentFromExternalTables(segment,
binderContext.getExternalTableBinderContexts()).orElse(null),
TableSourceType.TEMPORARY_TABLE);
}
if (!result.getInputColumnSegment().isPresent()) {
- result = new
ColumnSegmentInputInfo(findInputColumnSegmentByVariables(segment,
binderContext.getSqlStatement().getVariableNames()).orElse(null));
+ result = new
ColumnSegmentInfo(findInputColumnSegmentByVariables(segment,
binderContext.getSqlStatement().getVariableNames()).orElse(null),
TableSourceType.TEMPORARY_TABLE);
}
if (!result.getInputColumnSegment().isPresent()) {
- result = new
ColumnSegmentInputInfo(findInputColumnSegmentByPivotColumns(segment,
binderContext.getPivotColumnNames()).orElse(null));
+ result = new
ColumnSegmentInfo(findInputColumnSegmentByPivotColumns(segment,
binderContext.getPivotColumnNames()).orElse(null),
TableSourceType.TEMPORARY_TABLE);
}
ShardingSpherePreconditions.checkState(result.getInputColumnSegment().isPresent()
|| isSkipColumnBind(tableBinderContexts, outerTableBinderContexts.values()),
() -> new ColumnNotFoundException(segment.getExpression(),
SEGMENT_TYPE_MESSAGES.getOrDefault(parentSegmentType,
UNKNOWN_SEGMENT_TYPE_MESSAGE)));
return result;
}
- private static ColumnSegmentInputInfo
getInputInfoFromTableBinderContexts(final Collection<TableSegmentBinderContext>
tableBinderContexts,
-
final ColumnSegment segment, final SegmentType parentSegmentType) {
+ private static ColumnSegmentInfo getInputInfoFromTableBinderContexts(final
Collection<TableSegmentBinderContext> tableBinderContexts,
+ final
ColumnSegment segment, final SegmentType parentSegmentType) {
ColumnSegment inputColumnSegment = null;
TableSourceType tableSourceType = TableSourceType.TEMPORARY_TABLE;
for (TableSegmentBinderContext each : tableBinderContexts) {
@@ -185,7 +186,7 @@ public final class ColumnSegmentBinder {
break;
}
}
- return new ColumnSegmentInputInfo(inputColumnSegment, tableSourceType);
+ return new ColumnSegmentInfo(inputColumnSegment, tableSourceType);
}
private static TableSourceType getTableSourceTypeFromInputColumn(final
ColumnSegment inputColumnSegment) {
@@ -281,25 +282,38 @@ public final class ColumnSegmentBinder {
public static ColumnSegment bindUsingColumn(final ColumnSegment segment,
final SegmentType parentSegmentType,
final
Multimap<CaseInsensitiveString, TableSegmentBinderContext> tableBinderContexts)
{
ColumnSegment result = copy(segment);
- List<ColumnSegmentInputInfo> usingColumnSegmentInputInfos =
findUsingColumnSegmentInputInfos(tableBinderContexts.values(),
segment.getIdentifier().getValue());
-
ShardingSpherePreconditions.checkState(usingColumnSegmentInputInfos.size() >= 2,
+ List<ColumnSegmentInfo> usingColumnSegmentInfos =
findUsingColumnSegmentInfos(tableBinderContexts.values(),
segment.getIdentifier().getValue());
+ ShardingSpherePreconditions.checkState(usingColumnSegmentInfos.size()
>= 2,
() -> new ColumnNotFoundException(segment.getExpression(),
SEGMENT_TYPE_MESSAGES.getOrDefault(parentSegmentType,
UNKNOWN_SEGMENT_TYPE_MESSAGE)));
- ColumnSegmentInputInfo usingColumnInputInfo =
usingColumnSegmentInputInfos.get(0);
- ColumnSegmentInputInfo otherUsingColumnInputInfo =
usingColumnSegmentInputInfos.get(1);
+ ColumnSegmentInfo usingColumnInputInfo =
usingColumnSegmentInfos.get(0);
+ ColumnSegmentInfo otherUsingColumnInputInfo =
usingColumnSegmentInfos.get(1);
result.setColumnBoundInfo(createColumnSegmentBoundInfo(segment,
usingColumnInputInfo.getInputColumnSegment().orElse(null),
usingColumnInputInfo.getTableSourceType()));
result.setOtherUsingColumnBoundInfo(createColumnSegmentBoundInfo(segment,
otherUsingColumnInputInfo.getInputColumnSegment().orElse(null),
otherUsingColumnInputInfo.getTableSourceType()));
return result;
}
- private static List<ColumnSegmentInputInfo>
findUsingColumnSegmentInputInfos(final Collection<TableSegmentBinderContext>
tableBinderContexts, final String columnName) {
- List<ColumnSegmentInputInfo> result = new
ArrayList<>(tableBinderContexts.size());
+ private static List<ColumnSegmentInfo> findUsingColumnSegmentInfos(final
Collection<TableSegmentBinderContext> tableBinderContexts, final String
columnName) {
+ List<ColumnSegmentInfo> result = new
ArrayList<>(tableBinderContexts.size());
for (TableSegmentBinderContext each : tableBinderContexts) {
Optional<ProjectionSegment> projectionSegment =
each.findProjectionSegmentByColumnLabel(columnName);
if (projectionSegment.isPresent() && projectionSegment.get()
instanceof ColumnProjectionSegment) {
ColumnSegment columnSegment = ((ColumnProjectionSegment)
projectionSegment.get()).getColumn();
- result.add(new ColumnSegmentInputInfo(columnSegment,
each.getTableSourceType()));
+ result.add(new ColumnSegmentInfo(columnSegment,
each.getTableSourceType()));
}
}
return result;
}
+
+ @RequiredArgsConstructor
+ @Getter
+ static class ColumnSegmentInfo {
+
+ private final ColumnSegment inputColumnSegment;
+
+ private final TableSourceType tableSourceType;
+
+ Optional<ColumnSegment> getInputColumnSegment() {
+ return Optional.ofNullable(inputColumnSegment);
+ }
+ }
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/generic/bound/ColumnSegmentInputInfo.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/generic/bound/ColumnSegmentInputInfo.java
deleted file mode 100644
index 30486b871e3..00000000000
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/generic/bound/ColumnSegmentInputInfo.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.sql.parser.statement.core.enums.TableSourceType;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
-
-import java.util.Optional;
-
-/**
- * Column segment input info.
- */
-@RequiredArgsConstructor
-@Getter
-public final class ColumnSegmentInputInfo {
-
- private final ColumnSegment inputColumnSegment;
-
- private final TableSourceType tableSourceType;
-
- public ColumnSegmentInputInfo(final ColumnSegment inputColumnSegment) {
- this.inputColumnSegment = inputColumnSegment;
- tableSourceType = TableSourceType.TEMPORARY_TABLE;
- }
-
- /**
- * Get input column segment.
- *
- * @return input column segment
- */
- public Optional<ColumnSegment> getInputColumnSegment() {
- return Optional.ofNullable(inputColumnSegment);
- }
-}