NAME
DBIx::SQLEngine::Docs::ToDo - Tasks, ideas, and bugs
TO DO
There are a number of things that could be done to improve this module.
Internals
Centralize logging interface by making 'DBI', 'SQL' arguments to general function.
Consider becoming a subclass of DBI via RootClass and DbTypeSubclass, rather than using composition via DBIx::AnyDBD. This is somewhat attractive: it might run faster by eliminating a layer of delegation, and it would facilitate separation of the DBH and STH methods. The downside is loosing the flexibility of composition: if someone had their own DBI subclass, we could dynamically wrap around it if using composition, but it might be harder to dynamically inherit from it. There's also a certain degree of inertia
Distribution
The test script is fairly minimal and really ought to exercise much more of the public interface. Specific things to add to the test include:
- Test for inserting, updating and selecting nulls, including "is null" test.
- Test new transaction code.
Consider bumping the version number; the leading 0.0xx may deter some potential users by suggesting a very incomplete package.
Columns
The column-information retrieve in DBIx::SQLEngine::Default should be using DBI's type_info methods.
Helper Classes
Consider blessing the column info hashes into new Column and ColumnSet classes.
Consider adding very simple Table and TableSet classes.
Proposed Array Select interface
# ( $row_arrays, $column_hashes ) = $self->fetch_rows( %clauses );
// Also visit_rows, fetch_named_query_rows... [?]
Pre-defined Query Library
Proposed "Named Query" interface:
# $sqldb->define_named_query( name , string_or_sub ) // or return current
# %clauses = $sqldb->prepare_named_query( name, args ) // with conversion, recursion
# ( $row_hashes, $column_hashes ) = $sqldb->fetch_named_query( name, args )
# @results = $sqldb->visit_named_query( code, name, args )
# $result = $sqldb->do_named_query( name, args )
Additional Criteria
The Criteria subclasses are woefully incomplete. Candidates include:
package DBO::Criteria::SubString;
package DBO::Criteria::CaseInsensitiveSubString;
package DBO::Criteria::NumericEquality;
package DBO::Criteria::NumericInequality;
package DBO::Criteria::StringInequality;
Consider enabling pure-Perl interpretation of criteria:
package DBO::Criteria::Equality;
sub inverse { 'DBO::Criteria::Inequality' }
# $flag = $crit->matches( $record );
sub matches {
my ($crit, $record) = @_;
return ($crit->value( $record ) eq $crit->{'value'}) ? 1 : 0;
}
Future Database-specific Functionality
Review DBIx::Compat; it seems like this information should map fairly directly to candidate methods and subclasses.
Additional subclass logic will be required to support the following:
Oracle: single, trailing long.
MySQL, Oracle: downcase column names.
DB2: Long insertion via multiple updates.
Informix: escape newlines on insert/update/where and select