The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#########################################
# CHANGE LOG
#########################################

0.963
 x add support for qualified classes on a single table (i.e. get_object("person",...)
   may return an App::RepositoryObject::Man or an App::RepositoryObject::Woman depending
   on the value in the "gender" field)
 x add not_in, not_contains, and not_matches operators
 x add better implied operations to value-side of params (=, !, !=, >, >=, <=, ~, =~)
 x _shutdown_unshareable_resources()
 x substitute() on joincriteria
 x added automatic timings on all debug_sql
 x added explain_sql
 x added support for dbsocket option in App::Repository::MySQL

0.962
 ???

0.96
 x test suites are driven by app.conf (App::Options) (dbdriver/dbhost/dbname/dbuser/dbpass)
   (and they succeed trivially when no app.conf is set up)
 x App::Repository::DBI - change the meaning of param.eq, .eq means =, not infer IN
 x App::Repository::DBI - return 0 rather than 0E0 from update()
 x App::SessionObject::RepositoryObjectSet - add max_age feature to serve as default if not provided in get_objects({max_age => 0})
 x App::Repository::DBI - dbexpr_update option sprintf()s using more than one $value (5 actually) for 'if(%s=5,%s,3)' expressions
 x App::Repository::DBI - add support for literal aggregation functions
 x App::Repository::DBI - rename summarykeys to group_by
 x App::Repository::DBI - enhanced debug_sql output on _do()
 x App::Repository::DBI - protect against undef params
 x App::Repository::DBI - retry when _connect() gets a Lost connection
 x App::Repository::DBI - _get_default_columns() use configured columns for get_hashes() etc. when no columns specified
 x App::Repository::DBI - table-level hints now work (main table only) (MySQL-compatible)
 x App::Repository/::DBI - _get_default_columns($table) returns {default_columns}, {phys_columns}, or {columns}
 x App::ValueDomain::RepositoryTables - a list of tables from a repository
 x App::ValueDomain::RepositoryTableColumns - a list of column from a table in a repository
 x App::ValueDomain::Repository - added EACH as a special kind of {extra_values}
 x App::ValueDomain::Repository - added {extra_values} and {extra_labels} attribs
 x App::Repository - (logical to physical) table redirection
 x App::Repository::evaluate_expressions() - can now evaluate expressions for column definitions
 x App::Repository::sort() - can now sort arrays of hashrefs as well as arrays of arrayrefs
 x App::Repository::DBI - add _do($sql) method - same as $db->{dbh}->do($sql) with added debugging features
   The "_" reminds you this is not really a portable method in the spirit of the App::Repository abstraction.
   It is provided so that you won't be tempted to use the work-around described above.
   Any need to use this method is an indication that the API still needs work. Please send feedback to me.
   NOTE: _do() works for select as well as insert/update/delete statements, returning the array of rows
 x App::ValueDomain::Repository - add extra_values, extra_labels, and order_by
 x App::SessionObject::RepositoryObjectSet - enable relevant "columns" to be configured (limits them)
 x App::SessionObject::RepositoryObjectDomain - can configure mappings of domain params to individual object set params
 x $rep->new_object() calls class-specific (RepositoryObject) _init() method to set up object values
 x $rep->new_object() now adds configured "default" values
 x $rep->new_object() now throws an exception for NULL values in "not_null" and alternate key columns
 x $rep->new_object() has option { temp => 1 } that doesn't create the RepositoryObject in the repository

0.95
 x add "config_from_options" as a default behavior for App::Repository::DBI
 x add $rep->new_object($table, {@initializers}); (and tests)
 x add $repobj->delete(); (and tests)
 x add $rep->import_rows(...)  (import from file) (handles CSV by default)
 x add $rep->export_rows(...)  (export to file)   (handles CSV by default)

0.94
 x add "distinct => 1" to options hash for get_rows()/get_row()
 x recognize the following special cases in inferred-op params: '' (same as as 'ALL' in non-quoted/numeric params)
 x recognize the following special cases in inferred-op params: 'ALL','NULL','NULL,value','@[db expr]'
 x support set() with hash values. i.e. set($table,\@cols,\%values)
 x fix set_rows() to work (also with create option)
 x support compressed columns (through dbexpr/dbexpr_update)
 x changed test scripts to be driven by App::Options

0.93
 x MySQL - auto_reconnect flag set
 x DBI   - Reconnect on disconnect in _get_rows()/_get_row() (MySQL-specific?)
 x MySQL - load primary key, alternate keys, indexes
 x all   - Multiple (delegated) repositories

0.90 First functional/supportable release