This is an automated email from the ASF dual-hosted git repository.
yx9o 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 26d0a510042 Remove AbstractWhereSegmentShadowColumnConditionIterator
(#25902)
26d0a510042 is described below
commit 26d0a510042b560b04637e74f4303a3cd621d3df
Author: Liang Zhang <[email protected]>
AuthorDate: Fri May 26 09:24:04 2023 +0800
Remove AbstractWhereSegmentShadowColumnConditionIterator (#25902)
* Refactor AbstractWhereSegmentShadowColumnConditionIterator
* Refactor ShadowInsertStatementRoutingEngine
* Refactor ShadowInsertStatementRoutingEngine
* Remove AbstractWhereSegmentShadowColumnConditionIterator
---
.../dml/AbstractShadowDMLStatementRouteEngine.java | 25 ++++----
...tWhereSegmentShadowColumnConditionIterator.java | 69 --------------------
.../dml/ShadowDeleteStatementRoutingEngine.java | 23 ++-----
.../dml/ShadowInsertStatementRoutingEngine.java | 74 ++++++----------------
.../dml/ShadowSelectStatementRoutingEngine.java | 32 ++++------
.../dml/ShadowUpdateStatementRoutingEngine.java | 27 ++++----
.../shadow/route/engine/util/ShadowExtractor.java | 13 ----
7 files changed, 64 insertions(+), 199 deletions(-)
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
index a59e2152280..18a33a269e7 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
@@ -40,7 +40,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Collection;
import java.util.Collections;
-import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
@@ -145,24 +144,24 @@ public abstract class
AbstractShadowDMLStatementRouteEngine implements ShadowRou
if (columnShadowAlgorithms.isEmpty()) {
return false;
}
- Iterator<Optional<ShadowColumnCondition>> iterator =
getShadowColumnConditionIterator(shadowColumn);
- ShadowDetermineCondition shadowDetermineCondition;
- while (iterator.hasNext()) {
- Optional<ShadowColumnCondition> next = iterator.next();
- if (!next.isPresent()) {
- continue;
+ for (ShadowColumnCondition each :
getShadowColumnConditions(shadowColumn)) {
+ if (isMatchColumnShadowAlgorithm(shadowTable,
columnShadowAlgorithms, each)) {
+ return true;
}
- for (ColumnShadowAlgorithm<Comparable<?>> each :
columnShadowAlgorithms) {
- shadowDetermineCondition = new
ShadowDetermineCondition(shadowTable, operationType);
- if (ColumnShadowAlgorithmDeterminer.isShadow(each,
shadowDetermineCondition.initShadowColumnCondition(next.get()))) {
- return true;
- }
+ }
+ return false;
+ }
+
+ private boolean isMatchColumnShadowAlgorithm(final String shadowTable,
final Collection<ColumnShadowAlgorithm<Comparable<?>>> algorithms, final
ShadowColumnCondition condition) {
+ for (ColumnShadowAlgorithm<Comparable<?>> each : algorithms) {
+ if (ColumnShadowAlgorithmDeterminer.isShadow(each, new
ShadowDetermineCondition(shadowTable,
operationType).initShadowColumnCondition(condition))) {
+ return true;
}
}
return false;
}
- protected abstract Iterator<Optional<ShadowColumnCondition>>
getShadowColumnConditionIterator(String shadowColumn);
+ protected abstract Collection<ShadowColumnCondition>
getShadowColumnConditions(String shadowColumnName);
protected final String getSingleTableName() {
return tableAliasNameMappings.entrySet().iterator().next().getValue();
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractWhereSegmentShadowColumnConditionIterator.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractWhereSegmentShadowColumnConditionIterator.java
deleted file mode 100644
index 2326a8e0100..00000000000
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractWhereSegmentShadowColumnConditionIterator.java
+++ /dev/null
@@ -1,69 +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.shadow.route.engine.dml;
-
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.shadow.condition.ShadowColumnCondition;
-import org.apache.shardingsphere.shadow.route.engine.util.ShadowExtractor;
-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 java.util.Iterator;
-import java.util.Optional;
-
-/**
- * Abstract shadow column condition iterator of where segment.
- */
-@RequiredArgsConstructor
-public abstract class AbstractWhereSegmentShadowColumnConditionIterator
implements Iterator<Optional<ShadowColumnCondition>> {
-
- @Getter(AccessLevel.PROTECTED)
- private final String shadowColumn;
-
- private final Iterator<ExpressionSegment> iterator;
-
- @Override
- public boolean hasNext() {
- return iterator.hasNext();
- }
-
- @Override
- public Optional<ShadowColumnCondition> next() {
- ExpressionSegment expressionSegment = iterator.next();
- Optional<ColumnSegment> columnSegment =
ShadowExtractor.extractColumn(expressionSegment);
- if (!columnSegment.isPresent()) {
- return Optional.empty();
- }
- String column = columnSegment.get().getIdentifier().getValue();
- if (!shadowColumn.equals(column)) {
- return Optional.empty();
- }
- return nextShadowColumnCondition(expressionSegment,
columnSegment.get());
- }
-
- /**
- * Next shadow column condition.
- *
- * @param expressionSegment expression segment
- * @param columnSegment column segment
- * @return shadow column condition
- */
- protected abstract Optional<ShadowColumnCondition>
nextShadowColumnCondition(ExpressionSegment expressionSegment, ColumnSegment
columnSegment);
-}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngine.java
index b96d6b7fd16..26747f56c2c 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngine.java
@@ -21,17 +21,14 @@ import
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementConte
import org.apache.shardingsphere.shadow.api.shadow.ShadowOperationType;
import org.apache.shardingsphere.shadow.condition.ShadowColumnCondition;
import org.apache.shardingsphere.shadow.route.engine.util.ShadowExtractor;
-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.predicate.AndPredicate;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.util.ExpressionExtractUtils;
import java.util.Collection;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Optional;
/**
* Shadow delete statement routing engine.
@@ -49,8 +46,12 @@ public final class ShadowDeleteStatementRoutingEngine
extends AbstractShadowDMLS
}
@Override
- protected Iterator<Optional<ShadowColumnCondition>>
getShadowColumnConditionIterator(final String shadowColumn) {
- return new ShadowColumnConditionIterator(shadowColumn,
getWhereSegment());
+ protected Collection<ShadowColumnCondition>
getShadowColumnConditions(final String shadowColumnName) {
+ Collection<ShadowColumnCondition> result = new LinkedList<>();
+ for (ExpressionSegment each : getWhereSegment()) {
+ ShadowExtractor.extractValues(each, parameters).map(values -> new
ShadowColumnCondition(getSingleTableName(), shadowColumnName,
values)).ifPresent(result::add);
+ }
+ return result;
}
private Collection<ExpressionSegment> getWhereSegment() {
@@ -62,16 +63,4 @@ public final class ShadowDeleteStatementRoutingEngine
extends AbstractShadowDMLS
}
return result;
}
-
- private final class ShadowColumnConditionIterator extends
AbstractWhereSegmentShadowColumnConditionIterator {
-
- private ShadowColumnConditionIterator(final String shadowColumn, final
Collection<ExpressionSegment> predicates) {
- super(shadowColumn, predicates.iterator());
- }
-
- @Override
- protected Optional<ShadowColumnCondition>
nextShadowColumnCondition(final ExpressionSegment expressionSegment, final
ColumnSegment columnSegment) {
- return ShadowExtractor.extractValues(expressionSegment,
parameters).map(values -> new ShadowColumnCondition(getSingleTableName(),
getShadowColumn(), values));
- }
- }
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngine.java
index bcb8e3b1439..5da28c38119 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngine.java
@@ -19,15 +19,14 @@ package org.apache.shardingsphere.shadow.route.engine.dml;
import
org.apache.shardingsphere.infra.binder.segment.insert.values.InsertValueContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
+import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.shadow.api.shadow.ShadowOperationType;
import org.apache.shardingsphere.shadow.condition.ShadowColumnCondition;
import
org.apache.shardingsphere.shadow.exception.syntax.UnsupportedShadowInsertValueException;
import java.util.Collection;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Optional;
/**
* Shadow insert statement routing engine.
@@ -42,59 +41,28 @@ public final class ShadowInsertStatementRoutingEngine
extends AbstractShadowDMLS
}
@Override
- protected Iterator<Optional<ShadowColumnCondition>>
getShadowColumnConditionIterator(final String shadowColumn) {
- return new ShadowColumnConditionIterator(shadowColumn,
getColumnNames().iterator(), sqlStatementContext.getInsertValueContexts());
- }
-
- private Collection<String> getColumnNames() {
- return sqlStatementContext.getInsertColumnNames();
- }
-
- private final class ShadowColumnConditionIterator implements
Iterator<Optional<ShadowColumnCondition>> {
-
- private int index;
-
- private final String shadowColumn;
-
- private final Iterator<String> iterator;
-
- private final List<InsertValueContext> insertValueContexts;
-
- private ShadowColumnConditionIterator(final String shadowColumn, final
Iterator<String> iterator, final List<InsertValueContext> insertValueContexts) {
- index = 0;
- this.shadowColumn = shadowColumn;
- this.iterator = iterator;
- this.insertValueContexts = insertValueContexts;
- }
-
- @Override
- public boolean hasNext() {
- return iterator.hasNext();
- }
-
- @Override
- public Optional<ShadowColumnCondition> next() {
- String columnName = iterator.next();
- if (!shadowColumn.equals(columnName)) {
- index++;
- return Optional.empty();
+ protected Collection<ShadowColumnCondition>
getShadowColumnConditions(final String shadowColumnName) {
+ Collection<ShadowColumnCondition> result = new LinkedList<>();
+ int columnIndex = 0;
+ for (String each : sqlStatementContext.getInsertColumnNames()) {
+ if (!shadowColumnName.equals(each)) {
+ columnIndex++;
+ continue;
}
- Optional<Collection<Comparable<?>>> columnValues =
getColumnValues(insertValueContexts, index);
- index++;
- return columnValues.map(each -> new
ShadowColumnCondition(getSingleTableName(), columnName, each));
+ Collection<Comparable<?>> columnValues =
getColumnValues(sqlStatementContext.getInsertValueContexts(), columnIndex);
+ columnIndex++;
+ result.add(new ShadowColumnCondition(getSingleTableName(), each,
columnValues));
}
-
- private Optional<Collection<Comparable<?>>> getColumnValues(final
List<InsertValueContext> insertValueContexts, final int columnIndex) {
- Collection<Comparable<?>> result = new LinkedList<>();
- for (InsertValueContext each : insertValueContexts) {
- Object valueObject =
each.getLiteralValue(columnIndex).orElseThrow(() -> new
UnsupportedShadowInsertValueException(columnIndex));
- if (valueObject instanceof Comparable<?>) {
- result.add((Comparable<?>) valueObject);
- } else {
- return Optional.empty();
- }
- }
- return result.isEmpty() ? Optional.empty() : Optional.of(result);
+ return result;
+ }
+
+ private Collection<Comparable<?>> getColumnValues(final
List<InsertValueContext> insertValueContexts, final int columnIndex) {
+ Collection<Comparable<?>> result = new LinkedList<>();
+ for (InsertValueContext each : insertValueContexts) {
+ Object columnValue =
each.getLiteralValue(columnIndex).orElseThrow(() -> new
UnsupportedShadowInsertValueException(columnIndex));
+ ShardingSpherePreconditions.checkState(columnValue instanceof
Comparable<?>, () -> new UnsupportedShadowInsertValueException(columnIndex));
+ result.add((Comparable<?>) columnValue);
}
+ return result;
}
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngine.java
index c951c9803ac..cd9771495f3 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngine.java
@@ -26,10 +26,10 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Expressi
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.AndPredicate;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.util.ColumnExtractor;
import
org.apache.shardingsphere.sql.parser.sql.common.util.ExpressionExtractUtils;
import java.util.Collection;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
@@ -50,8 +50,16 @@ public final class ShadowSelectStatementRoutingEngine
extends AbstractShadowDMLS
}
@Override
- protected Iterator<Optional<ShadowColumnCondition>>
getShadowColumnConditionIterator(final String shadowColumn) {
- return new ShadowColumnConditionIterator(shadowColumn,
getWhereSegment());
+ protected Collection<ShadowColumnCondition>
getShadowColumnConditions(final String shadowColumnName) {
+ Collection<ShadowColumnCondition> result = new LinkedList<>();
+ for (ExpressionSegment each : getWhereSegment()) {
+ Collection<ColumnSegment> columns = ColumnExtractor.extract(each);
+ if (1 != columns.size()) {
+ continue;
+ }
+ ShadowExtractor.extractValues(each, parameters).map(values -> new
ShadowColumnCondition(extractOwnerName(columns.iterator().next()),
shadowColumnName, values)).ifPresent(result::add);
+ }
+ return result;
}
private Collection<ExpressionSegment> getWhereSegment() {
@@ -64,20 +72,8 @@ public final class ShadowSelectStatementRoutingEngine
extends AbstractShadowDMLS
return result;
}
- private final class ShadowColumnConditionIterator extends
AbstractWhereSegmentShadowColumnConditionIterator {
-
- private ShadowColumnConditionIterator(final String shadowColumn, final
Collection<ExpressionSegment> predicates) {
- super(shadowColumn, predicates.iterator());
- }
-
- @Override
- protected Optional<ShadowColumnCondition>
nextShadowColumnCondition(final ExpressionSegment expressionSegment, final
ColumnSegment columnSegment) {
- return ShadowExtractor.extractValues(expressionSegment,
parameters).map(values -> new
ShadowColumnCondition(extractOwnerName(columnSegment), getShadowColumn(),
values));
- }
-
- private String extractOwnerName(final ColumnSegment columnSegment) {
- Optional<OwnerSegment> owner = columnSegment.getOwner();
- return owner.isPresent() ?
getTableAliasNameMappings().get(owner.get().getIdentifier().getValue()) :
getTableAliasNameMappings().keySet().iterator().next();
- }
+ private String extractOwnerName(final ColumnSegment columnSegment) {
+ Optional<OwnerSegment> owner = columnSegment.getOwner();
+ return owner.isPresent() ?
getTableAliasNameMappings().get(owner.get().getIdentifier().getValue()) :
getTableAliasNameMappings().keySet().iterator().next();
}
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngine.java
index 526776da839..d00f42b2e0a 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngine.java
@@ -25,13 +25,12 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.Column
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.AndPredicate;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.util.ColumnExtractor;
import
org.apache.shardingsphere.sql.parser.sql.common.util.ExpressionExtractUtils;
import java.util.Collection;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Optional;
/**
* Shadow update statement routing engine.
@@ -49,8 +48,16 @@ public final class ShadowUpdateStatementRoutingEngine
extends AbstractShadowDMLS
}
@Override
- protected Iterator<Optional<ShadowColumnCondition>>
getShadowColumnConditionIterator(final String shadowColumn) {
- return new ShadowColumnConditionIterator(shadowColumn,
getWhereSegment());
+ protected Collection<ShadowColumnCondition>
getShadowColumnConditions(final String shadowColumnName) {
+ Collection<ShadowColumnCondition> result = new LinkedList<>();
+ for (ExpressionSegment each : getWhereSegment()) {
+ Collection<ColumnSegment> columns = ColumnExtractor.extract(each);
+ if (1 != columns.size()) {
+ continue;
+ }
+ ShadowExtractor.extractValues(each, parameters).map(values -> new
ShadowColumnCondition(getSingleTableName(), shadowColumnName,
values)).ifPresent(result::add);
+ }
+ return result;
}
private Collection<ExpressionSegment> getWhereSegment() {
@@ -62,16 +69,4 @@ public final class ShadowUpdateStatementRoutingEngine
extends AbstractShadowDMLS
}
return result;
}
-
- private final class ShadowColumnConditionIterator extends
AbstractWhereSegmentShadowColumnConditionIterator {
-
- private ShadowColumnConditionIterator(final String shadowColumn, final
Collection<ExpressionSegment> predicates) {
- super(shadowColumn, predicates.iterator());
- }
-
- @Override
- protected Optional<ShadowColumnCondition>
nextShadowColumnCondition(final ExpressionSegment expressionSegment, final
ColumnSegment columnSegment) {
- return ShadowExtractor.extractValues(expressionSegment,
parameters).map(values -> new ShadowColumnCondition(getSingleTableName(),
getShadowColumn(), values));
- }
- }
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
index b777c73c4dc..6558f64531e 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.shadow.route.engine.util;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
@@ -27,7 +26,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpr
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.SimpleExpressionSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.util.ColumnExtractor;
import java.util.Collection;
import java.util.LinkedList;
@@ -40,17 +38,6 @@ import java.util.Optional;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ShadowExtractor {
- /**
- * Get column in expression segment.
- *
- * @param expressionSegment expression segment
- * @return column segment
- */
- public static Optional<ColumnSegment> extractColumn(final
ExpressionSegment expressionSegment) {
- Collection<ColumnSegment> columnSegments =
ColumnExtractor.extract(expressionSegment);
- return 1 == columnSegments.size() ?
Optional.of(columnSegments.iterator().next()) : Optional.empty();
- }
-
/**
* Get values in expression segment.
*