Search in sources :

Example 6 with Row

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);
}
Also used : JdbcSqlTemplate(org.jumpmind.db.sql.JdbcSqlTemplate) Trigger(org.jumpmind.db.model.Trigger) Row(org.jumpmind.db.sql.Row)

Example 7 with Row

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
}
Also used : IDatabasePlatform(org.jumpmind.db.platform.IDatabasePlatform) DbExport(org.jumpmind.symmetric.io.data.DbExport) ISqlTemplate(org.jumpmind.db.sql.ISqlTemplate) Table(org.jumpmind.db.model.Table) Database(org.jumpmind.db.model.Database) Row(org.jumpmind.db.sql.Row) DbImport(org.jumpmind.symmetric.io.data.DbImport) DbFill(org.jumpmind.symmetric.io.data.DbFill) AbstractServiceTest(org.jumpmind.symmetric.service.impl.AbstractServiceTest) Test(org.junit.Test)

Example 8 with Row

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");
            }
        }
    }
}
Also used : Column(org.jumpmind.db.model.Column) Row(org.jumpmind.db.sql.Row)

Example 9 with Row

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));
}
Also used : IDatabasePlatform(org.jumpmind.db.platform.IDatabasePlatform) DbExport(org.jumpmind.symmetric.io.data.DbExport) ISqlTemplate(org.jumpmind.db.sql.ISqlTemplate) Table(org.jumpmind.db.model.Table) Database(org.jumpmind.db.model.Database) DbImport(org.jumpmind.symmetric.io.data.DbImport) Row(org.jumpmind.db.sql.Row) AbstractServiceTest(org.jumpmind.symmetric.service.impl.AbstractServiceTest) Test(org.junit.Test)

Example 10 with Row

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);
}
Also used : DmlStatement(org.jumpmind.db.sql.DmlStatement) Row(org.jumpmind.db.sql.Row)

Aggregations

Row (org.jumpmind.db.sql.Row)66 ArrayList (java.util.ArrayList)27 ISqlRowMapper (org.jumpmind.db.sql.ISqlRowMapper)23 Trigger (org.jumpmind.db.model.Trigger)19 JdbcSqlTemplate (org.jumpmind.db.sql.JdbcSqlTemplate)19 DmlStatement (org.jumpmind.db.sql.DmlStatement)13 Column (org.jumpmind.db.model.Column)11 Table (org.jumpmind.db.model.Table)9 Date (java.util.Date)8 HashMap (java.util.HashMap)7 ISqlTemplate (org.jumpmind.db.sql.ISqlTemplate)7 Test (org.junit.Test)5 HashSet (java.util.HashSet)3 IDatabasePlatform (org.jumpmind.db.platform.IDatabasePlatform)3 SqlException (org.jumpmind.db.sql.SqlException)3 NetworkedNode (org.jumpmind.symmetric.model.NetworkedNode)3 Node (org.jumpmind.symmetric.model.Node)3 Map (java.util.Map)2 NotImplementedException (org.apache.commons.lang.NotImplementedException)2 Database (org.jumpmind.db.model.Database)2