use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbCompareDiffWriter method writeInsert.
public void writeInsert(DbCompareRow sourceCompareRow) {
if (stream == null) {
return;
}
Table targetTable = tables.getTargetTable();
DmlStatement statement = targetEngine.getDatabasePlatform().createDmlStatement(DmlType.INSERT, targetTable.getCatalog(), targetTable.getSchema(), targetTable.getName(), targetTable.getPrimaryKeyColumns(), targetTable.getColumns(), null, null);
Row row = new Row(targetTable.getColumnCount());
for (Column sourceColumn : tables.getSourceTable().getColumns()) {
Column targetColumn = tables.getColumnMapping().get(sourceColumn);
if (targetColumn == null) {
continue;
}
row.put(targetColumn.getName(), sourceCompareRow.getRowValues().get(sourceColumn.getName()));
}
String sql = statement.buildDynamicSql(BinaryEncoding.HEX, row, false, false);
writeLine(sql);
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DataService method getForeignTableRows.
protected List<TableRow> getForeignTableRows(List<TableRow> tableRows, Set<TableRow> visited) throws CloneNotSupportedException {
List<TableRow> fkDepList = new ArrayList<TableRow>();
for (TableRow tableRow : tableRows) {
if (!visited.contains(tableRow)) {
visited.add(tableRow);
for (ForeignKey fk : tableRow.getTable().getForeignKeys()) {
Table table = platform.getTableFromCache(fk.getForeignTableName(), false);
if (table == null) {
table = fk.getForeignTable();
if (table == null) {
table = platform.getTableFromCache(tableRow.getTable().getCatalog(), tableRow.getTable().getSchema(), fk.getForeignTableName(), false);
}
}
if (table != null) {
Table foreignTable = (Table) table.clone();
for (Column column : foreignTable.getColumns()) {
column.setPrimaryKey(false);
}
Row whereRow = new Row(fk.getReferenceCount());
String referenceColumnName = null;
boolean[] nullValues = new boolean[fk.getReferenceCount()];
int index = 0;
for (Reference ref : fk.getReferences()) {
Column foreignColumn = foreignTable.findColumn(ref.getForeignColumnName());
Object value = tableRow.getRow().get(ref.getLocalColumnName());
nullValues[index++] = value == null;
referenceColumnName = ref.getLocalColumnName();
whereRow.put(foreignColumn.getName(), value);
foreignColumn.setPrimaryKey(true);
}
boolean allNullValues = true;
for (boolean b : nullValues) {
if (!b) {
allNullValues = false;
break;
}
}
if (!allNullValues) {
DmlStatement whereSt = platform.createDmlStatement(DmlType.WHERE, foreignTable.getCatalog(), foreignTable.getSchema(), foreignTable.getName(), foreignTable.getPrimaryKeyColumns(), foreignTable.getColumns(), nullValues, null);
String whereSql = whereSt.buildDynamicSql(symmetricDialect.getBinaryEncoding(), whereRow, false, true, foreignTable.getPrimaryKeyColumns()).substring(6);
String delimiter = platform.getDatabaseInfo().getSqlCommandDelimiter();
if (delimiter != null && delimiter.length() > 0) {
whereSql = whereSql.substring(0, whereSql.length() - delimiter.length());
}
Row foreignRow = new Row(foreignTable.getColumnCount());
if (foreignTable.getForeignKeyCount() > 0) {
DmlStatement selectSt = platform.createDmlStatement(DmlType.SELECT, foreignTable, null);
Object[] keys = whereRow.toArray(foreignTable.getPrimaryKeyColumnNames());
Map<String, Object> values = sqlTemplate.queryForMap(selectSt.getSql(), keys);
if (values == null) {
log.warn("Unable to reload rows for missing foreign key data for table '{}', parent data not found. Using sql='{}' with keys '{}'", table.getName(), selectSt.getSql(), keys);
} else {
foreignRow.putAll(values);
}
}
TableRow foreignTableRow = new TableRow(foreignTable, foreignRow, whereSql, referenceColumnName, fk.getName());
fkDepList.add(foreignTableRow);
log.debug("Add foreign table reference '{}' whereSql='{}'", foreignTable.getName(), whereSql);
} else {
log.debug("The foreign table reference was null for {}", foreignTable.getName());
}
} else {
log.debug("Foreign table '{}' not found for foreign key '{}'", fk.getForeignTableName(), fk.getName());
}
if (fkDepList.size() > 0) {
fkDepList.addAll(getForeignTableRows(fkDepList, visited));
}
}
}
}
return fkDepList;
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class OracleDdlReader method getTableNames.
public List<String> getTableNames(final String catalog, final String schema, final String[] tableTypes) {
List<String> tableNames = new ArrayList<String>();
JdbcSqlTemplate sqlTemplate = (JdbcSqlTemplate) platform.getSqlTemplate();
StringBuilder sql = new StringBuilder("select TABLE_NAME from ALL_TABLES");
Object[] params = null;
if (isNotBlank(schema)) {
sql.append(" where OWNER=?");
params = new Object[] { schema };
}
tableNames = sqlTemplate.query(sql.toString(), new ISqlRowMapper<String>() {
public String mapRow(Row row) {
return row.getString("TABLE_NAME");
}
}, params);
return tableNames;
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class RedshiftDdlReader method getTriggers.
public List<Trigger> getTriggers(final String catalog, final String schema, final String tableName) {
List<Trigger> triggers = new ArrayList<Trigger>();
log.debug("Reading triggers for: " + tableName);
JdbcSqlTemplate sqlTemplate = (JdbcSqlTemplate) platform.getSqlTemplate();
String sql = "SELECT " + "trigger_name, " + "trigger_schema, " + "trigger_catalog, " + "event_manipulation AS trigger_type, " + "event_object_table AS table_name," + "trig.*, " + "pgproc.prosrc " + "FROM INFORMATION_SCHEMA.TRIGGERS AS trig " + "INNER JOIN pg_catalog.pg_trigger AS pgtrig " + "ON pgtrig.tgname=trig.trigger_name " + "INNER JOIN pg_catalog.pg_proc AS pgproc " + "ON pgproc.oid=pgtrig.tgfoid " + "WHERE event_object_table=? AND event_object_schema=?;";
triggers = sqlTemplate.query(sql, new ISqlRowMapper<Trigger>() {
public Trigger mapRow(Row row) {
Trigger trigger = new Trigger();
trigger.setName(row.getString("trigger_name"));
trigger.setCatalogName(row.getString("trigger_catalog"));
trigger.setSchemaName(row.getString("trigger_schema"));
trigger.setTableName(row.getString("table_name"));
trigger.setEnabled(true);
trigger.setSource(row.getString("prosrc"));
row.remove("prosrc");
String triggerType = row.getString("trigger_type");
if (triggerType.equals("DELETE") || triggerType.equals("INSERT") || triggerType.equals("UPDATE")) {
trigger.setTriggerType(TriggerType.valueOf(triggerType));
}
trigger.setMetaData(row);
return trigger;
}
}, tableName, schema);
return triggers;
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class OracleDdlReader method getTriggers.
public List<Trigger> getTriggers(final String catalog, final String schema, final String tableName) throws SqlException {
List<Trigger> triggers = new ArrayList<Trigger>();
log.debug("Reading triggers for: " + tableName);
JdbcSqlTemplate sqlTemplate = (JdbcSqlTemplate) platform.getSqlTemplate();
String sql = "SELECT * FROM ALL_TRIGGERS " + "WHERE TABLE_NAME=? and OWNER=?";
triggers = sqlTemplate.query(sql, new ISqlRowMapper<Trigger>() {
public Trigger mapRow(Row row) {
Trigger trigger = new Trigger();
trigger.setName(row.getString("TRIGGER_NAME"));
trigger.setSchemaName(row.getString("OWNER"));
trigger.setTableName(row.getString("TABLE_NAME"));
trigger.setEnabled(Boolean.valueOf(row.getString("STATUS")));
trigger.setSource("create ");
String triggerType = row.getString("TRIGGERING_EVENT");
if (triggerType.equals("DELETE") || triggerType.equals("INSERT") || triggerType.equals("UPDATE")) {
trigger.setTriggerType(TriggerType.valueOf(triggerType));
}
trigger.setMetaData(row);
return trigger;
}
}, tableName, schema);
for (final Trigger trigger : triggers) {
String name = trigger.getName();
String sourceSql = "select TEXT from all_source " + "where NAME=? order by LINE ";
sqlTemplate.query(sourceSql, new ISqlRowMapper<Trigger>() {
public Trigger mapRow(Row row) {
trigger.setSource(trigger.getSource() + "\n" + row.getString("TEXT"));
;
return trigger;
}
}, name);
}
return triggers;
}
Aggregations