| 1 | # $Id$ |
|---|
| 2 | |
|---|
| 3 | Revision history for Data::ObjectDriver |
|---|
| 4 | 0.07 |
|---|
| 5 | - When an object is changed, delete the cache instead of updating it. |
|---|
| 6 | It is a bit more expensive, but should safer. |
|---|
| 7 | - Fixed a uuv warning thanks to Kazuhiro Shibuya |
|---|
| 8 | - Fixed a issue in the test suite for newer version of SQLite |
|---|
| 9 | reported by Emmanuel Seyman |
|---|
| 10 | http://rt.cpan.org/Ticket/Display.html?id=45186 |
|---|
| 11 | |
|---|
| 12 | 0.06 2009.01.28 |
|---|
| 13 | - Added peek_next() method to ResultSet, q.v. |
|---|
| 14 | - Localized creation of D::OD::Iterator object. Thanks to Hirotaka Ogawa |
|---|
| 15 | for the patch. |
|---|
| 16 | - Fixed compilation error with Perl 5.10. Thanks to smpeters for the patch. |
|---|
| 17 | - Added a new $object->uncache_object as a mirror of cache_object(), which |
|---|
| 18 | purge one object from the cache layer, for the cases where you want a |
|---|
| 19 | manual control over it. |
|---|
| 20 | - Added a "distinct" method to D::OD::SQL that forces the DISTINCT keyword |
|---|
| 21 | in the generated SQL statement. Thanks to John Berthels for the patch. |
|---|
| 22 | - Added a "window_size" argument for the search() method of the caching |
|---|
| 23 | layer to constrain the number of objects loaded from the database for |
|---|
| 24 | large or unbounded searches. |
|---|
| 25 | - Added a "comment" argument to search parameter allowing the SQL |
|---|
| 26 | queries to be watermarked with SQL comments. |
|---|
| 27 | - Added a "object_is_stored" method on DOD objects, which returns true until |
|---|
| 28 | the object has been saved in the persistent store. |
|---|
| 29 | - Added a "pk_str" method on base objects has a nice shortcut for printing |
|---|
| 30 | the primary key of an object. |
|---|
| 31 | - Added a "reuse_dbh" option to D::OD::D::DBI, if enabled it caches and reuses |
|---|
| 32 | $dbh using the dsn as the key. |
|---|
| 33 | - Exposed the transaction mechanism built in the drivers at the object levels: |
|---|
| 34 | D::OD::BO->begin_work now starts a global transaction across all drivers |
|---|
| 35 | ending with a rollback or a commit on the same class. |
|---|
| 36 | - Fix problem with prepare_cache in DBD::SQLite |
|---|
| 37 | - Fix PerlCritic tests |
|---|
| 38 | http://rt.cpan.org/Ticket/Display.html?id=37197 |
|---|
| 39 | - Fix problems under 5.10 |
|---|
| 40 | http://rt.cpan.org/Ticket/Display.html?id=30941 |
|---|
| 41 | - Fix test failures under Win32 |
|---|
| 42 | http://rt.cpan.org/Ticket/Display.html?id=24480 |
|---|
| 43 | - Pg *can't* handle REPLACE |
|---|
| 44 | https://rt.cpan.org/Ticket/Display.html?id=38840 |
|---|
| 45 | - Fixed an issue where Pg would look into the wrong sequence if DBI has a |
|---|
| 46 | 'prefix' configured (used in a undocumented TheSchwartz feature) |
|---|
| 47 | https://rt.cpan.org/Ticket/Display.html?id=41880 |
|---|
| 48 | - Added Oracle support, courtesy of Xiaoou Wu (Oracle) |
|---|
| 49 | https://rt.cpan.org/Ticket/Display.html?id=41929 |
|---|
| 50 | - Added an "add_index_hint" method to D::OD::SQL to allow specifying |
|---|
| 51 | a "USE INDEX" hint. |
|---|
| 52 | - Added an experimental GearmanDBI driver that provides query coalescing |
|---|
| 53 | using Gearman workers (to sit in front of a direct DBI driver). |
|---|
| 54 | |
|---|
| 55 | 0.05 2008.02.24 |
|---|
| 56 | - Added a new Data::ObjectDriver::ResultSet abstraction for building |
|---|
| 57 | result sets with lazy-loading of the actual results. This allows for |
|---|
| 58 | passing around a representation of a full result set (no limit, no |
|---|
| 59 | offset, etc), and allowing callers to modify the set as needed. |
|---|
| 60 | - search() now returns a subref blessed into the new D::OD::Iterator class. |
|---|
| 61 | It's backwards-compatible (you can still call $iter->()), but it now |
|---|
| 62 | supports $iter->next() as well. |
|---|
| 63 | - Added a D::OD::SQL::add_complex_where method, for creating more complex |
|---|
| 64 | WHERE clauses with boolean operations. |
|---|
| 65 | - Added instrumentation/profiling for the memcached, Apache, and RAM |
|---|
| 66 | caching drivers. |
|---|
| 67 | - Improved "remove" support in the experimental Multiplexer driver. |
|---|
| 68 | - Fixed an ordering bug with BaseCache->update: the cache is now updated |
|---|
| 69 | after the fallback (a persistent store, usually) is updated, to prevent |
|---|
| 70 | the cache being updated but the backend erroring out. |
|---|
| 71 | - Let DSNs start with "DBI:" instead of only "dbi:" |
|---|
| 72 | - Fix a bug where the iterator version of search() (search() called |
|---|
| 73 | in scalar context) wasn't calling finish() on $sth. It was generating |
|---|
| 74 | warnings on certain circumstances. |
|---|
| 75 | - Fixed a circular reference when using has_a. |
|---|
| 76 | |
|---|
| 77 | 0.04 2007.05.02 |
|---|
| 78 | - Fixed a bug where single-PK classes were not returning the |
|---|
| 79 | objects correctly sorted during a lookup_multi. |
|---|
| 80 | - Added support for MySQL 'REPLACE INTO' syntax with a new |
|---|
| 81 | $obj->replace() method. |
|---|
| 82 | - Added a new trigger 'post_inflate'. |
|---|
| 83 | - Fixed a minor issue (warning) with no_changed_flags in column_func() |
|---|
| 84 | - Added has_a() construct to build linking methods between classes. |
|---|
| 85 | - remove() returns number of affected rows, with DBI semantics. |
|---|
| 86 | - Bulk inserting of data can now be done with the new bulk_insert() |
|---|
| 87 | Class method. It uses Postgres' COPY command or MySQL's |
|---|
| 88 | multi-value inserts to load data quickly. |
|---|
| 89 | - The new() constructor for objects now accepts column name/value |
|---|
| 90 | pairs which are passed to a new init() method. |
|---|
| 91 | - The new init() method can be called on any object to set |
|---|
| 92 | many parameters in one call. |
|---|
| 93 | - This init() method can also be overridden, allowing for custom |
|---|
| 94 | initialization code. |
|---|
| 95 | - Added parens around terms within complex SQL conditionals, to allow |
|---|
| 96 | even more complex conditions to be created. |
|---|
| 97 | - Made the second argument to D::OD::SQL::add_select optional. It defaults |
|---|
| 98 | to the value of the first argument (the column name). |
|---|
| 99 | - Pass along $orig_obj (original object) when calling post_save/post_update |
|---|
| 100 | triggers, even when the object hasn't changed. |
|---|
| 101 | - A non-numeric value in a LIMIT now causes an exception. |
|---|
| 102 | - Fixed a bug where calling SQL->add_join twice would create an invalid |
|---|
| 103 | SQL statement. |
|---|
| 104 | - More documentation! |
|---|
| 105 | - Added more DOD::DBD::* options: sql_for_unixtime, can_delete_with_limit, |
|---|
| 106 | is_case_insensitive, can_replace, sql_class. |
|---|
| 107 | - Added an experimental Multiplexer class to direct writes to multiple |
|---|
| 108 | backend drivers. |
|---|
| 109 | - Added a generic end_query method, analogous to start_query, which is |
|---|
| 110 | called after each query. Useful for profiling etc. |
|---|
| 111 | - Text::SimpleTable is now loaded dynamically so that it's no longer |
|---|
| 112 | a requirement for D::OD. |
|---|
| 113 | |
|---|
| 114 | 0.03 2006.08.05 |
|---|
| 115 | - Added an inflate and deflate mechanism to memcached caching. When objects |
|---|
| 116 | are stored in memcached, they are now deflated to a hash reference |
|---|
| 117 | containing only the column values; retrieving the object from memcached |
|---|
| 118 | automatically inflates the object to the full representation. Classes |
|---|
| 119 | can override inflate and deflate to store additional information in the |
|---|
| 120 | memcached representation that's kept automatically up-to-date. |
|---|
| 121 | - Added a SimplePartition driver, which helps to make partitioning, well, |
|---|
| 122 | simpler. Still to come: documentation and a tutorial on partitioning. |
|---|
| 123 | - Many, many bug fixes and improvements to the caching drivers. |
|---|
| 124 | - Added detection of changed columns, such that only columns that have |
|---|
| 125 | been changed are updated in an UPDATE statement. |
|---|
| 126 | - Added a clear_cache method to the D::O::D::Cache::RAM class. |
|---|
| 127 | - Added cross-DBD error handling, which maps local error codes to error |
|---|
| 128 | constants in Data::ObjectDriver::Errors. The list of supported errors |
|---|
| 129 | is pretty miniscule thus far (just one), but will be expanded as needed. |
|---|
| 130 | - Added support for query profiling (Data::ObjectDriver::Profiler), which |
|---|
| 131 | counts queries, calculates frequent queries, and can produce reports. |
|---|
| 132 | - Added support for optional table prefixes, which simplifies setting up |
|---|
| 133 | identical schemas in the same database. |
|---|
| 134 | - Added an optional $terms argument to D::O::D::DBI->update, which can |
|---|
| 135 | add additional terms to the UPDATE statement besides just the PK. |
|---|
| 136 | - Added a D::O::D::DBI->begin_work method, and improved the commit and |
|---|
| 137 | rollback methods. |
|---|
| 138 | - Added a D::O::D::DBI->last_error method. |
|---|
| 139 | - Added support for multiple JOIN clauses with a new D::O::D::SQL->add_join |
|---|
| 140 | method. |
|---|
| 141 | - Multiple OR values are now contained in an IN (...) clause rather than |
|---|
| 142 | many joined OR clauses. |
|---|
| 143 | - Added a for_update option to search, which allows constructing a |
|---|
| 144 | SELECT ... FOR UPDATE query. |
|---|
| 145 | - D::O::D::BaseObject->column is now removed and replaced with a |
|---|
| 146 | column_func method, which returns a subroutine reference used to |
|---|
| 147 | initialize the dynamically-created methods for each column. This allows |
|---|
| 148 | some optimizations. |
|---|
| 149 | |
|---|
| 150 | 0.02 2006.02.21 |
|---|
| 151 | - Added Data::ObjectDriver::BaseView, a base class for creating "views" |
|---|
| 152 | across multiple tables, or involving more complex aggregate queries. |
|---|
| 153 | - Added trigger/callback support for common operations. See the |
|---|
| 154 | Data::ObjectDriver documentation for more details. |
|---|
| 155 | - Added GROUP BY support in Data::ObjectDriver::SQL. |
|---|
| 156 | - Data::ObjectDriver::BaseCache->search now uses lookup_multi to do a |
|---|
| 157 | very fast PK lookup, which will hit the cache first before the |
|---|
| 158 | backend DB. |
|---|
| 159 | - Fixed bugs with BLOB columns in SQLite driver. |
|---|
| 160 | - Added connect_options option to Data::ObjectDriver::Driver::DBI, for |
|---|
| 161 | passing in custom options for a DBI->connect call. |
|---|
| 162 | - Data::ObjectDriver::BaseObject->remove now works as a class method. |
|---|
| 163 | - Added Data::ObjectDriver::BaseObject->primary_key_tuple for retrieving |
|---|
| 164 | the primary key value(s) for an object. |
|---|
| 165 | - Added Data::ObjectDriver::BaseObject->refresh to reload an object from |
|---|
| 166 | the database. |
|---|
| 167 | - Added support for HAVING clauses in Data::ObjectDriver::SQL. For views |
|---|
| 168 | that are not attached to a particular datasource, any terms passed in |
|---|
| 169 | to the query will automatically be turned into HAVING clauses. |
|---|
| 170 | - Improved the lookup_multi method for all BaseCache subclasses: we now |
|---|
| 171 | allow the subclass to look up multiple values in the cache and return |
|---|
| 172 | any already-cached items, then make a list of the remaining IDs and |
|---|
| 173 | send them to fallback->lookup_multi. |
|---|
| 174 | - Driver::DBI->lookup_multi will now use an OR clause to look up |
|---|
| 175 | multiple values in one query. |
|---|
| 176 | - Added lots of test cases. |
|---|
| 177 | - Pod fix (Thanks to Koichi Taniguchi) |
|---|
| 178 | |
|---|
| 179 | 0.01 2005.09.23 |
|---|
| 180 | - Initial distribution. |
|---|