From 2d376e51788f81fece889b65ef689d863e921b6a Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Mon, 26 Nov 2018 14:06:51 -0500 Subject: [PATCH 01/17] Exposing prepared statement fetch size parameter --- core/src/main/java/org/sql2o/Connection.java | 13 +++++++++++++ core/src/main/java/org/sql2o/Query.java | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/core/src/main/java/org/sql2o/Connection.java b/core/src/main/java/org/sql2o/Connection.java index 12caa6c1..6ebeb74b 100644 --- a/core/src/main/java/org/sql2o/Connection.java +++ b/core/src/main/java/org/sql2o/Connection.java @@ -38,6 +38,8 @@ public class Connection implements AutoCloseable, Closeable { private Boolean originalAutoCommit; + private Boolean autoCommit; + public boolean isRollbackOnException() { return rollbackOnException; } @@ -58,6 +60,14 @@ public Connection setRollbackOnClose(boolean rollbackOnClose) { return this; } + public Boolean isAutoCommit() { + return autoCommit; + } + + public void setAutoCommit(boolean autoCommit) { + this.autoCommit = autoCommit; + } + final boolean autoClose; Connection(Sql2o sql2o, boolean autoClose) { @@ -305,6 +315,9 @@ private void createConnection(){ try{ this.jdbcConnection = connectionSource.getConnection(); this.originalAutoCommit = jdbcConnection.getAutoCommit(); + if (autoCommit != null) { + jdbcConnection.setAutoCommit(autoCommit); + } } catch(Exception ex){ throw new Sql2oException("Could not acquire a connection from DataSource - " + ex.getMessage(), ex); diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 98f4b978..06dd93bc 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -52,6 +52,7 @@ public class Query implements AutoCloseable { private final Map> paramNameToIdxMap; private final Map parameters; private String parsedQuery; + private Integer fetchSize; private int maxBatchRecords = 0; private int currentBatchRecords = 0; @@ -127,6 +128,15 @@ public Query setName(String name) { return this; } + public Integer getFetchSize() { + return fetchSize; + } + + public Query setFetchSize(int fetchSize) { + this.fetchSize = fetchSize; + return this; + } + public ResultSetHandlerFactoryBuilder getResultSetHandlerFactoryBuilder() { if (resultSetHandlerFactoryBuilder == null) { resultSetHandlerFactoryBuilder = new DefaultResultSetHandlerFactoryBuilder(); @@ -435,6 +445,9 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } + if (fetchSize != null) { + preparedStatement.setFetchSize(fetchSize); + } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); } From 077c408ff111ad2adb603e7018d8f49f4f1fc945 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Mon, 26 Nov 2018 14:17:04 -0500 Subject: [PATCH 02/17] test main branch --- core/src/main/java/org/sql2o/Connection.java | 13 ------------- core/src/main/java/org/sql2o/Query.java | 13 ------------- 2 files changed, 26 deletions(-) diff --git a/core/src/main/java/org/sql2o/Connection.java b/core/src/main/java/org/sql2o/Connection.java index 6ebeb74b..12caa6c1 100644 --- a/core/src/main/java/org/sql2o/Connection.java +++ b/core/src/main/java/org/sql2o/Connection.java @@ -38,8 +38,6 @@ public class Connection implements AutoCloseable, Closeable { private Boolean originalAutoCommit; - private Boolean autoCommit; - public boolean isRollbackOnException() { return rollbackOnException; } @@ -60,14 +58,6 @@ public Connection setRollbackOnClose(boolean rollbackOnClose) { return this; } - public Boolean isAutoCommit() { - return autoCommit; - } - - public void setAutoCommit(boolean autoCommit) { - this.autoCommit = autoCommit; - } - final boolean autoClose; Connection(Sql2o sql2o, boolean autoClose) { @@ -315,9 +305,6 @@ private void createConnection(){ try{ this.jdbcConnection = connectionSource.getConnection(); this.originalAutoCommit = jdbcConnection.getAutoCommit(); - if (autoCommit != null) { - jdbcConnection.setAutoCommit(autoCommit); - } } catch(Exception ex){ throw new Sql2oException("Could not acquire a connection from DataSource - " + ex.getMessage(), ex); diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 06dd93bc..98f4b978 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -52,7 +52,6 @@ public class Query implements AutoCloseable { private final Map> paramNameToIdxMap; private final Map parameters; private String parsedQuery; - private Integer fetchSize; private int maxBatchRecords = 0; private int currentBatchRecords = 0; @@ -128,15 +127,6 @@ public Query setName(String name) { return this; } - public Integer getFetchSize() { - return fetchSize; - } - - public Query setFetchSize(int fetchSize) { - this.fetchSize = fetchSize; - return this; - } - public ResultSetHandlerFactoryBuilder getResultSetHandlerFactoryBuilder() { if (resultSetHandlerFactoryBuilder == null) { resultSetHandlerFactoryBuilder = new DefaultResultSetHandlerFactoryBuilder(); @@ -445,9 +435,6 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } - if (fetchSize != null) { - preparedStatement.setFetchSize(fetchSize); - } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); } From 24a60957b166fa9a0597c837c86ba18d49d8ed90 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Mon, 26 Nov 2018 14:32:15 -0500 Subject: [PATCH 03/17] testing current state of unit tests --- .../reflect/ReflectionFieldSetterFactoryTest.java | 10 +++++----- .../sql2o/reflect/UnsafeFieldGetterFactoryTest.java | 10 +++++----- .../sql2o/reflect/UnsafeFieldSetterFactoryTest.java | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java index bdde8938..cfb5ae91 100644 --- a/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java @@ -9,8 +9,8 @@ * Date: 4/9/14 * Time: 9:44 PM */ -public class ReflectionFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { - public ReflectionFieldSetterFactoryTest() { - super(new ReflectionFieldSetterFactory()); - } -} +//public class ReflectionFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { +// public ReflectionFieldSetterFactoryTest() { +// super(new ReflectionFieldSetterFactory()); +// } +//} diff --git a/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java index 826a1c16..6d999063 100644 --- a/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java @@ -5,8 +5,8 @@ /** * @author mdelapenya */ -public class UnsafeFieldGetterFactoryTest extends AbstractFieldGetterFactoryTest { - public UnsafeFieldGetterFactoryTest() { - super(new UnsafeFieldGetterFactory()); - } -} \ No newline at end of file +//public class UnsafeFieldGetterFactoryTest extends AbstractFieldGetterFactoryTest { +// public UnsafeFieldGetterFactoryTest() { +// super(new UnsafeFieldGetterFactory()); +// } +//} \ No newline at end of file diff --git a/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java index efb5b7bf..7ddc75d4 100644 --- a/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java @@ -10,8 +10,8 @@ * Time: 9:48 PM * To change this template use File | Settings | File Templates. */ -public class UnsafeFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { - public UnsafeFieldSetterFactoryTest() { - super(new UnsafeFieldSetterFactory()); - } -} +//public class UnsafeFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { +// public UnsafeFieldSetterFactoryTest() { +// super(new UnsafeFieldSetterFactory()); +// } +//} From 930bac8aba2740daf89890613344b2698df0512d Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Mon, 26 Nov 2018 19:08:13 -0500 Subject: [PATCH 04/17] Fixing reflection tests --- .../AbstractFieldGetterFactoryTest.java | 11 +++-- .../AbstractFieldSetterFactoryTest.java | 48 +++++++++++-------- .../ReflectionFieldSetterFactoryTest.java | 10 ++-- .../reflect/UnsafeFieldGetterFactoryTest.java | 10 ++-- .../reflect/UnsafeFieldSetterFactoryTest.java | 10 ++-- 5 files changed, 49 insertions(+), 40 deletions(-) diff --git a/core/src/test/java/org/sql2o/reflect/AbstractFieldGetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/AbstractFieldGetterFactoryTest.java index 4fb328ca..e3b66f1c 100644 --- a/core/src/test/java/org/sql2o/reflect/AbstractFieldGetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/AbstractFieldGetterFactoryTest.java @@ -59,11 +59,14 @@ public void testAllTypes() throws IllegalAccessException { Field[] fields = pojo.getClass().getDeclaredFields(); for (Field field : fields) { - Getter getter = fgf.newGetter(field); - assertSame(field.getType(),getter.getType()); + if (!field.isSynthetic()) { + field.setAccessible(true); + Getter getter = fgf.newGetter(field); + assertSame(field.getType(),getter.getType()); - Object val1 = field.get(pojo); - assertEquals(val1, getter.getProperty(pojo)); + Object val1 = field.get(pojo); + assertEquals(val1, getter.getProperty(pojo)); + } } } diff --git a/core/src/test/java/org/sql2o/reflect/AbstractFieldSetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/AbstractFieldSetterFactoryTest.java index c3b065bf..079a5a35 100644 --- a/core/src/test/java/org/sql2o/reflect/AbstractFieldSetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/AbstractFieldSetterFactoryTest.java @@ -63,14 +63,17 @@ public void testAllTypes() throws IllegalAccessException { Field[] fields = pojo1.getClass().getDeclaredFields(); for (Field field : fields) { - Setter setter = fsf.newSetter(field); - assertSame(field.getType(),setter.getType()); - Object val1 = field.get(pojo1); - Object val2 = field.get(pojo2); - assertFalse(val1.equals(val2)); - setter.setProperty(pojo2,val1); - Object val3 = field.get(pojo2); - assertEquals(val1,val3); + if (!field.isSynthetic()) { + field.setAccessible(true); + Setter setter = fsf.newSetter(field); + assertSame(field.getType(),setter.getType()); + Object val1 = field.get(pojo1); + Object val2 = field.get(pojo2); + assertFalse(val1.equals(val2)); + setter.setProperty(pojo2,val1); + Object val3 = field.get(pojo2); + assertEquals(val1,val3); + } } assertEquals(pojo1,pojo2); @@ -78,20 +81,23 @@ public void testAllTypes() throws IllegalAccessException { // let's reset all values to NULL // primitive fields will not be affected for (Field field : fields) { - Setter setter = fsf.newSetter(field); - Object val1 = field.get(pojo1); - assertNotNull(val1); - - setter.setProperty(pojo1,null); - - Object val2 = field.get(pojo1); - if(!setter.getType().isPrimitive()){ - assertNull(val2); - continue; + if (!field.isSynthetic()) { + field.setAccessible(true); + Setter setter = fsf.newSetter(field); + Object val1 = field.get(pojo1); + assertNotNull(val1); + + setter.setProperty(pojo1,null); + + Object val2 = field.get(pojo1); + if(!setter.getType().isPrimitive()){ + assertNull(val2); + continue; + } + assertNotNull(val2); + // not affected + assertEquals(val1,val2); } - assertNotNull(val2); - // not affected - assertEquals(val1,val2); } pojo2._obj = null; assertEquals(pojo2,pojo1); diff --git a/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java index cfb5ae91..bdde8938 100644 --- a/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/ReflectionFieldSetterFactoryTest.java @@ -9,8 +9,8 @@ * Date: 4/9/14 * Time: 9:44 PM */ -//public class ReflectionFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { -// public ReflectionFieldSetterFactoryTest() { -// super(new ReflectionFieldSetterFactory()); -// } -//} +public class ReflectionFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { + public ReflectionFieldSetterFactoryTest() { + super(new ReflectionFieldSetterFactory()); + } +} diff --git a/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java index 6d999063..826a1c16 100644 --- a/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/UnsafeFieldGetterFactoryTest.java @@ -5,8 +5,8 @@ /** * @author mdelapenya */ -//public class UnsafeFieldGetterFactoryTest extends AbstractFieldGetterFactoryTest { -// public UnsafeFieldGetterFactoryTest() { -// super(new UnsafeFieldGetterFactory()); -// } -//} \ No newline at end of file +public class UnsafeFieldGetterFactoryTest extends AbstractFieldGetterFactoryTest { + public UnsafeFieldGetterFactoryTest() { + super(new UnsafeFieldGetterFactory()); + } +} \ No newline at end of file diff --git a/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java b/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java index 7ddc75d4..efb5b7bf 100644 --- a/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java +++ b/core/src/test/java/org/sql2o/reflect/UnsafeFieldSetterFactoryTest.java @@ -10,8 +10,8 @@ * Time: 9:48 PM * To change this template use File | Settings | File Templates. */ -//public class UnsafeFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { -// public UnsafeFieldSetterFactoryTest() { -// super(new UnsafeFieldSetterFactory()); -// } -//} +public class UnsafeFieldSetterFactoryTest extends AbstractFieldSetterFactoryTest { + public UnsafeFieldSetterFactoryTest() { + super(new UnsafeFieldSetterFactory()); + } +} From da3ffe582c40fcffe9adcde10ee8837003ab0ec2 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Mon, 26 Nov 2018 19:12:10 -0500 Subject: [PATCH 05/17] Adding back initial commit --- core/src/main/java/org/sql2o/Connection.java | 13 +++++++++++++ core/src/main/java/org/sql2o/Query.java | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/core/src/main/java/org/sql2o/Connection.java b/core/src/main/java/org/sql2o/Connection.java index 12caa6c1..6ebeb74b 100644 --- a/core/src/main/java/org/sql2o/Connection.java +++ b/core/src/main/java/org/sql2o/Connection.java @@ -38,6 +38,8 @@ public class Connection implements AutoCloseable, Closeable { private Boolean originalAutoCommit; + private Boolean autoCommit; + public boolean isRollbackOnException() { return rollbackOnException; } @@ -58,6 +60,14 @@ public Connection setRollbackOnClose(boolean rollbackOnClose) { return this; } + public Boolean isAutoCommit() { + return autoCommit; + } + + public void setAutoCommit(boolean autoCommit) { + this.autoCommit = autoCommit; + } + final boolean autoClose; Connection(Sql2o sql2o, boolean autoClose) { @@ -305,6 +315,9 @@ private void createConnection(){ try{ this.jdbcConnection = connectionSource.getConnection(); this.originalAutoCommit = jdbcConnection.getAutoCommit(); + if (autoCommit != null) { + jdbcConnection.setAutoCommit(autoCommit); + } } catch(Exception ex){ throw new Sql2oException("Could not acquire a connection from DataSource - " + ex.getMessage(), ex); diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 98f4b978..06dd93bc 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -52,6 +52,7 @@ public class Query implements AutoCloseable { private final Map> paramNameToIdxMap; private final Map parameters; private String parsedQuery; + private Integer fetchSize; private int maxBatchRecords = 0; private int currentBatchRecords = 0; @@ -127,6 +128,15 @@ public Query setName(String name) { return this; } + public Integer getFetchSize() { + return fetchSize; + } + + public Query setFetchSize(int fetchSize) { + this.fetchSize = fetchSize; + return this; + } + public ResultSetHandlerFactoryBuilder getResultSetHandlerFactoryBuilder() { if (resultSetHandlerFactoryBuilder == null) { resultSetHandlerFactoryBuilder = new DefaultResultSetHandlerFactoryBuilder(); @@ -435,6 +445,9 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } + if (fetchSize != null) { + preparedStatement.setFetchSize(fetchSize); + } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); } From e5cc3427f360ad29d78610c72917cbf8eb98c737 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Mon, 26 Nov 2018 23:53:09 -0500 Subject: [PATCH 06/17] Adding test --- core/src/test/java/org/sql2o/Sql2oTest.java | 35 ++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/core/src/test/java/org/sql2o/Sql2oTest.java b/core/src/test/java/org/sql2o/Sql2oTest.java index d59f7467..9c6e3e41 100644 --- a/core/src/test/java/org/sql2o/Sql2oTest.java +++ b/core/src/test/java/org/sql2o/Sql2oTest.java @@ -1005,7 +1005,40 @@ public void testRowGetObjectWithConverters() { public void testExecuteAndFetchLazy(){ createAndFillUserTable(); - ResultSetIterable allUsers = sql2o.createQuery("select * from User").executeAndFetchLazy(User.class); + ResultSetIterable allUsers = sql2o.createQuery("select * from User").setFetchSize(1).executeAndFetchLazy(User.class); + + // read in batches, because maybe we are bulk exporting and can't fit them all into a list + int totalSize = 0; + int batchSize = 500; + List batch = new ArrayList(batchSize); + for (User u : allUsers) { + totalSize++; + if (batch.size() == batchSize) { + System.out.println(String.format("Read batch of %d users, great!", batchSize)); + batch.clear(); + } + batch.add(u); + } + + allUsers.close(); + + assertTrue(totalSize == insertIntoUsers); + deleteUserTable(); + } + + @Test + public void testExecuteAndFetchLazyWithFetchSize(){ + createAndFillUserTable(); + + try { + sql2o.getConnectionSource().getConnection().setAutoCommit(false); + } catch (SQLException e) { + // ignore + } + + ResultSetIterable allUsers = sql2o.createQuery("select * from User") + .setFetchSize(10) + .executeAndFetchLazy(User.class); // read in batches, because maybe we are bulk exporting and can't fit them all into a list int totalSize = 0; From b17fadb65ecef7706b729c3e48aac7500c36d726 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 00:16:02 -0500 Subject: [PATCH 07/17] Remove unnecessary change + fix test --- core/src/test/java/org/sql2o/Sql2oTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/test/java/org/sql2o/Sql2oTest.java b/core/src/test/java/org/sql2o/Sql2oTest.java index 9c6e3e41..375ce178 100644 --- a/core/src/test/java/org/sql2o/Sql2oTest.java +++ b/core/src/test/java/org/sql2o/Sql2oTest.java @@ -1005,7 +1005,7 @@ public void testRowGetObjectWithConverters() { public void testExecuteAndFetchLazy(){ createAndFillUserTable(); - ResultSetIterable allUsers = sql2o.createQuery("select * from User").setFetchSize(1).executeAndFetchLazy(User.class); + ResultSetIterable allUsers = sql2o.createQuery("select * from User").executeAndFetchLazy(User.class); // read in batches, because maybe we are bulk exporting and can't fit them all into a list int totalSize = 0; @@ -1031,14 +1031,13 @@ public void testExecuteAndFetchLazyWithFetchSize(){ createAndFillUserTable(); try { - sql2o.getConnectionSource().getConnection().setAutoCommit(false); + sql2o.open().getJdbcConnection().setAutoCommit(true); } catch (SQLException e) { // ignore } - ResultSetIterable allUsers = sql2o.createQuery("select * from User") - .setFetchSize(10) - .executeAndFetchLazy(User.class); + Query query = sql2o.createQuery("select * from User").setFetchSize(10); + ResultSetIterable allUsers = query.executeAndFetchLazy(User.class); // read in batches, because maybe we are bulk exporting and can't fit them all into a list int totalSize = 0; @@ -1055,6 +1054,7 @@ public void testExecuteAndFetchLazyWithFetchSize(){ allUsers.close(); + assertEquals(10, query.getFetchSize().intValue()); assertTrue(totalSize == insertIntoUsers); deleteUserTable(); } From 2edc2bd5d6d17946d193b5b8e6ddcfed29aae18c Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 00:31:58 -0500 Subject: [PATCH 08/17] missed commit --- core/src/main/java/org/sql2o/Connection.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/core/src/main/java/org/sql2o/Connection.java b/core/src/main/java/org/sql2o/Connection.java index 6ebeb74b..12caa6c1 100644 --- a/core/src/main/java/org/sql2o/Connection.java +++ b/core/src/main/java/org/sql2o/Connection.java @@ -38,8 +38,6 @@ public class Connection implements AutoCloseable, Closeable { private Boolean originalAutoCommit; - private Boolean autoCommit; - public boolean isRollbackOnException() { return rollbackOnException; } @@ -60,14 +58,6 @@ public Connection setRollbackOnClose(boolean rollbackOnClose) { return this; } - public Boolean isAutoCommit() { - return autoCommit; - } - - public void setAutoCommit(boolean autoCommit) { - this.autoCommit = autoCommit; - } - final boolean autoClose; Connection(Sql2o sql2o, boolean autoClose) { @@ -315,9 +305,6 @@ private void createConnection(){ try{ this.jdbcConnection = connectionSource.getConnection(); this.originalAutoCommit = jdbcConnection.getAutoCommit(); - if (autoCommit != null) { - jdbcConnection.setAutoCommit(autoCommit); - } } catch(Exception ex){ throw new Sql2oException("Could not acquire a connection from DataSource - " + ex.getMessage(), ex); From 570177f26928888445c05e0a8d8708ed5654957c Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 00:50:30 -0500 Subject: [PATCH 09/17] strict test coverage --- core/src/main/java/org/sql2o/Query.java | 4 --- core/src/test/java/org/sql2o/Sql2oTest.java | 31 ++------------------- 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 06dd93bc..38eebbdc 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -128,10 +128,6 @@ public Query setName(String name) { return this; } - public Integer getFetchSize() { - return fetchSize; - } - public Query setFetchSize(int fetchSize) { this.fetchSize = fetchSize; return this; diff --git a/core/src/test/java/org/sql2o/Sql2oTest.java b/core/src/test/java/org/sql2o/Sql2oTest.java index 375ce178..fb6e23a7 100644 --- a/core/src/test/java/org/sql2o/Sql2oTest.java +++ b/core/src/test/java/org/sql2o/Sql2oTest.java @@ -1005,39 +1005,15 @@ public void testRowGetObjectWithConverters() { public void testExecuteAndFetchLazy(){ createAndFillUserTable(); - ResultSetIterable allUsers = sql2o.createQuery("select * from User").executeAndFetchLazy(User.class); - - // read in batches, because maybe we are bulk exporting and can't fit them all into a list - int totalSize = 0; - int batchSize = 500; - List batch = new ArrayList(batchSize); - for (User u : allUsers) { - totalSize++; - if (batch.size() == batchSize) { - System.out.println(String.format("Read batch of %d users, great!", batchSize)); - batch.clear(); - } - batch.add(u); - } - - allUsers.close(); - - assertTrue(totalSize == insertIntoUsers); - deleteUserTable(); - } - - @Test - public void testExecuteAndFetchLazyWithFetchSize(){ - createAndFillUserTable(); - try { sql2o.open().getJdbcConnection().setAutoCommit(true); } catch (SQLException e) { // ignore } - Query query = sql2o.createQuery("select * from User").setFetchSize(10); - ResultSetIterable allUsers = query.executeAndFetchLazy(User.class); + ResultSetIterable allUsers = sql2o.createQuery("select * from User") + .setFetchSize(10) + .executeAndFetchLazy(User.class); // read in batches, because maybe we are bulk exporting and can't fit them all into a list int totalSize = 0; @@ -1054,7 +1030,6 @@ public void testExecuteAndFetchLazyWithFetchSize(){ allUsers.close(); - assertEquals(10, query.getFetchSize().intValue()); assertTrue(totalSize == insertIntoUsers); deleteUserTable(); } From f56ac40920a5206d7dab0c74327a0796a25b9d67 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 00:58:16 -0500 Subject: [PATCH 10/17] test coverage seems off --- core/src/main/java/org/sql2o/Query.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 38eebbdc..74dfd6f4 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -52,7 +52,6 @@ public class Query implements AutoCloseable { private final Map> paramNameToIdxMap; private final Map parameters; private String parsedQuery; - private Integer fetchSize; private int maxBatchRecords = 0; private int currentBatchRecords = 0; @@ -129,7 +128,7 @@ public Query setName(String name) { } public Query setFetchSize(int fetchSize) { - this.fetchSize = fetchSize; + //this.fetchSize = fetchSize; return this; } @@ -441,9 +440,7 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } - if (fetchSize != null) { - preparedStatement.setFetchSize(fetchSize); - } + preparedStatement.setFetchSize(10); } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); } From a0b94912105dd7f49f4dd9f76932d6ef1ca6c442 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 01:04:42 -0500 Subject: [PATCH 11/17] fix test --- core/src/main/java/org/sql2o/Query.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 74dfd6f4..793abf61 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -440,7 +440,9 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } - preparedStatement.setFetchSize(10); + if (preparedStatement != null) { + preparedStatement.setFetchSize(10); + } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); } From e33a4af3dc34a52568441f249e201dd51ca32ed7 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 01:17:12 -0500 Subject: [PATCH 12/17] test coverage has got to be broken --- core/src/main/java/org/sql2o/Query.java | 4 ---- core/src/test/java/org/sql2o/Sql2oTest.java | 6 ------ 2 files changed, 10 deletions(-) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 793abf61..20357fa4 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -128,7 +128,6 @@ public Query setName(String name) { } public Query setFetchSize(int fetchSize) { - //this.fetchSize = fetchSize; return this; } @@ -440,9 +439,6 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } - if (preparedStatement != null) { - preparedStatement.setFetchSize(10); - } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); } diff --git a/core/src/test/java/org/sql2o/Sql2oTest.java b/core/src/test/java/org/sql2o/Sql2oTest.java index fb6e23a7..0e8bc0fb 100644 --- a/core/src/test/java/org/sql2o/Sql2oTest.java +++ b/core/src/test/java/org/sql2o/Sql2oTest.java @@ -1005,12 +1005,6 @@ public void testRowGetObjectWithConverters() { public void testExecuteAndFetchLazy(){ createAndFillUserTable(); - try { - sql2o.open().getJdbcConnection().setAutoCommit(true); - } catch (SQLException e) { - // ignore - } - ResultSetIterable allUsers = sql2o.createQuery("select * from User") .setFetchSize(10) .executeAndFetchLazy(User.class); From 37f7bfa2ad917f59b52da6a4021588342a2a327b Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 01:27:31 -0500 Subject: [PATCH 13/17] Does this work? --- core/src/test/java/org/sql2o/ConnectionTest.java | 3 ++- core/src/test/java/org/sql2o/Sql2oTest.java | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/src/test/java/org/sql2o/ConnectionTest.java b/core/src/test/java/org/sql2o/ConnectionTest.java index a3b439a1..deb5435b 100644 --- a/core/src/test/java/org/sql2o/ConnectionTest.java +++ b/core/src/test/java/org/sql2o/ConnectionTest.java @@ -34,11 +34,12 @@ public boolean returnGeneratedKeysByDefault() { } }); org.sql2o.Connection cn = new org.sql2o.Connection(sql2o,false); - cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).buildPreparedStatement(); + cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).setFetchSize(10).buildPreparedStatement(); verify(dataSource,times(1)).getConnection(); verify(jdbcConnection).isClosed(); verify(jdbcConnection,times(1)).prepareStatement("select ? name, ? age"); + verify(ps, times(1)).setFetchSize(10); verify(ps,times(1)).setString(1,"Dmitry Alexandrov"); verify(ps,times(1)).setInt(2,35); // check statement still alive diff --git a/core/src/test/java/org/sql2o/Sql2oTest.java b/core/src/test/java/org/sql2o/Sql2oTest.java index 0e8bc0fb..d59f7467 100644 --- a/core/src/test/java/org/sql2o/Sql2oTest.java +++ b/core/src/test/java/org/sql2o/Sql2oTest.java @@ -1005,9 +1005,7 @@ public void testRowGetObjectWithConverters() { public void testExecuteAndFetchLazy(){ createAndFillUserTable(); - ResultSetIterable allUsers = sql2o.createQuery("select * from User") - .setFetchSize(10) - .executeAndFetchLazy(User.class); + ResultSetIterable allUsers = sql2o.createQuery("select * from User").executeAndFetchLazy(User.class); // read in batches, because maybe we are bulk exporting and can't fit them all into a list int totalSize = 0; From 6dd02804a9db3dc21f731d44f295a89b8c798103 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 01:49:45 -0500 Subject: [PATCH 14/17] this should work --- core/src/main/java/org/sql2o/Query.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 20357fa4..9a8808f6 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -52,6 +52,7 @@ public class Query implements AutoCloseable { private final Map> paramNameToIdxMap; private final Map parameters; private String parsedQuery; + private Integer fetchSize; private int maxBatchRecords = 0; private int currentBatchRecords = 0; @@ -128,6 +129,7 @@ public Query setName(String name) { } public Query setFetchSize(int fetchSize) { + this.fetchSize = fetchSize; return this; } @@ -439,6 +441,9 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } + if (preparedStatement != null && fetchSize != null) { + preparedStatement.setFetchSize(fetchSize); + } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); } From fde5909844b77f2c67fcb3b13c31a020bae0ce5c Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 01:58:13 -0500 Subject: [PATCH 15/17] This does not make any sense --- core/src/main/java/org/sql2o/Query.java | 6 ++---- core/src/test/java/org/sql2o/ConnectionTest.java | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 9a8808f6..801c0660 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -52,7 +52,6 @@ public class Query implements AutoCloseable { private final Map> paramNameToIdxMap; private final Map parameters; private String parsedQuery; - private Integer fetchSize; private int maxBatchRecords = 0; private int currentBatchRecords = 0; @@ -129,7 +128,6 @@ public Query setName(String name) { } public Query setFetchSize(int fetchSize) { - this.fetchSize = fetchSize; return this; } @@ -441,8 +439,8 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } - if (preparedStatement != null && fetchSize != null) { - preparedStatement.setFetchSize(fetchSize); + if (preparedStatement != null) { + preparedStatement.setFetchSize(10); } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); diff --git a/core/src/test/java/org/sql2o/ConnectionTest.java b/core/src/test/java/org/sql2o/ConnectionTest.java index deb5435b..75b0b066 100644 --- a/core/src/test/java/org/sql2o/ConnectionTest.java +++ b/core/src/test/java/org/sql2o/ConnectionTest.java @@ -65,7 +65,7 @@ public boolean returnGeneratedKeysByDefault() { } }); try(org.sql2o.Connection cn = sql2o.open()){ - cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).buildPreparedStatement(); + cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).setFetchSize(10).buildPreparedStatement(); fail("exception not thrown"); } catch (MyException ex){ // as designed @@ -73,6 +73,7 @@ public boolean returnGeneratedKeysByDefault() { verify(dataSource,times(1)).getConnection(); verify(jdbcConnection,atLeastOnce()).isClosed(); verify(jdbcConnection,times(1)).prepareStatement("select ? name, ? age"); + verify(ps, times(1)).setFetchSize(10); verify(ps,times(1)).setInt(2,35); // check statement was closed verify(ps,times(1)).close(); From f3468d29629893ddb4e7c246146e7cd8d479b8a1 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 03:00:11 -0500 Subject: [PATCH 16/17] hopefully this works --- core/src/main/java/org/sql2o/Query.java | 10 +++++-- .../test/java/org/sql2o/ConnectionTest.java | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/sql2o/Query.java b/core/src/main/java/org/sql2o/Query.java index 801c0660..d5aa0bb7 100644 --- a/core/src/main/java/org/sql2o/Query.java +++ b/core/src/main/java/org/sql2o/Query.java @@ -52,6 +52,7 @@ public class Query implements AutoCloseable { private final Map> paramNameToIdxMap; private final Map parameters; private String parsedQuery; + private Integer fetchSize; private int maxBatchRecords = 0; private int currentBatchRecords = 0; @@ -127,7 +128,12 @@ public Query setName(String name) { return this; } + public Integer getFetchSize() { + return fetchSize; + } + public Query setFetchSize(int fetchSize) { + this.fetchSize = fetchSize; return this; } @@ -439,8 +445,8 @@ private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } - if (preparedStatement != null) { - preparedStatement.setFetchSize(10); + if (preparedStatement != null && fetchSize != null) { + preparedStatement.setFetchSize(fetchSize); } } catch(SQLException ex) { throw new Sql2oException(String.format("Error preparing statement - %s", ex.getMessage()), ex); diff --git a/core/src/test/java/org/sql2o/ConnectionTest.java b/core/src/test/java/org/sql2o/ConnectionTest.java index 75b0b066..7a2c2224 100644 --- a/core/src/test/java/org/sql2o/ConnectionTest.java +++ b/core/src/test/java/org/sql2o/ConnectionTest.java @@ -78,4 +78,30 @@ public boolean returnGeneratedKeysByDefault() { // check statement was closed verify(ps,times(1)).close(); } + + public void test_createQueryWithFetchSize() throws Throwable { + DataSource dataSource = mock(DataSource.class); + Connection jdbcConnection = mock(Connection.class); + when(jdbcConnection.isClosed()).thenReturn(false); + when(dataSource.getConnection()).thenReturn(jdbcConnection); + PreparedStatement ps = mock(PreparedStatement.class); + when(jdbcConnection.prepareStatement(anyString())).thenReturn(ps); + + Sql2o sql2o = new Sql2o(dataSource,new NoQuirks(){ + @Override + public boolean returnGeneratedKeysByDefault() { + return false; + } + }); + org.sql2o.Connection cn = new org.sql2o.Connection(sql2o,false); + cn.createQueryWithParams("select * from Users").setFetchSize(10).buildPreparedStatement(); + + verify(dataSource,times(1)).getConnection(); + verify(jdbcConnection).isClosed(); + verify(jdbcConnection,times(1)).prepareStatement("select * from Users"); + verify(ps, times(1)).setFetchSize(10); + // check statement still alive + verify(ps,never()).close(); + + } } From 230146bf42c9449934945138973ce84b66d2e496 Mon Sep 17 00:00:00 2001 From: sgrayson21 Date: Tue, 27 Nov 2018 03:13:39 -0500 Subject: [PATCH 17/17] cleanup test class --- core/src/test/java/org/sql2o/ConnectionTest.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/src/test/java/org/sql2o/ConnectionTest.java b/core/src/test/java/org/sql2o/ConnectionTest.java index 7a2c2224..dac5853d 100644 --- a/core/src/test/java/org/sql2o/ConnectionTest.java +++ b/core/src/test/java/org/sql2o/ConnectionTest.java @@ -34,12 +34,11 @@ public boolean returnGeneratedKeysByDefault() { } }); org.sql2o.Connection cn = new org.sql2o.Connection(sql2o,false); - cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).setFetchSize(10).buildPreparedStatement(); + cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).buildPreparedStatement(); verify(dataSource,times(1)).getConnection(); verify(jdbcConnection).isClosed(); verify(jdbcConnection,times(1)).prepareStatement("select ? name, ? age"); - verify(ps, times(1)).setFetchSize(10); verify(ps,times(1)).setString(1,"Dmitry Alexandrov"); verify(ps,times(1)).setInt(2,35); // check statement still alive @@ -65,7 +64,7 @@ public boolean returnGeneratedKeysByDefault() { } }); try(org.sql2o.Connection cn = sql2o.open()){ - cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).setFetchSize(10).buildPreparedStatement(); + cn.createQueryWithParams("select :p1 name, :p2 age", "Dmitry Alexandrov", 35).buildPreparedStatement(); fail("exception not thrown"); } catch (MyException ex){ // as designed @@ -73,7 +72,6 @@ public boolean returnGeneratedKeysByDefault() { verify(dataSource,times(1)).getConnection(); verify(jdbcConnection,atLeastOnce()).isClosed(); verify(jdbcConnection,times(1)).prepareStatement("select ? name, ? age"); - verify(ps, times(1)).setFetchSize(10); verify(ps,times(1)).setInt(2,35); // check statement was closed verify(ps,times(1)).close(); @@ -102,6 +100,5 @@ public boolean returnGeneratedKeysByDefault() { verify(ps, times(1)).setFetchSize(10); // check statement still alive verify(ps,never()).close(); - } }