Program: 167408
Project: 167408
Buggy source:
@Override public void handle(final Message inputMessage,final ISendMessageCallback callback,boolean unitOfWorkBoundaryReached){
  lastPreparedDml=null;
  if (error == null) {
    if (databasePlatform == null) {
      if (getResourceRuntime() == null) {
        throw new RuntimeException("String_Node_Str");
      }
      DataSource dataSource=(DataSource)getResourceReference();
      databasePlatform=JdbcDatabasePlatformFactory.createNewPlatformInstance(dataSource,new SqlTemplateSettings(),quoteIdentifiers,false);
    }
    if (targetTables == null) {
      Model model=getInputModel();
      targetTables=new ArrayList<TargetTableDefintion>();
      for (      ModelEntity entity : model.getModelEntities()) {
        String tableName=tablePrefix + entity.getName() + tableSuffix;
        Table table=databasePlatform.getTableFromCache(catalogName,schemaName,tableName,true);
        if (table != null) {
          targetTables.add(new TargetTableDefintion(entity,new TargetTable(DmlType.UPDATE,entity,table.copy()),new TargetTable(DmlType.INSERT,entity,table.copy()),new TargetTable(DmlType.DELETE,entity,table.copy())));
        }
      }
    }
    ArrayList<EntityData> inputRows=inputMessage.getPayload();
    if (inputRows != null && inputRows.size() > 0) {
      ISqlTransaction transaction=databasePlatform.getSqlTemplate().startSqlTransaction();
      transaction.setInBatchMode(batchMode);
      try {
        write(transaction,inputMessage,callback,unitOfWorkBoundaryReached);
        transaction.commit();
      }
 catch (      Throwable ex) {
        error=ex;
        transaction.rollback();
        if (ex instanceof RuntimeException) {
          throw (RuntimeException)ex;
        }
 else {
          throw new RuntimeException(ex);
        }
      }
 finally {
        transaction.close();
      }
    }
    if (callback != null && results.size() > 0) {
      callback.sendMessage(null,convertResultsToTextPayload(results));
    }
  }
}

Fixed version (ground truth):
@Override public void handle(final Message inputMessage,final ISendMessageCallback callback,boolean unitOfWorkBoundaryReached){
  lastPreparedDml=null;
  if (error == null) {
    if (databasePlatform == null) {
      if (getResourceRuntime() == null) {
        throw new RuntimeException("String_Node_Str");
      }
      DataSource dataSource=(DataSource)getResourceReference();
      databasePlatform=JdbcDatabasePlatformFactory.createNewPlatformInstance(dataSource,new SqlTemplateSettings(),quoteIdentifiers,false);
    }
    if (targetTables == null) {
      Model model=getInputModel();
      targetTables=new ArrayList<TargetTableDefintion>();
      for (      ModelEntity entity : model.getModelEntities()) {
        String tableName=tablePrefix + entity.getName() + tableSuffix;
        Table table=databasePlatform.getTableFromCache(catalogName,schemaName,tableName,true);
        if (table != null) {
          targetTables.add(new TargetTableDefintion(entity,new TargetTable(DmlType.UPDATE,entity,table.copy()),new TargetTable(DmlType.INSERT,entity,table.copy()),new TargetTable(DmlType.DELETE,entity,table.copy())));
        }
      }
    }
    ArrayList<EntityData> inputRows=inputMessage.getPayload();
    if (inputRows != null && inputRows.size() > 0) {
      ISqlTransaction transaction=databasePlatform.getSqlTemplate().startSqlTransaction();
      transaction.setInBatchMode(batchMode);
      try {
        write(transaction,inputMessage,callback,unitOfWorkBoundaryReached);
        transaction.commit();
      }
 catch (      Throwable ex) {
        error=ex;
        transaction.rollback();
        if (ex instanceof RuntimeException) {
          throw (RuntimeException)ex;
        }
 else {
          throw new RuntimeException(ex);
        }
      }
 finally {
        transaction.close();
      }
    }
    if (callback != null && results.size() > 0) {
      callback.sendMessage(null,convertResultsToTextPayload(results));
    }
  }
  if (targetTables != null) {
    for (    TargetTableDefintion targetTable : targetTables) {
      targetTable.getDeleteTable().getRowValues().clear();
      targetTable.getInsertTable().getRowValues().clear();
      targetTable.getUpdateTable().getRowValues().clear();
    }
  }
}