diff --git a/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTemplate.java b/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTemplate.java index bec04c2f46..4064d18f6a 100644 --- a/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTemplate.java +++ b/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTemplate.java @@ -227,8 +227,13 @@ public boolean isForeignKeyViolation(Throwable ex) { return false; } + @Override + public ISqlTransaction startSqlTransaction(boolean autoCommit) { + return new AndroidSqlTransaction(this, autoCommit); + } + public ISqlTransaction startSqlTransaction() { - return new AndroidSqlTransaction(this); + return startSqlTransaction(false); } public int getDatabaseMajorVersion() { diff --git a/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTransaction.java b/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTransaction.java index a43c5a116b..507ec9e22c 100644 --- a/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTransaction.java +++ b/symmetric-android/src/main/java/org/jumpmind/symmetric/android/AndroidSqlTransaction.java @@ -35,14 +35,15 @@ public class AndroidSqlTransaction implements ISqlTransaction { protected AndroidSqlTemplate sqlTemplate; protected SQLiteDatabase database; - - protected boolean oldAutoCommitValue; + + protected boolean autoCommit = false; protected String sql; protected boolean needsRolledback = false; - public AndroidSqlTransaction(AndroidSqlTemplate sqlTemplate) { + public AndroidSqlTransaction(AndroidSqlTemplate sqlTemplate, boolean autoCommit) { + this.autoCommit = autoCommit; this.sqlTemplate = sqlTemplate; this.database = sqlTemplate.getDatabaseHelper().getWritableDatabase(); this.database.beginTransaction(); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java index e8b1279668..6d0953d532 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java @@ -305,7 +305,8 @@ public void createTrigger(final StringBuilder sqlBuffer, final DataEventType dml if (parameterService.is(ParameterConstants.AUTO_SYNC_TRIGGERS)) { ISqlTransaction transaction = null; try { - transaction = this.platform.getSqlTemplate().startSqlTransaction(); + transaction = this.platform.getSqlTemplate().startSqlTransaction( + platform.getDatabaseInfo().isRequiresAutoCommitForDdl()); previousCatalog = switchCatalogForTriggerInstall(sourceCatalogName, transaction); try { diff --git a/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java b/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java index 1b8e4a851e..4ba5a1943a 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java @@ -103,6 +103,8 @@ public Map query(String sql, String keyCol, String valueCol, Object public boolean isForeignKeyViolation(Throwable ex); public ISqlTransaction startSqlTransaction(); + + public ISqlTransaction startSqlTransaction(boolean autoCommit); public int getDatabaseMajorVersion(); diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTemplate.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTemplate.java index 81e0c9f0f2..06348b9e06 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTemplate.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTemplate.java @@ -280,6 +280,10 @@ public Map execute(Connection con) throws SQLException { }); } + public ISqlTransaction startSqlTransaction(boolean autoCommit) { + return new JdbcSqlTransaction(this, autoCommit); + } + public ISqlTransaction startSqlTransaction() { return new JdbcSqlTransaction(this); } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTransaction.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTransaction.java index 76f9d8839e..a21a5fb6c1 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTransaction.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTransaction.java @@ -54,11 +54,19 @@ public class JdbcSqlTransaction implements ISqlTransaction { protected JdbcSqlTemplate jdbcSqlTemplate; + protected boolean autoCommit = false; + protected boolean oldAutoCommitValue; protected List markers = new ArrayList(); + public JdbcSqlTransaction(JdbcSqlTemplate jdbcSqlTemplate) { + this(jdbcSqlTemplate, false); + } + + public JdbcSqlTransaction(JdbcSqlTemplate jdbcSqlTemplate, boolean autoCommit) { + this.autoCommit = autoCommit; this.jdbcSqlTemplate = jdbcSqlTemplate; this.init(); } @@ -79,7 +87,7 @@ protected void init() { try { this.connection = jdbcSqlTemplate.getDataSource().getConnection(); this.oldAutoCommitValue = this.connection.getAutoCommit(); - this.connection.setAutoCommit(false); + this.connection.setAutoCommit(autoCommit); SqlUtils.addSqlTransaction(this); } catch (SQLException ex) { close(); @@ -104,7 +112,9 @@ public void commit() { if (pstmt != null && inBatchMode) { flush(); } - connection.commit(); + if (!autoCommit) { + connection.commit(); + } } catch (SQLException ex) { throw jdbcSqlTemplate.translate(ex); } @@ -122,7 +132,9 @@ protected void rollback(boolean clearMarkers) { if (clearMarkers) { markers.clear(); } - connection.rollback(); + if (!autoCommit) { + connection.rollback(); + } } catch (SQLException ex) { // do nothing }