From 0c3951801ad1714c5483276bbe2555e09484f895 Mon Sep 17 00:00:00 2001 From: Vertex Integration Date: Thu, 6 Apr 2017 15:00:49 -0400 Subject: [PATCH 1/2] Add Query.executeAndFetchUnique() --- core/src/main/java/org/sql2o/Query.java | 20 +++++++++++++++ core/src/test/java/org/sql2o/Sql2oTest.java | 27 +++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index f60f62a1..ac05d30a 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -570,6 +570,26 @@ public ResultSetHandler newResultSetHandler(ResultSetMetaData resultSetMetaDa }; } + public T executeAndFetchUnique(Class returnType){ + return executeAndFetchUnique( newResultSetHandlerFactory( returnType ) ); + } + + public T executeAndFetchUnique(ResultSetHandler resultSetHandler){ + return executeAndFetchUnique( newResultSetHandlerFactory( resultSetHandler ) ); + } + + public T executeAndFetchUnique(ResultSetHandlerFactory factory) { + List list = executeAndFetch( factory ); + int size = list.size(); + if( size > 1 ) { + throw new Sql2oException( "Expected 0..1 results, found: " + list.size() ); + } + if( size == 0 ){ + return null; + } + return list.get( 0 ); + } + public List executeAndFetch(Class returnType){ return executeAndFetch(newResultSetHandlerFactory(returnType)); } diff --git a/core/src/test/java/org/sql2o/Sql2oTest.java b/core/src/test/java/org/sql2o/Sql2oTest.java index d59f7467..5456c8dd 100644 --- a/core/src/test/java/org/sql2o/Sql2oTest.java +++ b/core/src/test/java/org/sql2o/Sql2oTest.java @@ -101,6 +101,33 @@ public void testExecuteAndFetch(){ deleteUserTable(); } + @Test + public void testExecuteAndFetchUniqueWhenUnique(){ + createAndFillUserTable(); + + try (Connection con = sql2o.open()) { + + User user = con.createQuery("select * from User u where u.id = 1").executeAndFetchUnique(User.class); + + assertNotNull(user); + } + + deleteUserTable(); + } + + @Test(expected = Sql2oException.class) + public void testExecuteAndFetchUniqueWhenNotUnique(){ + createAndFillUserTable(); + + try (Connection con = sql2o.open()) { + + User user = con.createQuery("select * from User u where u.id > 0").executeAndFetchUnique(User.class); + } + finally { + deleteUserTable(); + } + } + @Test public void testExecuteAndFetchWithNulls(){ String sql = From 36c8706e38ec7664a4f65695b754788f287c8616 Mon Sep 17 00:00:00 2001 From: Lars Aaberg Date: Sat, 13 Apr 2024 12:53:50 +0200 Subject: [PATCH 2/2] Fixed tests, that was broken by a previous commit changing the user table name --- core/src/test/java/org/sql2o/Sql2oTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/test/java/org/sql2o/Sql2oTest.java b/core/src/test/java/org/sql2o/Sql2oTest.java index 9d1c43a8..61893005 100644 --- a/core/src/test/java/org/sql2o/Sql2oTest.java +++ b/core/src/test/java/org/sql2o/Sql2oTest.java @@ -108,7 +108,7 @@ public void testExecuteAndFetchUniqueWhenUnique(){ try (Connection con = sql2o.open()) { - User user = con.createQuery("select * from User u where u.id = 1").executeAndFetchUnique(User.class); + User user = con.createQuery("select * from user_table u where u.id = 1").executeAndFetchUnique(User.class); assertNotNull(user); } @@ -122,7 +122,7 @@ public void testExecuteAndFetchUniqueWhenNotUnique(){ try (Connection con = sql2o.open()) { - User user = con.createQuery("select * from User u where u.id > 0").executeAndFetchUnique(User.class); + User user = con.createQuery("select * from user_table u where u.id > 0").executeAndFetchUnique(User.class); } finally { deleteUserTable();