From aaab9c35415dec88a7708aee0a184819c6d7897a Mon Sep 17 00:00:00 2001 From: Jeff Butler Date: Tue, 2 Nov 2021 17:45:01 -0400 Subject: [PATCH 1/4] Failing test for order by collections --- .../sql/select/SelectStatementTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java b/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java index f651862d5..630bc5092 100644 --- a/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java +++ b/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java @@ -21,6 +21,7 @@ import static org.mybatis.dynamic.sql.SqlBuilder.*; import java.sql.JDBCType; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -29,6 +30,7 @@ import org.junit.jupiter.api.Test; import org.mybatis.dynamic.sql.Callback; +import org.mybatis.dynamic.sql.SortSpecification; import org.mybatis.dynamic.sql.SqlColumn; import org.mybatis.dynamic.sql.SqlTable; import org.mybatis.dynamic.sql.render.RenderingStrategies; @@ -176,6 +178,27 @@ void testOrderByMultipleColumns() { ); } + @Test + void testOrderByMultipleColumnsWithCollection() { + Collection orderByColumns = new ArrayList<>(); + orderByColumns.add(column2.descending()); + orderByColumns.add(column1); + + SelectStatementProvider selectStatement = select(column1.as("A_COLUMN1"), column2) + .from(table, "a") + .orderBy(orderByColumns) + .build() + .render(RenderingStrategies.MYBATIS3); + + String expectedFullStatement = "select a.column1 as A_COLUMN1, a.column2 " + + "from foo a " + + "order by column2 DESC, column1"; + + Map parameters = selectStatement.getParameters(); + + assertThat(selectStatement.getSelectStatement()).isEqualTo(expectedFullStatement); + } + @Test void testDistinct() { Date d = new Date(); From fb8381b7cd10f07236e882caece961f425e2884a Mon Sep 17 00:00:00 2001 From: Jeff Butler Date: Tue, 2 Nov 2021 17:55:58 -0400 Subject: [PATCH 2/4] Failing test for order by collections --- .../examples/simple/PersonMapperTest.java | 21 +++++++++++++++++++ .../sql/select/SelectStatementTest.java | 2 -- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/test/java/examples/simple/PersonMapperTest.java b/src/test/java/examples/simple/PersonMapperTest.java index e094a93e7..faece623e 100644 --- a/src/test/java/examples/simple/PersonMapperTest.java +++ b/src/test/java/examples/simple/PersonMapperTest.java @@ -25,6 +25,7 @@ import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mybatis.dynamic.sql.SortSpecification; import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider; @@ -38,6 +39,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Objects; @@ -251,6 +253,25 @@ void testFirstNameIn() { } } + @Test + void testOrderByCollection() { + Collection orderByColumns = new ArrayList<>(); + orderByColumns.add(firstName); + + try (SqlSession session = sqlSessionFactory.openSession()) { + PersonMapper mapper = session.getMapper(PersonMapper.class); + + List rows = mapper.select(c -> c + .where(firstName, isIn("Fred", "Barney")) + .orderBy(orderByColumns) + ); + + assertThat(rows).hasSize(2); + assertThat(rows.get(0).getLastName().getName()).isEqualTo("Flintstone"); + assertThat(rows.get(1).getLastName().getName()).isEqualTo("Rubble"); + } + } + @Test void testDelete() { try (SqlSession session = sqlSessionFactory.openSession()) { diff --git a/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java b/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java index 630bc5092..571caf9a8 100644 --- a/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java +++ b/src/test/java/org/mybatis/dynamic/sql/select/SelectStatementTest.java @@ -194,8 +194,6 @@ void testOrderByMultipleColumnsWithCollection() { + "from foo a " + "order by column2 DESC, column1"; - Map parameters = selectStatement.getParameters(); - assertThat(selectStatement.getSelectStatement()).isEqualTo(expectedFullStatement); } From a95fb32c03e8b4a7cbd4a094d513bf97c9841361 Mon Sep 17 00:00:00 2001 From: Jeff Butler Date: Tue, 2 Nov 2021 17:59:40 -0400 Subject: [PATCH 3/4] Add missing orderBy and groupBy methods --- .../sql/select/QueryExpressionDSL.java | 20 +++++++++++++++++++ .../examples/simple/PersonMapperTest.java | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java b/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java index b223e4c49..dc10dde40 100644 --- a/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java +++ b/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java @@ -251,10 +251,18 @@ public UnionBuilder unionAll() { } public SelectDSL orderBy(SortSpecification...columns) { + return orderBy(Arrays.asList(columns)); + } + + public SelectDSL orderBy(Collection columns) { return QueryExpressionDSL.this.orderBy(columns); } public GroupByFinisher groupBy(BasicColumn...columns) { + return groupBy(Arrays.asList(columns)); + } + + public GroupByFinisher groupBy(Collection columns) { return QueryExpressionDSL.this.groupBy(columns); } @@ -410,6 +418,10 @@ public JoinSpecificationStarter fullJoin(Buildable joinTable, Strin } public GroupByFinisher groupBy(BasicColumn...columns) { + return groupBy(Arrays.asList(columns)); + } + + public GroupByFinisher groupBy(Collection columns) { return QueryExpressionDSL.this.groupBy(columns); } @@ -422,6 +434,10 @@ public UnionBuilder unionAll() { } public SelectDSL orderBy(SortSpecification...columns) { + return orderBy(Arrays.asList(columns)); + } + + public SelectDSL orderBy(Collection columns) { return QueryExpressionDSL.this.orderBy(columns); } @@ -440,6 +456,10 @@ public SelectDSL.FetchFirstFinisher fetchFirst(long fetchFirstRows) { public class GroupByFinisher implements Buildable { public SelectDSL orderBy(SortSpecification...columns) { + return orderBy(Arrays.asList(columns)); + } + + public SelectDSL orderBy(Collection columns) { return QueryExpressionDSL.this.orderBy(columns); } diff --git a/src/test/java/examples/simple/PersonMapperTest.java b/src/test/java/examples/simple/PersonMapperTest.java index faece623e..b3847f896 100644 --- a/src/test/java/examples/simple/PersonMapperTest.java +++ b/src/test/java/examples/simple/PersonMapperTest.java @@ -267,8 +267,8 @@ void testOrderByCollection() { ); assertThat(rows).hasSize(2); - assertThat(rows.get(0).getLastName().getName()).isEqualTo("Flintstone"); - assertThat(rows.get(1).getLastName().getName()).isEqualTo("Rubble"); + assertThat(rows.get(0).getLastName().getName()).isEqualTo("Rubble"); + assertThat(rows.get(1).getLastName().getName()).isEqualTo("Flintstone"); } } From 295e6ab9b3a65244d6d9be91026aa1eaf0ce3b82 Mon Sep 17 00:00:00 2001 From: Jeff Butler Date: Tue, 2 Nov 2021 18:27:02 -0400 Subject: [PATCH 4/4] Copyright --- .../java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java b/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java index dc10dde40..59b36c359 100644 --- a/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java +++ b/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy