From 09c3406180690c185c8cac3107cc2a3aced984ee Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sat, 29 Oct 2011 16:40:29 +0000 Subject: [PATCH] [#794] Add support for ORDER BY [int value] in order to reference a column index for sorting --- .../src/org/jooq/test/jOOQAbstractTest.java | 26 +++++++++++++++++++ .../src/main/java/org/jooq/OrderProvider.java | 9 +++++++ .../main/java/org/jooq/SelectOrderByStep.java | 7 +++++ .../org/jooq/SimpleSelectOrderByStep.java | 7 +++++ .../java/org/jooq/impl/AbstractSubSelect.java | 11 ++++++++ .../main/java/org/jooq/impl/SelectImpl.java | 6 +++++ .../java/org/jooq/impl/SimpleSelectImpl.java | 6 +++++ 7 files changed, 72 insertions(+) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 5f7dd50b81..76ea0a5975 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -4284,6 +4284,32 @@ public abstract class jOOQAbstractTest< assertNull(authors.getValue(2, TAuthor_FIRST_NAME())); } + @Test + public void testOrderByIndexes() throws Exception { + assertEquals(Arrays.asList(1, 2, 3, 4), + create().selectFrom(TBook()) + .orderBy(1) + .fetch(TBook_ID())); + + assertEquals(Arrays.asList(1, 2, 3, 4), + create().select(TBook_ID(), TBook_TITLE()) + .from(TBook()) + .orderBy(1) + .fetch(TBook_ID())); + + assertEquals(Arrays.asList(1, 2, 3, 4), + create().select(TBook_TITLE(), TBook_ID()) + .from(TBook()) + .orderBy(2) + .fetch(TBook_ID())); + + assertEquals(Arrays.asList(1, 1, 2, 2), + create().select(TBook_AUTHOR_ID(), TBook_ID()) + .from(TBook()) + .orderBy(2, 1) + .fetch(TBook_AUTHOR_ID())); + } + @Test public void testOrderByIndirection() throws Exception { assertEquals(BOOK_IDS, diff --git a/jOOQ/src/main/java/org/jooq/OrderProvider.java b/jOOQ/src/main/java/org/jooq/OrderProvider.java index fea363ef5a..a2fa30ef37 100644 --- a/jOOQ/src/main/java/org/jooq/OrderProvider.java +++ b/jOOQ/src/main/java/org/jooq/OrderProvider.java @@ -65,6 +65,15 @@ public interface OrderProvider { */ void addOrderBy(Collection> fields); + /** + * Adds ordering fields + *

+ * Indexes start at 1 in SQL! + * + * @param fields The ordering fields + */ + void addOrderBy(int... fieldIndexes); + /** * Limit the results of this select *

diff --git a/jOOQ/src/main/java/org/jooq/SelectOrderByStep.java b/jOOQ/src/main/java/org/jooq/SelectOrderByStep.java index e223d52b35..1175bfaf83 100644 --- a/jOOQ/src/main/java/org/jooq/SelectOrderByStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectOrderByStep.java @@ -95,4 +95,11 @@ public interface SelectOrderByStep extends SelectLimitStep { * Add an ORDER BY clause to the query */ SelectLimitStep orderBy(Collection> fields); + + /** + * Add an ORDER BY clause to the query + *

+ * Indexes start at 1 in SQL! + */ + SelectLimitStep orderBy(int... fieldIndexes); } diff --git a/jOOQ/src/main/java/org/jooq/SimpleSelectOrderByStep.java b/jOOQ/src/main/java/org/jooq/SimpleSelectOrderByStep.java index 103027364c..b854ca855c 100644 --- a/jOOQ/src/main/java/org/jooq/SimpleSelectOrderByStep.java +++ b/jOOQ/src/main/java/org/jooq/SimpleSelectOrderByStep.java @@ -72,4 +72,11 @@ public interface SimpleSelectOrderByStep extends SimpleSelectL * Add an ORDER BY clause to the query */ SimpleSelectLimitStep orderBy(Collection> fields); + + /** + * Add an ORDER BY clause to the query + *

+ * Indexes start at 1 in SQL! + */ + SimpleSelectLimitStep orderBy(int... fieldIndexes); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java b/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java index c0262adc2f..b9bfbb3e51 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java @@ -727,6 +727,17 @@ implements addOrderBy(Arrays.asList(fields)); } + @Override + public final void addOrderBy(int... fieldIndexes) { + Field[] fields = new Field[fieldIndexes.length]; + + for (int i = 0; i < fieldIndexes.length; i++) { + fields[i] = literal(fieldIndexes[i]); + } + + addOrderBy(fields); + } + @Override public final void addConditions(Condition... conditions) { condition.addConditions(conditions); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index ec8dd85a6a..52f3ac294c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -366,6 +366,12 @@ class SelectImpl extends AbstractDelegatingSelect implements return this; } + @Override + public final SelectImpl orderBy(int... fieldIndexes) { + getQuery().addOrderBy(fieldIndexes); + return this; + } + @Override public final SelectImpl limit(int numberOfRows) { this.limit = numberOfRows; diff --git a/jOOQ/src/main/java/org/jooq/impl/SimpleSelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SimpleSelectImpl.java index 39561b9b46..405d436dd9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SimpleSelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SimpleSelectImpl.java @@ -209,6 +209,12 @@ class SimpleSelectImpl extends AbstractDelegatingSelect return this; } + @Override + public final SimpleSelectImpl orderBy(int... fieldIndexes) { + getQuery().addOrderBy(fieldIndexes); + return this; + } + @Override public final SimpleSelectImpl limit(int numberOfRows) { this.limit = numberOfRows;