From cdc19b3b7344ac936af43a8f302b164de6bf4c49 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 25 Aug 2011 18:45:16 +0000 Subject: [PATCH] [#806] Add T fetchOne(int, Class) and fetchOne(String, Class) convenience methods --- .../src/org/jooq/test/jOOQAbstractTest.java | 57 +++++++++++++++++++ jOOQ/src/main/java/org/jooq/ResultQuery.java | 34 +++++++++++ .../jooq/impl/AbstractDelegatingSelect.java | 10 ++++ .../org/jooq/impl/AbstractResultQuery.java | 10 ++++ 4 files changed, 111 insertions(+) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 182b88ceac..92694f98ba 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -1421,6 +1421,8 @@ public abstract class jOOQAbstractTest< @Test public void testConversionResult() throws Exception { + // .fetch(..., Class) + // ------------------ assertEquals( Arrays.asList((byte) 1, (byte) 2), create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetch(0, Byte.class)); @@ -1471,6 +1473,61 @@ public abstract class jOOQAbstractTest< assertEquals( Arrays.asList(new BigDecimal("1"), new BigDecimal("2")), create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetch(TAuthor_ID().getName(), BigDecimal.class)); + + + // .fetchOne(..., Class) + // --------------------- + assertEquals( + (byte) 1, + (byte) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, Byte.class)); + assertEquals( + (short) 1, + (short) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, Short.class)); + assertEquals( + 1, + (int) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, Integer.class)); + assertEquals( + 1L, + (long) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, Long.class)); + assertEquals( + 1.0f, + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, Float.class)); + assertEquals( + 1.0, + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, Double.class)); + assertEquals( + new BigInteger("1"), + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, BigInteger.class)); + assertEquals( + new BigDecimal("1"), + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(0, BigDecimal.class)); + + + assertEquals( + (byte) 1, + (byte) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), Byte.class)); + assertEquals( + (short) 1, + (short) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), Short.class)); + assertEquals( + 1, + (int) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), Integer.class)); + assertEquals( + 1L, + (long) create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), Long.class)); + assertEquals( + 1.0f, + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), Float.class)); + assertEquals( + 1.0, + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), Double.class)); + assertEquals( + new BigInteger("1"), + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), BigInteger.class)); + assertEquals( + new BigDecimal("1"), + create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).limit(1).fetchOne(TAuthor_ID().getName(), BigDecimal.class)); + } @Test diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java index e49e109820..9e9f7beed6 100644 --- a/jOOQ/src/main/java/org/jooq/ResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java @@ -181,6 +181,23 @@ public interface ResultQuery extends Query { */ Object fetchOne(int fieldIndex) throws SQLException; + /** + * Execute the query and return return at most one resulting value for a + * field index from the generated result. + *

+ * This is the same as calling {@link #fetchOne()} and then + * {@link Record#getValue(int, Class)} + * + * @return The resulting value or null if the query returned no + * records. + * @throws SQLException This exception is thrown + *

    + *
  • if something went wrong executing the query
  • if + * the query returned more than one value
  • + *
+ */ + T fetchOne(int fieldIndex, Class type) throws SQLException; + /** * Execute the query and return return at most one resulting value for a * field name from the generated result. @@ -198,6 +215,23 @@ public interface ResultQuery extends Query { */ Object fetchOne(String fieldName) throws SQLException; + /** + * Execute the query and return return at most one resulting value for a + * field name from the generated result. + *

+ * This is the same as calling {@link #fetchOne()} and then + * {@link Record#getValue(String, Class)} + * + * @return The resulting value or null if the query returned no + * records. + * @throws SQLException This exception is thrown + *

    + *
  • if something went wrong executing the query
  • if + * the query returned more than one value
  • + *
+ */ + T fetchOne(String fieldName, Class type) throws SQLException; + /** * Execute the query and return at most one resulting record. * diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java index e430d17ed0..b9f720dd7a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java @@ -141,11 +141,21 @@ abstract class AbstractDelegatingSelect extends AbstractQueryP return query.fetchOne(fieldIndex); } + @Override + public final T fetchOne(int fieldIndex, Class type) throws SQLException { + return query.fetchOne(fieldIndex, type); + } + @Override public final Object fetchOne(String fieldName) throws SQLException { return query.fetchOne(fieldName); } + @Override + public final T fetchOne(String fieldName, Class type) throws SQLException { + return query.fetchOne(fieldName, type); + } + @Override public final R fetchOne() throws SQLException { return query.fetchOne(); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index 89178c4ba4..193080bea4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -182,12 +182,22 @@ abstract class AbstractResultQuery extends AbstractQuery imple return record == null ? null : record.getValue(fieldIndex); } + @Override + public final T fetchOne(int fieldIndex, Class type) throws SQLException { + return TypeUtils.convert(fetchOne(fieldIndex), type); + } + @Override public final Object fetchOne(String fieldName) throws SQLException { R record = fetchOne(); return record == null ? null : record.getValue(fieldName); } + @Override + public final T fetchOne(String fieldName, Class type) throws SQLException { + return TypeUtils.convert(fetchOne(fieldName), type); + } + @Override public final R fetchOne() throws SQLException { Result r = fetch();