Skip to content

Commit

Permalink
0001833: ASE 12.5 create triggers in a multi-statement fails
Browse files Browse the repository at this point in the history
  • Loading branch information
chenson42 committed Jul 28, 2014
1 parent 462f296 commit f384d18
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 8 deletions.
Expand Up @@ -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() {
Expand Down
Expand Up @@ -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();
Expand Down
Expand Up @@ -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 {
Expand Down
Expand Up @@ -103,6 +103,8 @@ public <T, W> Map<T, W> query(String sql, String keyCol, String valueCol, Object
public boolean isForeignKeyViolation(Throwable ex);

public ISqlTransaction startSqlTransaction();

public ISqlTransaction startSqlTransaction(boolean autoCommit);

public int getDatabaseMajorVersion();

Expand Down
Expand Up @@ -280,6 +280,10 @@ public Map<String, Object> execute(Connection con) throws SQLException {
});
}

public ISqlTransaction startSqlTransaction(boolean autoCommit) {
return new JdbcSqlTransaction(this, autoCommit);
}

public ISqlTransaction startSqlTransaction() {
return new JdbcSqlTransaction(this);
}
Expand Down
Expand Up @@ -54,11 +54,19 @@ public class JdbcSqlTransaction implements ISqlTransaction {

protected JdbcSqlTemplate jdbcSqlTemplate;

protected boolean autoCommit = false;

protected boolean oldAutoCommitValue;

protected List<Object> markers = new ArrayList<Object>();


public JdbcSqlTransaction(JdbcSqlTemplate jdbcSqlTemplate) {
this(jdbcSqlTemplate, false);
}

public JdbcSqlTransaction(JdbcSqlTemplate jdbcSqlTemplate, boolean autoCommit) {
this.autoCommit = autoCommit;
this.jdbcSqlTemplate = jdbcSqlTemplate;
this.init();
}
Expand All @@ -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();
Expand All @@ -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);
}
Expand All @@ -122,7 +132,9 @@ protected void rollback(boolean clearMarkers) {
if (clearMarkers) {
markers.clear();
}
connection.rollback();
if (!autoCommit) {
connection.rollback();
}
} catch (SQLException ex) {
// do nothing
}
Expand Down

0 comments on commit f384d18

Please sign in to comment.