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);