mysql - DBUnit ignores column aliases, when creating dataset from query? -
i have 2 datasets, want compare dbunit: 1 defines xml file, other trying create using query:
dbconnection.createquerytable("my_table", "select ..."); select goes on couple of tables, few of them has same column names, using aliases distinguish between them. query runs fine, seems while creating dataset, dbunit ignores column aliases , uses original names instead. seen in debug log:
01.03.13 14:18:43,228 [ debug] abstractdatabaseconnection - createquerytable(resultname=my_table, sql= select `table1`.`name` , `table2`.`label` `table2_label` , `table3`.`label` `table1` , `table2` , `table3` `table1`.`id` = `table2`.`table1_id` , `table2`.`id` = `table3`.`table2_id` ) - start 01.03.13 14:18:43,228 [ debug] databasedatasourceconnection - getconnection() - start 01.03.13 14:18:43,228 [ debug] databaseconfig$configurator - statement fetch size set 100 01.03.13 14:18:43,240 [ debug] databasedatasourceconnection - getconnection() - start 01.03.13 14:18:43,240 [ debug] databasetablemetadata - 'schemaname' resultsetmetadata empty-string , not applicable hence. not try lookup column properties via databasemetadata.getcolumns. 01.03.13 14:18:43,240 [ debug] databasetablemetadata - 'schemaname' resultsetmetadata empty-string , not applicable hence. not try lookup column properties via databasemetadata.getcolumns. 01.03.13 14:18:43,240 [ debug] databasetablemetadata - 'schemaname' resultsetmetadata empty-string , not applicable hence. not try lookup column properties via databasemetadata.getcolumns. 01.03.13 14:18:43,240 [ debug] forwardonlyresultsettable - getvalue(row=0, columnname=name) - start 01.03.13 14:18:43,240 [ debug] forwardonlyresultsettable - getvalue(row=0, columnname=label) - start 01.03.13 14:18:43,240 [ debug] forwardonlyresultsettable - getvalue(row=0, columnname=label) - start 01.03.13 14:18:43,240 [ debug] forwardonlyresultsettable - getvalue(row=1, columnname=name) - start 01.03.13 14:18:43,241 [ debug] forwardonlyresultsettable - getvalue(row=1, columnname=label) - start 01.03.13 14:18:43,241 [ debug] forwardonlyresultsettable - getvalue(row=1, columnname=label) - start 01.03.13 14:18:43,241 [ debug] forwardonlyresultsettable - getvalue(row=2, columnname=name) - start 01.03.13 14:18:43,241 [ debug] forwardonlyresultsettable - getvalue(row=2, columnname=label) - start 01.03.13 14:18:43,241 [ debug] forwardonlyresultsettable - getvalue(row=2, columnname=label) - start as see - getvalue(row=x) uses label name table2 , table3 columns , not table2_label , label defined in query...
how solve this? using mysql database.
this looks caused change in mysql java connector
caused databasetablemetadata calling resultsetmetadata#getcolumnname() rather #getcolumnlabel()
you don't state version of dbunit/mysql using, dbunit 2.2 & 2.4.9 affected mysql connector 5.1.26.
as workaround, mysql devs have included backward compatability option, discussed in change above.
to configure it, add property jdbc url:
jdbc:mysql://host/db_name?useoldaliasmetadatabehavior=true
as per these instructions.
Comments
Post a Comment