This file shows the changes in this release of xPDO.

xPDO 2.0.0-pl (November 27, 2010)
====================================
- [#2788] Escape database name in xPDOGenerator_mysql::writeSchema()
- Add xPDOAPCCache implementation of xPDOCacheProvider
- Refactor usages of xPDO::getObjectLoader() to use xPDO::call()
- Add xPDO::call() allowing db-specific static method overrides
- Add xPDOWinCache implementation of xPDOCache provider
- Add workaround to drop a database for sqlsrv
- Add workaround to trim PDO::quote() results for sqlsrv
- Add virtual support for LIMIT..OFFSET to sqlsrv driver
- Set dbname property from database property in xPDO::parseDSN()
- Introduce pdo_sqlsrv driver support

xPDO 2.0.0-rc3 (October 25, 2010)
====================================
- Add xPDO::getIterator() allowing more efficient traversing of result sets
- Add script to upgrade older xPDO mysql models to SCHEMA_VERSION 1.1
- Add missing attributes in xPDOSimpleObject map index element
- Do not generate primary key index for xPDOSimpleObject derivatives
- Introduce xPDO::SCHEMA_VERSION and set it to 1.1 to distinguish new format for indexes

xPDO 2.0.0-rc2 (October 20, 2010)
====================================
- Use new index metadata in maps to generate indexes for mysql
- Fix mkdir issue in xPDOGenerator::parseSchema()
- Improve schema representation of mysql indexes in xPDOGenerator_mysql::writeSchema()
- [#2579] Fix xPDOFileVehicle not calling resolve on uninstall()
- [#2414] Fix phpdoc inaccuracy and redundant assignment
- Fix caching error in xPDOObject::loadCollectionGraph()
- Make xPDOQuery::prepare() always call construct()
- [#2401] Clarify xPDO::removeCollection() return value
- [#2419] Add defined join criteria when custom criteria is provided to xPDOObject::getMany()
- [#2416] Add :NOT IN operator support for array value bindings
- [#2404] Allow xPDOTransport::install to be aborted when an xPDOVehicle fails to install
- [#XPDO-64] Fix xPDO::logTarget not to lose options after first call to xPDO::_log()
- Fix xPDOObject::_loadInstance() to work with xPDOQuery::hydrateGraphNode() properly
- Fix bug in xPDOObject::load() when caching by primary key
- Fix bug with xPDOManager_sqlite::removeSourceContainer()
- [#XPDO-62] Make getObjectGraph() respect class_key
- Add IF EXISTS to DROP DATABASE statement in xPDOManager_mysql::removeSourceContainer()
- Add xPDO::getIndexMeta() method
- Fix invalid call to xPDOManager::getPhpType() in xPDOGenerator::writeSchema()
- [#XPDO-74] Fix bug in xPDOObject::save() when updating rows with compound primary keys
- [#XPDO-72] Fix invalid call to xPDOManager::getPhpType() in xPDOGenerator::parseSchema()
- Fix accessibility of xPDOTransport::_unpack()
- Divert excess log output from xPDOVehicle classes to LOG_LEVEL_DEBUG
- Remove extra slash in path when generating class files
- Simplify includes of parent classes
- Add xPDODriver to better abstract driver-specific attributes and behavior
- Fix several references to xPDO::$_escapeChar in xPDOQuery
- Split xPDO::$_escapeChar into $_escapeCharOpen and $_escapeCharClose
- Simplify path for require_once in platform class templates
- Trim property keys and values in xPDO::parseDSN()
- [#XPDO-66] Add xPDOTransport::ARCHIVE_WITH to allow explicit use of PclZip even if ZipArchive exists
- Add xPDO::literal() method for SQL literal strings
- Introduce pdo_sqlite driver support
- Fix exception logging in xPDOManager_mysql
- Fix xPDO::parseDSN() for sqlite DSN format
- Remove xpdo.connect.inc.php (no longer used)
- Migrate to git
- [#XPDO-46] Implement support for IN operator using array as binding
- [#XPDO-51] Fix incorrect criteria variable when caching individual rows from collections by primary key
- [#XPDO-53] Fix bug preventing save of related objects when a key owner is foreign and not new
- Refactor xPDO::getManager() and xPDOManager::getGenerator() to work with other db engines besides mysql
- Replace direct references to xPDO::$_escapeChar with new xPDO::escape()
- Move xPDOGenerator::getPHPType() to xPDOManager
- Fix non-static call to xPDO::parseDSN() in xPDO::__construct()
- Make sure db-specific connect_file exists before trying to include it
- Remove unnecessary overridden _initFields() in xPDOObject derivatives
- [#XPDO-54] Fix xPDOQuery to properly recognize MySQL Fulltext search expression as a conditional clause
- [#XPDO-52] Fix fatal error when xPDOManager::createObjectContainer() cannot prepare a PDOStatement
- xPDO::log() and xPDO::$logTarget will now accept an ARRAY target with an option that is a reference to the var
- xPDO::connect() should return false on Exception
- Ensure driverOptions is set as an empty array if the value passed is not an array
- Log PDOException messages in xPDO::connect()
- [#XPDO-49] Fix inconsistent static and non-static calls to fromJSON() and toJSON() methods on xPDO
- Added xPDO::getService to load service classes
- Commented out deprecated code in xPDOVehicle dealing with PHP validators
- Fixed typo in xPDOVehicle where $r should be $v
- [#XPDO-40] Fixed getCount to work when passing a criteria with a class alias set.
- xPDOTransport: Fix several E_STRICT errors caused by static calls to methods not defined as static.
- xPDOTransportVehicle: Implemented missing _compilePayload(), and fixed errors in _installTransport() and uninstall().
- xPDOValidator: Fix several E_STRICT errors caused by inconsistent method signatures in xPDOValidationRule::isValid() derivatives.
- Fixed bug in xPDOTransportVehicle::put() referring to xPDOFileVehicle.
- xPDOManager_mysql::createSourceContainer() and removeSourceContainer() will use provided connection properties or default to current xPDO instance configuration.
- Removed dependency on mysql extension for xPDOManager_mysql::createSourceContainer() and removeSourceContainer() implementations.
- Refactored xPDOManager to be an abstract class rather than calling static methods in derivatives.
- Added support for xPDOObjectVehicle::uninstall() to operate on related_objects.
- Fixed bug in xPDOObjectVehicle::uninstall() not getting UPDATE_OBJECT value properly.
- Added xPDOTransport::UNINSTALL_OBJECT attribute and support in xPDOObjectVehicle::uninstall() [default value is true].
- Refactored xPDOCacheManager to determine new folder/file permissions via umask().
- Modified xPDOQuery_mysql::select() to trim the comma-delimited fields specified after explode()'ing the string.
- Modified xPDOVehicle::resolve() to return true if xPDOTransport::RESOLVE_FILES is set to false with file resolver types.
- Modified xPDOFileVehicle::install() to check xPDOTransport::INSTALL_FILES is not set to false before checking for the existence of the defined fileSource.
- Fixed xPDOVehicle::resolve() and xPDOFileVehicle::install() to prevent them from attempting to preserve files that do not exist.
- Added xPDOTransport::INSTALL_FILES and xPDOTransport::UNINSTALL_FILES to make xPDOFileVehicle behavior consistent with RESOLVE_FILES and RESOLVE_FILES_REMOVE.
- Updated xPDOVehicle::resolve() to properly detect if resolved when restoring preserved file archives.
- Updated xPDO and xPDOCriteria constructors to use proper PHP5 __construct().
- Added xPDOTransportVehicle class to allow transport packages to be embedded in other transport packages.
- Updated copyright dates.
- [#XPDO-42] Fixed error with xPDOQuery::parseConditions() ignoring NULL bound values.
- Fixed xPDOCriteria::toSQL() to properly handle NULL values.
- Updated/fixed xPDOZip implementation and enabled it as the preferred zip provider for xPDOTransport.
- Made xPDOVehicle an abstract class.
- [#XPDO-4] Allow nesting conditions arbitrarily deep using simple nested array format.

xPDO 2.0.0-rc1 (LastChangedRevision: 389, LastChangedDate: 2009-12-31 11:18:40 -0700 (Thu, 31 Dec 2009))
====================================
- [#XPDO-27] Allow getCount() to work with Collection Graphs.
- [#XPDO-38] Modified xPDOQuery to determine conjunctions for condition groups based on conjunction specified for first condition in the group.
- Added changelog.txt
