Copilot commented on code in PR #37507:
URL: https://github.com/apache/shardingsphere/pull/37507#discussion_r2646628858
##########
parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/ColumnExtractorTest.java:
##########
@@ -17,68 +17,261 @@
package org.apache.shardingsphere.sql.parser.statement.core.extractor;
+import
org.apache.shardingsphere.database.connector.core.metadata.database.enums.NullsOrderType;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.sql.parser.statement.core.enums.AggregationType;
+import org.apache.shardingsphere.sql.parser.statement.core.enums.CombineType;
+import
org.apache.shardingsphere.sql.parser.statement.core.enums.OrderDirection;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BetweenExpression;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.InExpression;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.RowExpression;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonTableExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubquerySegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.AggregationProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ColumnProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.DatetimeProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ExpressionProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.IntervalExpressionProjection;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionsSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.SubqueryProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.join.OuterJoinExpression;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.GroupBySegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.OrderBySegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.ColumnOrderByItemSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.ExpressionOrderByItemSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.OrderByItemSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.HavingSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.CollectionTableSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.JoinTableSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SubqueryTableSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-import org.junit.jupiter.params.support.ParameterDeclarations;
+import org.junit.jupiter.params.provider.MethodSource;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
class ColumnExtractorTest {
- private static final ColumnSegment COLUMN_SEGMENT = new ColumnSegment(35,
42, new IdentifierValue("order_item_id"));
-
@Test
void assertExtractColumnSegments() {
- Collection<ColumnSegment> columnSegments =
ColumnExtractor.extractColumnSegments(createWhereSegments());
- assertThat(columnSegments.size(), is(2));
- Iterator<ColumnSegment> iterator = columnSegments.iterator();
- ColumnSegment firstColumn = iterator.next();
- assertThat(firstColumn.getIdentifier().getValue(), is("name"));
- ColumnSegment secondColumn = iterator.next();
- assertThat(secondColumn.getIdentifier().getValue(), is("pwd"));
+
assertThat(toColumnNames(ColumnExtractor.extractColumnSegments(createWhereSegments())),
is(Arrays.asList("foo_name", "bar_pwd")));
+ }
+
+ @ParameterizedTest(name = "SelectStatement: {0}")
+ @MethodSource("provideSelectStatements")
+ void assertExtractFromSelectStatement(final String name, final
SelectStatement selectStatement, final boolean containsSubQuery,
+ final List<String>
expectedColumnNames) {
+ Collection<ColumnSegment> columnSegments = new LinkedList<>();
+ ColumnExtractor.extractFromSelectStatement(columnSegments,
selectStatement, containsSubQuery);
+ assertThat(toColumnNames(columnSegments), is(expectedColumnNames));
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("provideExpressions")
Review Comment:
The expected column names list on lines 87-91 is very long and difficult to
read. Consider breaking it into multiple lines with one column name per line or
grouping related column names together for better readability and
maintainability.
##########
parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/ColumnExtractorTest.java:
##########
@@ -17,68 +17,261 @@
package org.apache.shardingsphere.sql.parser.statement.core.extractor;
+import
org.apache.shardingsphere.database.connector.core.metadata.database.enums.NullsOrderType;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.sql.parser.statement.core.enums.AggregationType;
+import org.apache.shardingsphere.sql.parser.statement.core.enums.CombineType;
+import
org.apache.shardingsphere.sql.parser.statement.core.enums.OrderDirection;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BetweenExpression;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.InExpression;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.RowExpression;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonTableExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubquerySegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.AggregationProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ColumnProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.DatetimeProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ExpressionProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.IntervalExpressionProjection;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionsSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.SubqueryProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.join.OuterJoinExpression;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.GroupBySegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.OrderBySegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.ColumnOrderByItemSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.ExpressionOrderByItemSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.OrderByItemSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.HavingSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.CollectionTableSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.JoinTableSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SubqueryTableSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-import org.junit.jupiter.params.support.ParameterDeclarations;
+import org.junit.jupiter.params.provider.MethodSource;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
class ColumnExtractorTest {
- private static final ColumnSegment COLUMN_SEGMENT = new ColumnSegment(35,
42, new IdentifierValue("order_item_id"));
-
@Test
void assertExtractColumnSegments() {
- Collection<ColumnSegment> columnSegments =
ColumnExtractor.extractColumnSegments(createWhereSegments());
- assertThat(columnSegments.size(), is(2));
- Iterator<ColumnSegment> iterator = columnSegments.iterator();
- ColumnSegment firstColumn = iterator.next();
- assertThat(firstColumn.getIdentifier().getValue(), is("name"));
- ColumnSegment secondColumn = iterator.next();
- assertThat(secondColumn.getIdentifier().getValue(), is("pwd"));
+
assertThat(toColumnNames(ColumnExtractor.extractColumnSegments(createWhereSegments())),
is(Arrays.asList("foo_name", "bar_pwd")));
+ }
+
+ @ParameterizedTest(name = "SelectStatement: {0}")
+ @MethodSource("provideSelectStatements")
+ void assertExtractFromSelectStatement(final String name, final
SelectStatement selectStatement, final boolean containsSubQuery,
+ final List<String>
expectedColumnNames) {
+ Collection<ColumnSegment> columnSegments = new LinkedList<>();
+ ColumnExtractor.extractFromSelectStatement(columnSegments,
selectStatement, containsSubQuery);
+ assertThat(toColumnNames(columnSegments), is(expectedColumnNames));
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("provideExpressions")
+ void assertExtract(final String name, final ExpressionSegment expression,
final List<String> expectedColumnNames) {
+ assertThat(toColumnNames(ColumnExtractor.extract(expression)),
is(expectedColumnNames));
}
- private Collection<WhereSegment> createWhereSegments() {
+ private static Stream<Arguments> provideSelectStatements() {
+ return Stream.of(
+ Arguments.of("FullSegments",
createSelectStatementForExtraction(), true, Arrays.asList(
+ "foo_projection_column", "foo_projection_agg_param",
"foo_datetime_left", "foo_datetime_right", "foo_expression_projection",
"foo_interval_left",
+ "foo_interval_right", "foo_interval_minus",
"foo_subquery_projection_column", "foo_collection_expr",
"foo_cte_subquery_column", "foo_inner_join_left",
+ "bar_inner_join_right", "foo_subquery_table_column",
"foo_join_left", "bar_join_right", "foo_using_column",
"bar_derived_using_column", "foo_where_left",
+ "bar_where_right", "foo_group_by_column",
"foo_group_by_expr_column", "foo_having_left", "bar_having_right",
"foo_order_by_column", "bar_order_by_expr_column",
+ "foo_combine_left_column",
"bar_combine_right_column")),
+ Arguments.of("SkipSubqueryFlagFalse",
createSelectStatementSkippingSubquery(), false, Collections.emptyList()),
+ Arguments.of("NoOptionalSegments",
createSelectStatementWithoutOptionalSegments(), true, Collections.emptyList()));
+ }
+
+ private static Stream<Arguments> provideExpressions() {
+ return Stream.of(
+ Arguments.of("BinaryOperationColumns",
createBinaryOperation("foo_left_col", "bar_right_col"),
Arrays.asList("foo_left_col", "bar_right_col")),
+ Arguments.of("BinaryOperationOuterJoin",
createBinaryOperationWithOuterJoin(), Arrays.asList("foo_outer_left",
"bar_outer_right")),
+ Arguments.of("InExpressionWithColumnLeft",
createInExpression(createColumnSegment("foo_in_left"),
+ createBinaryOperation("foo_in_right_left",
"bar_in_right_right")), Arrays.asList("foo_in_left", "foo_in_right_left",
"bar_in_right_right")),
+ Arguments.of("InExpressionWithRowLeft",
createInExpression(createRowExpression(),
+ createBinaryOperation("foo_row_right_left",
"bar_row_right_right")), Arrays.asList("foo_row_item", "foo_row_right_left",
"bar_row_right_right")),
+ Arguments.of("InExpressionWithFunctionLeft",
+
createInExpression(createFunctionWithColumns("foo_function_left_column"),
createBinaryOperation("foo_function_right_left", "bar_function_right_right")),
+ Arrays.asList("foo_function_left_column",
"foo_function_right_left", "bar_function_right_right")),
+ Arguments.of("BetweenExpressionWithColumns",
createBetweenExpressionWithColumns(), Arrays.asList("foo_between_left",
"foo_between_between", "foo_between_and")),
+ Arguments.of("BetweenExpressionWithNonColumnOperands",
createBetweenExpressionWithMixedOperands(),
+ Arrays.asList("foo_between_function_column",
"foo_between_binary_left", "bar_between_binary_right")),
+ Arguments.of("AggregationProjectionWithFunctionParameters",
createAggregationProjectionExpression(),
+ Arrays.asList("foo_agg_direct", "foo_agg_func_direct",
"foo_agg_func_binary_left", "bar_agg_func_binary_right")),
+ Arguments.of("FunctionSegmentWithNestedBinary",
createFunctionSegmentWithBinary(),
+ Arrays.asList("foo_function_direct",
"foo_function_binary_left", "bar_function_binary_right")));
+ }
+
+ private static Collection<WhereSegment> createWhereSegments() {
BinaryOperationExpression leftExpression = new
BinaryOperationExpression(10, 24,
- new ColumnSegment(10, 13, new IdentifierValue("name")), new
LiteralExpressionSegment(18, 22, "LiLei"), "=", "name = 'LiLei'");
+ new ColumnSegment(10, 13, new IdentifierValue("foo_name")),
new LiteralExpressionSegment(18, 22, "LiLei"), "=", "foo_name = 'LiLei'");
BinaryOperationExpression rightExpression = new
BinaryOperationExpression(30, 44,
- new ColumnSegment(30, 32, new IdentifierValue("pwd")), new
LiteralExpressionSegment(40, 45, "123456"), "=", "pwd = '123456'");
- return Collections.singleton(new WhereSegment(0, 0, new
BinaryOperationExpression(0, 0, leftExpression, rightExpression, "AND", "name =
'LiLei' AND pwd = '123456'")));
+ new ColumnSegment(30, 32, new IdentifierValue("bar_pwd")), new
LiteralExpressionSegment(40, 45, "123456"), "=", "bar_pwd = '123456'");
+ return Collections.singleton(new WhereSegment(0, 0, new
BinaryOperationExpression(0, 0, leftExpression, rightExpression, "AND",
"foo_name = 'LiLei' AND bar_pwd = '123456'")));
}
- @ParameterizedTest(name = "{0}")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- void assertExtract(final ExpressionSegment expression) {
- Collection<ColumnSegment> columnSegments =
ColumnExtractor.extract(expression);
- assertThat(columnSegments.size(), is(1));
- assertThat(columnSegments.iterator().next(), is(COLUMN_SEGMENT));
- }
-
- private static final class TestCaseArgumentsProvider implements
ArgumentsProvider {
-
- @Override
- public Stream<? extends Arguments> provideArguments(final
ParameterDeclarations parameters, final ExtensionContext context) {
- return Stream.of(Arguments.of(new BinaryOperationExpression(0, 0,
COLUMN_SEGMENT, null, null, null)),
- Arguments.of(new InExpression(0, 0, COLUMN_SEGMENT, null,
false)),
- Arguments.of(new BetweenExpression(0, 0, COLUMN_SEGMENT,
null, null, false)));
- }
+ private static SelectStatement createSelectStatementForExtraction() {
+ ProjectionsSegment projections = new ProjectionsSegment(0, 0);
+ projections.getProjections().add(new
ColumnProjectionSegment(createColumnSegment("foo_projection_column")));
+ AggregationProjectionSegment aggregationProjectionSegment = new
AggregationProjectionSegment(0, 0, AggregationType.COUNT,
"COUNT(foo_projection_agg_param)");
+
aggregationProjectionSegment.getParameters().add(createColumnSegment("foo_projection_agg_param"));
+ projections.getProjections().add(aggregationProjectionSegment);
+ projections.getProjections().add(new DatetimeProjectionSegment(0, 0,
createColumnSegment("foo_datetime_left"),
createColumnSegment("foo_datetime_right"), "date_add"));
+ projections.getProjections().add(new ExpressionProjectionSegment(0, 0,
"foo_expression_projection", createColumnSegment("foo_expression_projection")));
+ projections.getProjections().add(new IntervalExpressionProjection(0,
0, createColumnSegment("foo_interval_left"),
+ createColumnSegment("foo_interval_minus"),
createColumnSegment("foo_interval_right"), "interval expr"));
+ projections.getProjections().add(new SubqueryProjectionSegment(new
SubquerySegment(0, 0,
createSelectStatementWithProjection("foo_subquery_projection_column"), ""),
"subquery"));
+ SelectStatement result = new SelectStatement(mock(DatabaseType.class));
+ result.setProjections(projections);
+ result.setFrom(createJoinTableForExtraction());
+ result.setWhere(new WhereSegment(0, 0,
createBinaryOperation("foo_where_left", "bar_where_right")));
+ result.setGroupBy(createGroupBySegment());
+ result.setHaving(new HavingSegment(0, 0,
createBinaryOperation("foo_having_left", "bar_having_right")));
+ result.setOrderBy(createOrderBySegment());
+ result.setCombine(createCombineSegment());
+ return result;
+ }
+
+ private static SelectStatement
createSelectStatementWithoutOptionalSegments() {
+ SelectStatement result = new SelectStatement(mock(DatabaseType.class));
+ result.setProjections(new ProjectionsSegment(0, 0));
+ return result;
+ }
+
+ private static SelectStatement createSelectStatementSkippingSubquery() {
+ ProjectionsSegment projectionsSegment = new ProjectionsSegment(0, 0);
+ projectionsSegment.getProjections().add(new
SubqueryProjectionSegment(new SubquerySegment(0, 0,
createSelectStatementWithProjection("foo_skip_projection"), ""), "sub"));
+ SelectStatement result = new SelectStatement(mock(DatabaseType.class));
+ result.setProjections(projectionsSegment);
+ result.setFrom(new SubqueryTableSegment(0, 0, new SubquerySegment(0,
0, createSelectStatementWithProjection("bar_skip_from"), "")));
+ return result;
+ }
+
+ private static GroupBySegment createGroupBySegment() {
+ Collection<OrderByItemSegment> groupByItems = new LinkedList<>();
+ groupByItems.add(new
ColumnOrderByItemSegment(createColumnSegment("foo_group_by_column"),
OrderDirection.ASC, NullsOrderType.FIRST));
+ groupByItems.add(new ExpressionOrderByItemSegment(0, 0,
"group_by_expr", OrderDirection.ASC, NullsOrderType.FIRST,
createColumnSegment("foo_group_by_expr_column")));
+ return new GroupBySegment(0, 0, groupByItems);
+ }
+
+ private static OrderBySegment createOrderBySegment() {
+ Collection<OrderByItemSegment> orderByItems = new LinkedList<>();
+ orderByItems.add(new
ColumnOrderByItemSegment(createColumnSegment("foo_order_by_column"),
OrderDirection.DESC, NullsOrderType.LAST));
+ orderByItems.add(new ExpressionOrderByItemSegment(0, 0,
"order_by_expr", OrderDirection.DESC, NullsOrderType.LAST,
createColumnSegment("bar_order_by_expr_column")));
+ return new OrderBySegment(0, 0, orderByItems);
+ }
+
+ private static CombineSegment createCombineSegment() {
+ SubquerySegment left = new SubquerySegment(0, 0,
createSelectStatementWithProjection("foo_combine_left_column"), "");
+ SubquerySegment right = new SubquerySegment(0, 0,
createSelectStatementWithProjection("bar_combine_right_column"), "");
+ return new CombineSegment(0, 0, left, CombineType.UNION, right);
+ }
+
+ private static JoinTableSegment createJoinTableForExtraction() {
+ JoinTableSegment innerJoin = new JoinTableSegment();
+ innerJoin.setLeft(new
CollectionTableSegment(createColumnSegment("foo_collection_expr")));
+ CommonTableExpressionSegment commonTableExpressionSegment = new
CommonTableExpressionSegment(0, 0, new AliasSegment(0, 0, new
IdentifierValue("cte_alias")),
+ new SubquerySegment(0, 0,
createSelectStatementWithProjection("foo_cte_subquery_column"), ""));
+ innerJoin.setRight(commonTableExpressionSegment);
+ innerJoin.setCondition(createBinaryOperation("foo_inner_join_left",
"bar_inner_join_right"));
+ JoinTableSegment result = new JoinTableSegment();
+ result.setLeft(innerJoin);
+ result.setRight(new SubqueryTableSegment(0, 0, new SubquerySegment(0,
0, createSelectStatementWithProjection("foo_subquery_table_column"), "")));
+ result.setCondition(createBinaryOperation("foo_join_left",
"bar_join_right"));
+
result.setUsing(Collections.singletonList(createColumnSegment("foo_using_column")));
+
result.setDerivedUsing(Collections.singletonList(createColumnSegment("bar_derived_using_column")));
+ return result;
+ }
+
+ private static SelectStatement createSelectStatementWithProjection(final
String columnName) {
+ SelectStatement result = new SelectStatement(mock(DatabaseType.class));
+ ProjectionsSegment projections = new ProjectionsSegment(0, 0);
+ projections.getProjections().add(new
ColumnProjectionSegment(createColumnSegment(columnName)));
+ result.setProjections(projections);
+ return result;
+ }
+
+ private static BinaryOperationExpression createBinaryOperation(final
String leftColumnName, final String rightColumnName) {
+ return new BinaryOperationExpression(0, 0,
createColumnSegment(leftColumnName), createColumnSegment(rightColumnName), "=",
leftColumnName + " = " + rightColumnName);
+ }
+
+ private static BinaryOperationExpression
createBinaryOperationWithOuterJoin() {
+ OuterJoinExpression left = new OuterJoinExpression(0, 0,
createColumnSegment("foo_outer_left"), "=", "foo_outer_left");
+ OuterJoinExpression right = new OuterJoinExpression(0, 0,
createColumnSegment("bar_outer_right"), "=", "bar_outer_right");
+ return new BinaryOperationExpression(0, 0, left, right, "=", "outer
join");
+ }
+
+ private static InExpression createInExpression(final ExpressionSegment
left, final ExpressionSegment right) {
+ return new InExpression(0, 0, left, right, false);
+ }
+
+ private static RowExpression createRowExpression() {
+ RowExpression result = new RowExpression(0, 0, "(row)");
+ result.getItems().add(createColumnSegment("foo_row_item"));
+ result.getItems().add(new LiteralExpressionSegment(0, 0, 1));
+ return result;
+ }
+
+ private static BetweenExpression createBetweenExpressionWithColumns() {
+ return new BetweenExpression(0, 0,
createColumnSegment("foo_between_left"),
createColumnSegment("foo_between_between"),
createColumnSegment("foo_between_and"), false);
+ }
+
+ private static BetweenExpression
createBetweenExpressionWithMixedOperands() {
+ return new BetweenExpression(0, 0,
+ new LiteralExpressionSegment(0, 0, 1),
createFunctionWithColumns("foo_between_function_column"),
createBinaryOperation("foo_between_binary_left", "bar_between_binary_right"),
false);
+ }
+
+ private static AggregationProjectionSegment
createAggregationProjectionExpression() {
+ AggregationProjectionSegment result = new
AggregationProjectionSegment(0, 0, AggregationType.SUM, "SUM(expr)");
+ result.getParameters().add(createColumnSegment("foo_agg_direct"));
+ FunctionSegment functionSegment = new FunctionSegment(0, 0, "MAX",
"max");
+
functionSegment.getParameters().add(createColumnSegment("foo_agg_func_direct"));
+
functionSegment.getParameters().add(createBinaryOperation("foo_agg_func_binary_left",
"bar_agg_func_binary_right"));
+ result.getParameters().add(functionSegment);
+ return result;
Review Comment:
The helper method names `createFunctionWithColumns` (line 248) and
`createFunctionSegmentWithBinary` (line 254) could be more descriptive.
Consider renaming to `createFunctionWithSingleColumnParameter` and
`createFunctionWithColumnAndBinaryParameter` respectively to better convey
their purpose and distinguish them more clearly.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]