From: <mla...@us...> - 2003-04-13 16:50:02
|
Update of /cvsroot/dbunit/dbunit/src/java/org/dbunit/operation In directory sc8-pr-cvs1:/tmp/cvs-serv1781/src/java/org/dbunit/operation Modified Files: AbstractBatchOperation.java RefreshOperation.java Log Message: Modified INSERT, UPDATE, REFRESH and INSERT_IDENTITY operations to support buffered dataset. Not supported by other operations. Index: AbstractBatchOperation.java =================================================================== RCS file: /cvsroot/dbunit/dbunit/src/java/org/dbunit/operation/AbstractBatchOperation.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** AbstractBatchOperation.java 9 Apr 2003 22:52:11 -0000 1.17 --- AbstractBatchOperation.java 13 Apr 2003 16:49:58 -0000 1.18 *************** *** 77,80 **** --- 77,103 ---- } + static boolean isEmpty(ITable table) throws DataSetException + { + Column[] columns = table.getTableMetaData().getColumns(); + + // No columns = empty + if (columns.length == 0) + { + return true; + } + + // Try to fetch first table value + try + { + table.getValue(0, columns[0].getColumnName()); + return false; + } + catch (RowOutOfBoundsException e) + { + // Not able to access first row thus empty + return true; + } + } + /** * Returns list of tables this operation is applied to. This method *************** *** 99,108 **** // for each table ITableIterator iterator = iterator(dataSet); ! while(iterator.next()) { ITable table = iterator.getTable(); ! // do not process empty table ! if (table.getRowCount() == 0) { continue; --- 122,131 ---- // for each table ITableIterator iterator = iterator(dataSet); ! while (iterator.next()) { ITable table = iterator.getTable(); ! // Do not process empty table ! if (isEmpty(table)) { continue; *************** *** 121,138 **** Column[] columns = operationData.getColumns(); ! // for each row ! int rowCount = table.getRowCount(); ! for (int i = 0; i < rowCount; i++) ! { ! int row = _reverseRowOrder ? (rowCount - 1 - i) : i; ! // for each column ! for (int j = 0; j < columns.length; j++) { ! Column column = columns[j]; ! statement.addValue(table.getValue(row, ! column.getColumnName()), column.getDataType()); } ! statement.addBatch(); } --- 144,170 ---- Column[] columns = operationData.getColumns(); ! // For each row ! int start = _reverseRowOrder ? table.getRowCount() - 1 : 0; ! int increment = _reverseRowOrder ? -1 : 1; ! try ! { ! for (int i = start; ; i = i + increment) { ! int row = i; ! ! // for each column ! for (int j = 0; j < columns.length; j++) ! { ! Column column = columns[j]; ! statement.addValue(table.getValue(row, ! column.getColumnName()), column.getDataType()); ! } ! statement.addBatch(); } ! } ! catch (RowOutOfBoundsException e) ! { ! // end of table } Index: RefreshOperation.java =================================================================== RCS file: /cvsroot/dbunit/dbunit/src/java/org/dbunit/operation/RefreshOperation.java,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** RefreshOperation.java 9 Apr 2003 22:52:12 -0000 1.24 --- RefreshOperation.java 13 Apr 2003 16:49:58 -0000 1.25 *************** *** 51,54 **** --- 51,66 ---- } + private boolean isEmpty(ITable table) throws DataSetException + { + return AbstractBatchOperation.isEmpty(table); + } + + private ITableMetaData getOperationMetaData(IDatabaseConnection connection, + ITableMetaData metaData) throws DatabaseUnitException, SQLException + { + return AbstractBatchOperation.getOperationMetaData( + connection, metaData); + } + //////////////////////////////////////////////////////////////////////////// // DatabaseOperation class *************** *** 61,76 **** // for each table ITableIterator iterator = dataSet.iterator(); ! while(iterator.next()) { ITable table = iterator.getTable(); ! // do not process empty table ! if (table.getRowCount() == 0) { continue; } ! ITableMetaData metaData = AbstractBatchOperation.getOperationMetaData( ! connection, table.getTableMetaData()); RowOperation updateRowOperation = createUpdateOperation(connection, schema, metaData); --- 73,88 ---- // for each table ITableIterator iterator = dataSet.iterator(); ! while (iterator.next()) { ITable table = iterator.getTable(); ! // Do not process empty table ! if (isEmpty(table)) { continue; } ! ITableMetaData metaData = getOperationMetaData(connection, ! table.getTableMetaData()); RowOperation updateRowOperation = createUpdateOperation(connection, schema, metaData); *************** *** 78,93 **** schema, metaData); ! // refresh all rows ! for (int i = 0; i < table.getRowCount(); i++) { ! if (!updateRowOperation.execute(table, i)) { ! insertRowOperation.execute(table, i); } } ! ! // cleanup ! updateRowOperation.close(); ! insertRowOperation.close(); } --- 90,114 ---- schema, metaData); ! try { ! // refresh all rows ! for (int i = 0; ; i++) { ! if (!updateRowOperation.execute(table, i)) ! { ! insertRowOperation.execute(table, i); ! } } } ! catch (RowOutOfBoundsException e) ! { ! // end of table ! } ! finally ! { ! // cleanup ! updateRowOperation.close(); ! insertRowOperation.close(); ! } } |