On 01.12.12 23:14, Tim Bunce wrote:
On Thu, Nov 29, 2012 at 10:15:19PM +0100, Jens Rehsack wrote:But back to the issue - now it seems dbm_tables is fetched earlier in some cases than f_dir which causes an invocation of DBI::DBD::SqlEngine::Table::get_table_meta (including DBI::DBD::SqlEngine::Table::bootstrap_table_meta) before f_dir has been set. This causes $dbh->{sql_meta}->{fred}->{f_dir} being initialized to the default value of $dbh->{f_dir} which is always cur_dir(). Looking into DBI::DBD::SqlEngine::dr::connect around line 180 it could be seen that there's already some magic for "some settings must be done before others". A quick fix for "now" could be: keys: ("sql_meta", $dbh->{dbm_meta}, ...) must be initialized last - after any other k/v pair from %$attrs. Another quick should could be forbid setting meta info during connect(), as it's documented - but this would be a hugh step backwards in my effort making DBI::DBD::SqlEngine and derived DBD's usable through Gofer proxy. So I'd prefer the first quick shot ... For longer way, I'd like to refactor the order procedure to a more flexible way: $dbh->{dbd_init_order} = [ [qw(Profile RaiseError PrintError AutoCommit)], [qw(ReadOnly ...)], ... [qw(sql_meta dbm_tables ...)] ]; Remaining question in that proposal: where's the fence between "must be last" and "insert unnamed attrs here"?I don't know, but I would like a working DBI for 5.17.6+ before too long.
Well, we developed two patches for now: 1) Merijn's patch - http://pasta.test-smoke.org/385 + looks simple, easy to understand - makes assumptions about attribute names of derived DBD's (e.g. dbm_tables, but this can be easily renamed by assigning new name for it to $dbh->{dbm_meta} (by driver author), eg. $dbh->{dbm_meta} = "dbm_sources") - increases complexitiy when more issues came up with similar patterns (eg. /_meta$/ can't be set from outside, but from derived driver) 2) Jens' patch - http://pasta.test-smoke.org/387 + backward compatible to ancient attributes (csv_file, csv_ext, ...) + no assumptions on derived DBD's + no false positives on pattern match - more complicated for quick review Any other +/- comments? In general both versions would fix the root cause of RT#81516, while the maintainers (Merijn, me) cannot choose the right one. Jens
