|
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();
! }
}
|