Hi DBI and DBD developers, I have some open points for DBD::File I'd like to ask for feedback on them.
The first two are related to the table meta data. 1) I introduced simple getters and setters for DBD::File table's meta data (look for get_file_meta and set_file_meta in lib/DBD/File/Developers.pod). Merijn and me came over to extend this interface with some wild cards: - '.': default - read, the attributes of the database handle is delivered/modified (even through a proxy, which was the primary intention) - '*': all - the attribute of all tables (and the default one) is modified - '+': as '*', but restricted to all ANSI conform tables names (default isn't touched) - qr//: all tables matching the regex are affected The question is related to the getter: how should the attributes being returned (or more: what API should be supported)? Let me explain a bit deeper the cause of the question. set_file_meta can be called using the table_name as first argument, the attribute name as second one and the new attribute value as third argument. It sounds reasonable to allow following call, too: $dbh->func( $tname, { attr1 => val1, attr2 => val2 }, 'set_file_meta' ); Consequently get_file_meta should be able to return more than one attribute, shouldn't it? So we have 3 situations for get_file_meta regarding the expected return values: a) 1 table, 1 attribute - expected return value is a scalar b) n tables, 1 attribute - expected return value is a hash of table names pointing to the scalar value of the attribute belonging to that table c) n tables, m attributes - expected return value is a hash of table names pointing to a hash of attribute names containing the attribute values of the affected table I rate it to complex in API and need external thoughts :) 2) backward compatibility of depreciated structures per table of DBD::CSV, DBD::AnyData (and maybe later DBD::PO or DBD::DBM). DBD::CSV had a structure $dbh->{csv_tables}{$tname}{...} - which is now handled via $dbh->{f_meta}{$tname}{...} ... - DBD::AnyData had the same with $dbh->{ad_tables}{$tname}{...}. Both had several attributes in their which were not synchronized between both DBD's. Further, the $dbh->{f_meta} structure contains the table names after they walked through an internal filter (suggested by mje) which handles the identifier case. An additional structure $dbh->{f_meta_map} is used to hold the map between the original table name (from SQL statement or through the getter/setter) and the internal used identifier. Because it could be very difficult to manage backward compatibility there, I would like to have a solution which can be plugged in as early as possible: a) $dbh->{csv_tables} or $dbh->{ad_tables} should become a tied hash which access the table's meta data using the get_table_meta method from the table implementor class. b) further, the meta data which can be accessed through this tie should be tied, too - to allow overriding FETCH/STORE methods which could handle the mapping between old attribute names and new attribute names. While I rate being 2a more important than 2b, I would like to get feedback for both ideas. Discarding 2a could result in inconsistent entries in $dbh->{f_meta} which could lead the DBD into unpredictable behavior. My third question has lesser implications :) 3) Merijn and me had the idea to let the users decide on connection whether to use DBI::SQL::Nano or SQL::Statement - not globally via DBI_SQL_NANO environment variable. Because of the handling of the handles for the dr, db and st instances of a DBD I hoped to get some suggestions how we could implement a similar behavior for DBD::File::Statement and DBD::File::Table. Thanks for all answers in advance, Jens