use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class MsSqlDdlReader method getTriggers.
@Override
public List<Trigger> getTriggers(final String catalog, final String schema, final String tableName) throws SqlException {
log.debug("Reading triggers for: " + tableName);
JdbcSqlTemplate sqlTemplate = (JdbcSqlTemplate) platform.getSqlTemplate();
String sql = "select " + "TRIG.name, " + "TAB.name as table_name, " + "SC.name as table_schema, " + "TRIG.is_disabled, " + "TRIG.is_ms_shipped, " + "TRIG.is_not_for_replication, " + "TRIG.is_instead_of_trigger, " + "TRIG.create_date, " + "TRIG.modify_date, " + "OBJECTPROPERTY(TRIG.OBJECT_ID, 'ExecIsUpdateTrigger') AS isupdate, " + "OBJECTPROPERTY(TRIG.OBJECT_ID, 'ExecIsDeleteTrigger') AS isdelete, " + "OBJECTPROPERTY(TRIG.OBJECT_ID, 'ExecIsInsertTrigger') AS isinsert, " + "OBJECTPROPERTY(TRIG.OBJECT_ID, 'ExecIsAfterTrigger') AS isafter, " + "OBJECTPROPERTY(TRIG.OBJECT_ID, 'ExecIsInsteadOfTrigger') AS isinsteadof, " + "TRIG.object_id, " + "TRIG.parent_id, " + "TAB.schema_id, " + "OBJECT_DEFINITION(TRIG.OBJECT_ID) as trigger_source " + "from sys.triggers as TRIG " + "inner join sys.tables as TAB " + "on TRIG.parent_id = TAB.object_id " + "inner join sys.schemas as SC " + "on TAB.schema_id = SC.schema_id " + "where TAB.name=? and SC.name=? ";
return sqlTemplate.query(sql, new ISqlRowMapper<Trigger>() {
public Trigger mapRow(Row row) {
Trigger trigger = new Trigger();
trigger.setName(row.getString("name"));
trigger.setSchemaName(row.getString("table_schema"));
trigger.setTableName(row.getString("table_name"));
trigger.setEnabled(!Boolean.valueOf(row.getString("is_disabled")));
trigger.setSource(row.getString("trigger_source"));
row.remove("trigger_source");
//replace 0 and 1s with true and false
for (String s : new String[] { "isupdate", "isdelete", "isinsert", "isafter", "isinsteadof" }) {
if (row.getString(s).equals("0"))
row.put(s, false);
else
row.put(s, true);
}
if (row.getBoolean("isupdate"))
trigger.setTriggerType(TriggerType.UPDATE);
else if (row.getBoolean("isdelete"))
trigger.setTriggerType(TriggerType.DELETE);
else if (row.getBoolean("isinsert"))
trigger.setTriggerType(TriggerType.INSERT);
trigger.setMetaData(row);
return trigger;
}
}, tableName, schema);
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbExportImportTest method exportThenImportCsv.
@Test
public void exportThenImportCsv() throws Exception {
ISymmetricEngine engine = getSymmetricEngine();
IDatabasePlatform platform = engine.getSymmetricDialect().getPlatform();
Database testTables = platform.readDatabaseFromXml("/test-dbimport.xml", true);
Table table = testTables.findTable("test_db_import_1", false);
recreateImportTable();
final int RECORD_COUNT = 100;
DbFill fill = new DbFill(platform);
fill.setRecordCount(RECORD_COUNT);
fill.fillTables(table.getName());
DbExport export = new DbExport(platform);
export.setFormat(Format.CSV);
export.setNoCreateInfo(true);
export.setNoData(false);
String csvOutput = export.exportTables(new String[] { table.getName() });
logger.info(csvOutput);
ISqlTemplate sqlTemplate = platform.getSqlTemplate();
List<Row> rowsBeforeImport = sqlTemplate.query(SELECT_FROM_TEST_DB_IMPORT_1_ORDER_BY_ID);
recreateImportTable();
DbImport importCsv = new DbImport(platform);
importCsv.setFormat(DbImport.Format.CSV);
importCsv.importTables(csvOutput, table.getName());
Assert.assertEquals(RECORD_COUNT, sqlTemplate.queryForInt("select count(*) from " + table.getName()));
compareRows(table, rowsBeforeImport, sqlTemplate.query(SELECT_FROM_TEST_DB_IMPORT_1_ORDER_BY_ID));
// TODO test error
// TODO test replace
// TODO test ignore
// TODO test force
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbExportImportTest method compareRows.
protected void compareRows(Table table, List<Row> one, List<Row> two) {
if (one.size() != two.size()) {
Assert.fail("First list had " + one.size() + " and second list had " + two.size());
}
for (int i = 0; i < one.size(); i++) {
Row rOne = one.get(i);
Row rTwo = two.get(i);
Set<String> keys = rOne.keySet();
for (String key : keys) {
Object oOne = rOne.get(key);
Object oTwo = rTwo.get(key);
Column column = table.getColumnWithName(key);
/*
* special comparison for sqlite. the result reports all types
* as text even though the jdbc table metadata reports the types
* as dates
*/
if (column != null && (column.getMappedType().equals("DATE") || column.getMappedType().equals("TIME") || column.getMappedType().equals("TIMESTAMP")) && oOne instanceof String && oTwo instanceof String) {
oOne = FormatUtils.parseDate(oOne.toString(), FormatUtils.TIMESTAMP_PATTERNS);
oTwo = FormatUtils.parseDate(oTwo.toString(), FormatUtils.TIMESTAMP_PATTERNS);
}
if (!ObjectUtils.equals(oOne, oTwo)) {
Assert.fail("The " + i + " element was not the same. The column " + key + " had a value of " + rOne.get(key) + " for one row and " + rTwo.get(key) + " for the other");
}
}
}
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbExportImportTest method exportThenImportCsvWithBackslashes.
@Test
public void exportThenImportCsvWithBackslashes() throws Exception {
ISymmetricEngine engine = getSymmetricEngine();
IDatabasePlatform platform = engine.getSymmetricDialect().getPlatform();
Database testTables = platform.readDatabaseFromXml("/test-dbimport.xml", true);
Table table = testTables.findTable("test_db_import_1", false);
recreateImportTable();
DbImport importCsv = new DbImport(platform);
importCsv.setFormat(DbImport.Format.SQL);
importCsv.importTables(getClass().getResourceAsStream("/test-dbimport-1-backslashes.sql"));
assertCountDbImportTableRecords(1);
DbExport export = new DbExport(platform);
export.setFormat(Format.CSV);
export.setNoCreateInfo(true);
export.setNoData(false);
String csvOutput = export.exportTables(new String[] { table.getName() });
ISqlTemplate sqlTemplate = platform.getSqlTemplate();
List<Row> rowsBeforeImport = sqlTemplate.query(SELECT_FROM_TEST_DB_IMPORT_1_ORDER_BY_ID);
recreateImportTable();
importCsv.setFormat(DbImport.Format.CSV);
importCsv.importTables(csvOutput, table.getName());
compareRows(table, rowsBeforeImport, sqlTemplate.query(SELECT_FROM_TEST_DB_IMPORT_1_ORDER_BY_ID));
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbFill method createDynamicRandomUpdateSql.
public String createDynamicRandomUpdateSql(Table table) {
DmlStatement updStatement = createUpdateDmlStatement(table);
Row row = createRandomUpdateValues(null, updStatement, table);
return updStatement.buildDynamicSql(BinaryEncoding.HEX, row, false, true);
}
Aggregations