Merge branch 'stable-1.7' * stable-1.7: gwtorm 1.7.3 Only bind LIMIT variable in SQL when dialect supports it Start 1.7.3 development gwtorm 1.7.2 Make rollback() and commit() no ops when no transaction is active Fix conditional unit test skipping Start 1.7.2 Conflicts: pom.xml Change-Id: Iefbfa04cfdcc399bf083a2bea4d0e7dc8c3b3447
diff --git a/src/main/java/com/google/gwtorm/jdbc/AccessGen.java b/src/main/java/com/google/gwtorm/jdbc/AccessGen.java index 7cba532..3066f73 100644 --- a/src/main/java/com/google/gwtorm/jdbc/AccessGen.java +++ b/src/main/java/com/google/gwtorm/jdbc/AccessGen.java
@@ -736,20 +736,22 @@ if (hasLimitParam || !dialect.selectHasLimit()) { mv.visitVarInsn(ALOAD, psvar); if (hasLimitParam) { - CodeGenSupport cgs2 = new CodeGenSupport(mv) { - @Override - public void pushSqlHandle() { - mv.visitVarInsn(ALOAD, psvar); - } + if (dialect.selectHasLimit()) { + CodeGenSupport cgs2 = new CodeGenSupport(mv) { + @Override + public void pushSqlHandle() { + mv.visitVarInsn(ALOAD, psvar); + } - @Override - public void pushFieldValue() { - final int n = argIdx[0]; - loadVar(pTypes[n], pVars[n]); - } - }; - cgs2.resetColumnIndex(cgs.getColumnIndex() + 1); - dialect.getSqlTypeInfo(Integer.TYPE).generatePreparedStatementSet(cgs2); + @Override + public void pushFieldValue() { + final int n = argIdx[0]; + loadVar(pTypes[n], pVars[n]); + } + }; + cgs2.resetColumnIndex(cgs.getColumnIndex() + 1); + dialect.getSqlTypeInfo(Integer.TYPE).generatePreparedStatementSet(cgs2); + } mv.visitVarInsn(ILOAD, pVars[pTypes.length - 1]); } else { cgs.push(info.getStaticLimit());
diff --git a/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java b/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java index c7c5b5a..188b833 100644 --- a/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java +++ b/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java
@@ -51,7 +51,9 @@ @Override public void commit() throws OrmException { try { - conn.commit(); + if (!conn.getAutoCommit()) { + conn.commit(); + } } catch (SQLException err) { throw new OrmException("Cannot commit transaction", err); } finally { @@ -66,7 +68,9 @@ @Override public void rollback() throws OrmException { try { - conn.rollback(); + if (!conn.getAutoCommit()) { + conn.rollback(); + } } catch (SQLException err) { throw new OrmException("Cannot rollback transaction", err); } finally {
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java b/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java index ce37fbe..c46f86b 100644 --- a/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java +++ b/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
@@ -224,6 +224,19 @@ } @Test + public void testRollbackNoTransaction() throws SQLException, OrmException { + PhoneBookDb schema = phoneBook.open(); + schema.updateSchema(executor); + ArrayList<Person> all = new ArrayList<Person>(); + all.add(new Person(new Person.Key("Bob"), 18)); + schema.people().insert(all); + schema.commit(); + schema.rollback(); + List<Person> r = schema.people().olderThan(10).toList(); + assertEquals(1, r.size()); + } + + @Test public void testCommitTransaction() throws SQLException, OrmException { PhoneBookDb schema = phoneBook.open(); schema.updateSchema(executor);
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java index 7be69a4..e092e56 100644 --- a/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java +++ b/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
@@ -243,6 +243,19 @@ } @Test + public void testRollbackNoTransaction() throws SQLException, OrmException { + PhoneBookDb schema = phoneBook.open(); + schema.updateSchema(executor); + ArrayList<Person> all = new ArrayList<Person>(); + all.add(new Person(new Person.Key("Bob"), 18)); + schema.people().insert(all); + schema.commit(); + schema.rollback(); + List<Person> r = schema.people().olderThan(10).toList(); + assertEquals(1, r.size()); + } + + @Test public void testCommitTransaction() throws SQLException, OrmException { PhoneBookDb schema = phoneBook.open(); schema.updateSchema(executor);
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java index 16baae4..f0ced86 100644 --- a/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java +++ b/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java
@@ -244,6 +244,19 @@ } @Test + public void testRollbackNoTransaction() throws SQLException, OrmException { + PhoneBookDb schema = phoneBook.open(); + schema.updateSchema(executor); + ArrayList<Person> all = new ArrayList<Person>(); + all.add(new Person(new Person.Key("Bob"), 18)); + schema.people().insert(all); + schema.commit(); + schema.rollback(); + List<Person> r = schema.people().olderThan(10).toList(); + assertEquals(1, r.size()); + } + + @Test public void testCommitTransaction() throws SQLException, OrmException { PhoneBookDb schema = phoneBook.open(); schema.updateSchema(executor);
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java index 3b2ca6a..ef0a067 100644 --- a/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java +++ b/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
@@ -54,9 +54,9 @@ public void setUp() throws Exception { Class.forName(org.postgresql.Driver.class.getName()); - final String database = "gwtorm"; - final String user = "gwtorm"; - final String pass = "gwtorm"; + final String database = "reviewdb"; + final String user = "gerrit2"; + final String pass = "reviewdb"; try { db = DriverManager.getConnection("jdbc:postgresql:" + database, user, pass); @@ -242,6 +242,19 @@ } @Test + public void testRollbackNoTransaction() throws SQLException, OrmException { + PhoneBookDb schema = phoneBook.open(); + schema.updateSchema(executor); + ArrayList<Person> all = new ArrayList<Person>(); + all.add(new Person(new Person.Key("Bob"), 18)); + schema.people().insert(all); + schema.commit(); + schema.rollback(); + List<Person> r = schema.people().olderThan(10).toList(); + assertEquals(1, r.size()); + } + + @Test public void testCommitTransaction() throws SQLException, OrmException { PhoneBookDb schema = phoneBook.open(); schema.updateSchema(executor);