Current SortedTable behavior is a little unexpected and not convinient.
When we use FlatXmlDataSet or other datasets except database connected datasets, always the data is sorted as string because they have only UnknownDataType. For example, think about a case that read the following xml and sort by id:
<dataset> <TEST id="113" text="text113"/> <TEST id="1" text="text1"/> <TEST id="12" text="text12"/> </dataset>
We expect to sort by id as number like:
<TEST id="1" text="text1"/> <TEST id="12" text="text12"/> <TEST id="113" text="text113"/>
but actually it is sorted like:
<TEST id="1" text="text1"/> <TEST id="113" text="text113"/> <TEST id="12" text="text12"/>
We get same result even if we specify Column object with number data type or TableMetaData to SortedTable constructor.
Column[] orderbyCol = { new Column("id", DataType.BIGINT) }; SortedTable actual = new SortedTable(inputDataSet.getTable("TEST"), orderbyCol); actual.setUseComparable(true);
I think it would be better that we can specify data type for sorting. We have a constructor of SortedTable with Column[] so we can use it.
Current behavior is like:
1. Get column name from the specified Column[].
2. Look for the Column object with the name from TableMetaData of the DataSet.
3. Use the matched Column objects from the TableMetaData for sorting.
There should be a condition between step 2 and 3 like: if the Column object has UnknownDataType, then use specified Column objects. Current behavior will be changed but basically not harmful because the DataType of TableMeataData has a higher priority except UnknownDataType.
I created the patch of the code and testcase.
Ticket moved from /p/dbunit/bugs/347/