diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 92694f98ba..2fa69ab736 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -1475,6 +1475,60 @@ public abstract class jOOQAbstractTest< create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetch(TAuthor_ID().getName(), BigDecimal.class)); + // .fetchArray(..., Class) + // ------------------ + assertEquals( + Arrays.asList((byte) 1, (byte) 2), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, Byte.class))); + assertEquals( + Arrays.asList((short) 1, (short) 2), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, Short.class))); + assertEquals( + Arrays.asList(1, 2), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, Integer.class))); + assertEquals( + Arrays.asList(1L, 2L), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, Long.class))); + assertEquals( + Arrays.asList(1.0f, 2.0f), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, Float.class))); + assertEquals( + Arrays.asList(1.0, 2.0), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, Double.class))); + assertEquals( + Arrays.asList(new BigInteger("1"), new BigInteger("2")), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, BigInteger.class))); + assertEquals( + Arrays.asList(new BigDecimal("1"), new BigDecimal("2")), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(0, BigDecimal.class))); + + + assertEquals( + Arrays.asList((byte) 1, (byte) 2), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), Byte.class))); + assertEquals( + Arrays.asList((short) 1, (short) 2), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), Short.class))); + assertEquals( + Arrays.asList(1, 2), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), Integer.class))); + assertEquals( + Arrays.asList(1L, 2L), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), Long.class))); + assertEquals( + Arrays.asList(1.0f, 2.0f), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), Float.class))); + assertEquals( + Arrays.asList(1.0, 2.0), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), Double.class))); + assertEquals( + Arrays.asList(new BigInteger("1"), new BigInteger("2")), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), BigInteger.class))); + assertEquals( + Arrays.asList(new BigDecimal("1"), new BigDecimal("2")), + Arrays.asList(create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetchArray(TAuthor_ID().getName(), BigDecimal.class))); + + // .fetchOne(..., Class) // --------------------- assertEquals( diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java index 9e9f7beed6..8e4d281600 100644 --- a/jOOQ/src/main/java/org/jooq/ResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java @@ -344,6 +344,17 @@ public interface ResultQuery extends Query { */ Object[] fetchArray(int fieldIndex) throws SQLException; + /** + * Execute the query and return all values for a field index from the + * generated result. + *

+ * You can access data like this + *

query.fetchArray(fieldIndex)[recordIndex]
+ * + * @return The resulting values. + */ + T[] fetchArray(int fieldIndex, Class type) throws SQLException; + /** * Execute the query and return all values for a field name from the * generated result. @@ -355,6 +366,17 @@ public interface ResultQuery extends Query { */ Object[] fetchArray(String fieldName) throws SQLException; + /** + * Execute the query and return all values for a field name from the + * generated result. + *

+ * You can access data like this + *

query.fetchArray(fieldName)[recordIndex]
+ * + * @return The resulting values. + */ + T[] fetchArray(String fieldName, Class type) throws SQLException; + /** * Execute the query and return all values for a field from the generated * result. diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java index b9f720dd7a..11c748f83f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java @@ -196,11 +196,21 @@ abstract class AbstractDelegatingSelect extends AbstractQueryP return query.fetchArray(fieldIndex); } + @Override + public final T[] fetchArray(int fieldIndex, Class type) throws SQLException { + return query.fetchArray(fieldIndex, type); + } + @Override public final Object[] fetchArray(String fieldName) throws SQLException { return query.fetchArray(fieldName); } + @Override + public final T[] fetchArray(String fieldName, Class type) throws SQLException { + return query.fetchArray(fieldName, type); + } + @Override public final T[] fetchArray(Field field) throws SQLException { return query.fetchArray(field); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index 193080bea4..355e047972 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -293,11 +293,23 @@ abstract class AbstractResultQuery extends AbstractQuery imple return fetch(fieldIndex).toArray(); } + @SuppressWarnings("unchecked") + @Override + public final T[] fetchArray(int fieldIndex, Class type) throws SQLException { + return (T[]) TypeUtils.convertArray(fetchArray(fieldIndex), type); + } + @Override public final Object[] fetchArray(String fieldName) throws SQLException { return fetch(fieldName).toArray(); } + @SuppressWarnings("unchecked") + @Override + public final T[] fetchArray(String fieldName, Class type) throws SQLException { + return (T[]) TypeUtils.convertArray(fetchArray(fieldName), type); + } + @SuppressWarnings("unchecked") @Override public final T[] fetchArray(Field field) throws SQLException {