use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbFill method selectRandomRow.
/**
* Select a random row from the table in the connected database. Return null if there are no rows.
*
* TODO: Cache rows.
*
* @param sqlTemplate
* @param table The table to select a row from.
* @return A random row from the table. Null if there are no rows.
*/
private Row selectRandomRow(ISqlTransaction tran, Table table) {
Row row = null;
// Select all rows and return the primary key columns.
String sql = platform.createDmlStatement(DmlType.SELECT_ALL, table.getCatalog(), table.getSchema(), table.getName(), table.getPrimaryKeyColumns(), table.getColumns(), null, textColumnExpression).getSql();
if (verbose) {
log.info("Selecting row from " + table.getName());
}
List<Row> rows = queryForRows(tran, sql, null, null);
if (rows.size() != 0) {
int rowNum = getRand().nextInt(rows.size());
row = rows.get(rowNum);
} else {
log.warn("Unable to find a row in table " + table.getName());
}
return row;
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbFill method createDynamicRandomDeleteSql.
public String createDynamicRandomDeleteSql(Table table) {
DmlStatement deleteStatement = createDeleteDmlStatement(table);
Row row = selectRandomRow(null, table);
return deleteStatement.buildDynamicDeleteSql(BinaryEncoding.HEX, row, false, true);
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbFill method selectRandomRecord.
private void selectRandomRecord(ISqlTransaction tran, Table table) {
Row row = null;
if (hasDependentColumns(table)) {
Map<Column, Object> dependent = getDependentColumnValues(table);
if (dependent.size() > 0) {
row = selectSpecificRow(tran, table, dependent.keySet().toArray(new Column[dependent.size()]), dependent.values().toArray(new Object[dependent.size()]));
saveDependentColumnValues(table, row);
} else {
row = selectRandomRow(tran, table);
saveDependentColumnValues(table, row);
}
} else {
row = selectRandomRow(tran, table);
}
currentRowValues.put(table.getName(), row);
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbFill method insertRandomRecord.
/**
* Select a random row from the table and update all columns except for primary and foreign keys.
*
* @param sqlTemplate
* @param table
*/
private void insertRandomRecord(ISqlTransaction tran, Table table) {
DmlStatement insertStatement = createInsertDmlStatement(table);
Row row = createRandomInsertValues(insertStatement, table);
try {
tran.prepareAndExecute(insertStatement.getSql(), insertStatement.getValueArray(row.toArray(table.getColumnNames()), row.toArray(table.getPrimaryKeyColumnNames())));
} catch (SqlException ex) {
log.info("Failed to insert into {}: {}", table.getName(), ex.getMessage());
if (continueOnError) {
if (debug) {
logRow(row);
log.info("", ex);
}
selectRandomRecord(tran, table);
} else {
throw ex;
}
}
}
use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.
the class DbFill method createRandomInsertValues.
private Row createRandomInsertValues(DmlStatement updStatement, Table table) {
Column[] columns = updStatement.getMetaData();
Row row = new Row(columns.length);
for (int i = 0; i < columns.length; i++) {
Object value = null;
ForeignKeyReference fkr = foreignKeyReferences.get(table.getQualifiedColumnName(columns[i]));
if (fkr != null) {
Map<String, Object> foreignRowValues = currentRowValues.get(fkr.getForeignKey().getForeignTableName());
if (foreignRowValues != null) {
value = foreignRowValues.get(fkr.getReference().getForeignColumnName());
}
} else {
value = generateRandomValueForColumn(columns[i]);
}
row.put(columns[i].getName(), value);
}
currentRowValues.put(table.getName(), row);
return row;
}
Aggregations