changelog.txt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. This file shows the changes in this release of xPDO.
  2. xPDO 2.7.0-pl (May 2, 2018)
  3. ====================================
  4. - Fix xPDOIterator failure when fetch returns null due to object hydration
  5. - Make json and array phptypes quotable in xPDOQuery
  6. - Replace all deprecated while/each() loops with foreach() loops for PHP 7.2 compat
  7. xPDO 2.6.0-pl (November 1, 2017)
  8. ====================================
  9. - Generate engine into the map files for MySQL
  10. - Make InnoDB the default engine for MySQL
  11. - Add missing return statements to built-in validation classes
  12. - Remove all embedded escape characters when escape() is used on a string
  13. - Make sure empty cache file does not return true in PHP format
  14. - Make sure FileCache uses file/folder permissions options + add optional overrides
  15. xPDO 2.5.3-pl (January 3, 2017)
  16. ====================================
  17. - Make sure xPDOQuery base class is always loaded
  18. xPDO 2.5.2-pl (December 16, 2016)
  19. ====================================
  20. - Sanitize and prevent SQLi in getObject calls expecting PK values
  21. - Make isValidClause a public static method in xPDOQuery
  22. - Allow empty sort direction
  23. - Revert getCriteria change to force scalar params to be PK values
  24. - Make xPDOQuery::isValidClause a public method
  25. - Change constructor in PclZip to be PHP 7 compatible
  26. xPDO 2.5.1-pl (November 14, 2016)
  27. ====================================
  28. - Force scalar parameters to be PK values in getCriteria
  29. - Prevent SQLi in sortby, sort direction, and limit clauses
  30. - Detect SQLi clauses when no space exists after UNION
  31. xPDO 2.5.0-pl (February 3, 2016)
  32. ====================================
  33. - Optimize and improve logging
  34. - Fix undefined index notice for model indexes
  35. - Allow definition of primary key fields without legacy index="pk"
  36. - Add ARRAY_EXTENDED logTarget that stores an array of data for each log entry
  37. xPDO 2.4.1-pl (September 22, 2015)
  38. ====================================
  39. - Optimize xPDO::getOption() for significant performance increase
  40. xPDO 2.4.0-pl (June 26, 2015)
  41. ====================================
  42. - Add ability to override mysql table engine via options
  43. - Allow custom attributes in schema object elements
  44. - Allow silent failure of xPDOVehicle validators
  45. - Only show parseBindings results if debug set
  46. - Accept benign values that contain the word union
  47. - Allow xPDOObject::remove() to remove dependents with composite relationships
  48. - Respect engine specified in mysql schema
  49. xPDO 2.3.0-pl (July 15, 2014)
  50. ====================================
  51. - Allow recursive xPDOObject::remove() beyond one level
  52. - Allow schema to define callbacks for field
  53. - Remove deprecated xPDO::getMicroTime() method
  54. - Reject xPDOQuery conditions with SQL injection attempts
  55. - Resolve xPDO::parseBindings() error from /e modifier fix
  56. - Fix xPDO::getCount() to work with queries containing group by
  57. - Replace reflection of PHP_SELF with SCRIPT_NAME in xPDO::log()
  58. - Replace use of deprecated /e preg_replace modifier
  59. - Add dependency metadata/API to xPDOTransport
  60. xPDO 2.2.9-pl (September 12, 2013)
  61. ====================================
  62. - Improve accuracy of query statistics
  63. - [#10183] Fix cache entry removal on xPDOObject::remove()
  64. xPDO 2.2.8-pl (August 26, 2013)
  65. ====================================
  66. - [#9864] Identify compound PK's properly in xPDOQuery::parseConditions()
  67. xPDO 2.2.7-pl (April 9, 2013)
  68. ====================================
  69. - [#9793] Preserve numeric keys in xPDOObject::getMany()
  70. xPDO 2.2.6-pl (March 16, 2013)
  71. ====================================
  72. - [#7452] Fix sql errors with decimal fields in some locales
  73. - [#9062] Fix problem loading multiple xPDOQuery driver classes
  74. - [#9629] Fix notice in xPDOConnection::getOption() when $options not an array
  75. - [#9020] Prevent xPDOZip from attempting to add empty targets
  76. - [#9272] Implement NFS-safe flock-independent file locking
  77. - [#9020] Allow xPDOZip to pack empty directories
  78. - [#9023] Fix removal of subdirs when deleteTop = false in xPDOCacheManager::deleteTree()
  79. - [#8962] Prevent xPDOSimpleObject from overwriting xPDOObject map entry
  80. - [#8423] Fix tmpLockFile naming issue in xPDOCacheManager::lockFile()
  81. - [#8440] Add memcached implementation of xPDOCache (xPDOMemCached)
  82. - [#8423] Add flock-independent file locking to xPDOCacheManager::writeFile()
  83. - [#6930] Fix improper escaping of $ in parseBindings
  84. - [#8148] Prevent update from criteria using raw NATIVE_KEY on install
  85. - [#8320] Preserve order of $columns in xPDOObject::getSelectColumns()
  86. - Deprecate xPDO->getMicroTime()
  87. - [#8176] xPDO->updateCollection() fails to set NULL values
  88. xPDO 2.2.5-pl (June 1, 2012)
  89. ====================================
  90. - [#8060] Implement __isset() to fix empty()/isset() on hydrated vars
  91. - [#7797] Avoid E_NOTICE from array_diff_assoc change in 5.4
  92. - Prefix indexes with table name for sqlite
  93. - Fix lazy loading of fields on demand
  94. - [#7607] xPDOObject->get(array) triggering invalid lazy loading
  95. - xPDOObject/xPDOSimpleObject support for xPDO::getDescendants()
  96. - Refactor HYDRATE_FIELDS/HYDRATE_RELATED_OBJECTS using __get()/__set()
  97. xPDO 2.2.4-pl (April 2, 2012)
  98. ====================================
  99. - Refactor aggregate/composite criteria support for targeting local/foreign
  100. - Fix xPDOObject::_loadInstance for proper loading of graph objects
  101. - Refactor schema parsing using SimpleXML
  102. - Fix related_object installation in xPDOObjectVehicle
  103. - Add criteria support to aggregates and composites
  104. xPDO 2.2.3-pl (March 15, 2012)
  105. ====================================
  106. - Add xPDOScriptVehicle for manifest-based PHP scripts
  107. - Implement xPDOQuery::having() method
  108. - Add xPDO::getInstance() for singleton support
  109. xPDO 2.2.2-pl (January 4, 2012)
  110. ====================================
  111. - Fix handling of driverOptions in xPDOConnection instances
  112. - [#6240] Derivative-only fields marked lazy in base classes
  113. xPDO 2.2.1-pl (December 2, 2011)
  114. ====================================
  115. - [#3976] Trigger SQL error when empty IN condition encountered
  116. - [#6152] Optionally skip empty string values in xPDO::getOption()
  117. - [#4523] Log SQL errors in xPDOObject::loadCollectionGraph
  118. - [#6095] Log errors when xPDOManager::addField/alterField fail
  119. - [#6098] Fix issue with preg_replace in xPDO::parseBindings() method
  120. - [#5970] Fix issue with subpackages and derived classes that would cause nonsensical error
  121. xPDO 2.2.0-pl (November 15, 2011)
  122. ====================================
  123. - [#6046] Fix getDescendants() to recursively get derivative classes
  124. - [#6045] Fix setPackageMeta() to work with sub-packages
  125. - [#6044] Allow STI derivatives to supplement base class metadata
  126. - [#6043] Allow xPDO->getSelectColumns() to be overridden in xPDOObject derivatives
  127. xPDO 2.2.0-rc2 (October 20, 2011)
  128. ====================================
  129. - Fix xPDOAPCCache and xPDOWinCache multiple_object_delete features
  130. - Fix various bugs with database result set caching
  131. - Refactor escapeChar and quoteChar to xPDODriver classes
  132. - [#2432] Store relative path of files preserved by xPDOVehicle file resolvers
  133. - [#5904] Provide access to name and version in Transport packages
  134. xPDO 2.2.0-rc1 (September 7, 2011)
  135. ====================================
  136. - Add support for field aliases to be defined in the schema
  137. - Add xPDOObject->addFieldAlias for creating references to actual fields
  138. - Add xPDOObject->getIterator for iterating aggregate and composite relations
  139. - [#4590] Allow multiple connections to be defined for master/slave configurations
  140. - [#2883] Add xPDOObject->getGraph() and add feature in toArray() to return related object fields
  141. - Add xPDO->getGraph() method to infer relation graphs
  142. - [#4275] Add xPDO->updateCollection() method
  143. - [#4275] Enable UPDATE support and add set() method to xPDOQuery
  144. - [#5306] Add xPDOQuery->distinct() method
  145. - Change xPDO::getService() method to indicate it returns a reference
  146. - Avoid unsetting the current package if xPDO->addPackage() fails
  147. - Avoid updates to existing package definitions unless path/prefix changes
  148. - Remove redundant call to $this->setPackageMeta() in xPDO->setPackage()
  149. - Ensure xPDO::$classMap derivative entries are unique
  150. - [#5197] Provide map of derivative classes for introspection
  151. - [#5147] Fix xPDOIterator ignoring criteria that is not already an object
  152. xPDO 2.1.5-pl (July 5, 2011)
  153. ====================================
  154. - [#5084] Fix various xPDO::exec() calls to check for false value properly
  155. - [#4877] Fix nested conjunctions infecting parent conjunctions
  156. - [#5042] Prevent additional columns defined in derivative classes being marked lazy
  157. xPDO 2.1.4-pl (May 23, 2011)
  158. ====================================
  159. - Default cacheFlag to true in getObject/getCollection/getIterator methods
  160. - [#4787] Add ability to determine the table class of derivatives
  161. - [#4772] Do not flush related objects from cache on read operations
  162. - [#4682] Fix support for driver-specific attributes on object element in schema
  163. xPDO 2.1.3-pl (May 3, 2011)
  164. ====================================
  165. - [#4577] Remove calls to xPDO->log() in xPDOCacheManager->writeFile()
  166. - Add options to xPDOCacheManager::writeFile() to allow multiple attempts when exclusive locks fail
  167. xPDO 2.1.2-pl (March 25, 2011)
  168. ====================================
  169. - Add xPDO->getValue() convenience method for retrieving single column from single row
  170. - [#4128] Fix Windows drive issue in xPDOTransport->pack()
  171. - [#4125] Fix bug getting composites in xPDOObject->getFKClass()
  172. - [#4097] Make constraint names unique for sqlsrv
  173. - [#4047] Fix bug adding single file to zip in xPDOZip
  174. - [#3971] Add xPDOManager API for manipulating table structures
  175. xPDO 2.1.1-pl2 (February 21, 2011)
  176. ====================================
  177. - Fix error in xPDOObject->getOption() when handling option overrides
  178. xPDO 2.1.1-pl (February 20, 2011)
  179. ====================================
  180. - [#2909] Make auto-table creation optional
  181. - Add options and default parameters to xPDOObject->getOption()
  182. - [#3174] Use xPDOQuery alias to build join criteria for getMany()
  183. - [#3342] Fix use of deprecated split() function in xPDORevisionControl
  184. - Fix modCacheManager->writeFile() not to truncate files if a mode is specified
  185. xPDO 2.1.0-pl2 (February 16, 2011)
  186. ====================================
  187. - Avoid PHP warning from fopen in xPDOFileCache->get()
  188. xPDO 2.1.0-pl (February 16, 2011)
  189. ====================================
  190. - Add proper cache file locking and format handling
  191. - Add OPT_CACHE_FORMAT constant to xPDO
  192. - Add support for CACHE_SERIALIZE format in xPDOFileCache implementation
  193. - Force flush() for multiple_object_delete option in xPDOMemCache->delete()
  194. - Implement multiple_object_delete support in xPDOAPCCache->delete()
  195. - Return boolean from xPDOFileCache->delete() and ->flush()
  196. - Fix xPDOFileCache->delete() and invalid calls to cacheManager->deleteTree()
  197. - Use APCIterator to support per instance flush()'ing in xPDOAPCCache
  198. - Prefix all cache keys with provider key
  199. - Fix db cache methods to be called with proper options
  200. - Add xPDOCacheManager->refresh() to empty all active cache providers
  201. - Fix limit with sortby functionality for sqlsrv
  202. - Fix xPDO->literal() and add missing xPDO->$_quoteChar
  203. - Fix date/time issues (sqlsrv)
  204. xPDO 2.0.1-pl (December 27, 2010)
  205. ====================================
  206. - [#2927] Add ENGINE option to xPDOManager_mysql->createObjectContainer()
  207. - Allow columns with explicit AS, ., or ( to not be escaped
  208. - Override xPDOQuery->parseConditions() for sqlsrv
  209. - Use SET IDENTITY INSERT in xPDOObjectVehicle->install() (sqlsrv)
  210. - Remove LIMIT from UPDATE in xPDOObject->save()
  211. - Fix handling of bigint with timestamp phptype (sqlsrv)
  212. - Set host property from server property in xPDO::parseDSN()
  213. - Remove check for errorCode on xPDO->connect()
  214. - [#2901] Add transient parameter to xPDO->call() for use with non-db classes
  215. xPDO 2.0.0-pl (November 27, 2010)
  216. ====================================
  217. - [#2788] Escape database name in xPDOGenerator_mysql::writeSchema()
  218. - Add xPDOAPCCache implementation of xPDOCacheProvider
  219. - Refactor usages of xPDO::getObjectLoader() to use xPDO::call()
  220. - Add xPDO::call() allowing db-specific static method overrides
  221. - Add xPDOWinCache implementation of xPDOCache provider
  222. - Add workaround to drop a database for sqlsrv
  223. - Add workaround to trim PDO::quote() results for sqlsrv
  224. - Add virtual support for LIMIT..OFFSET to sqlsrv driver
  225. - Set dbname property from database property in xPDO::parseDSN()
  226. - Introduce pdo_sqlsrv driver support
  227. xPDO 2.0.0-rc3 (October 25, 2010)
  228. ====================================
  229. - Add xPDO::getIterator() allowing more efficient traversing of result sets
  230. - Add script to upgrade older xPDO mysql models to SCHEMA_VERSION 1.1
  231. - Add missing attributes in xPDOSimpleObject map index element
  232. - Do not generate primary key index for xPDOSimpleObject derivatives
  233. - Introduce xPDO::SCHEMA_VERSION and set it to 1.1 to distinguish new format for indexes
  234. xPDO 2.0.0-rc2 (October 20, 2010)
  235. ====================================
  236. - Use new index metadata in maps to generate indexes for mysql
  237. - Fix mkdir issue in xPDOGenerator::parseSchema()
  238. - Improve schema representation of mysql indexes in xPDOGenerator_mysql::writeSchema()
  239. - [#2579] Fix xPDOFileVehicle not calling resolve on uninstall()
  240. - [#2414] Fix phpdoc inaccuracy and redundant assignment
  241. - Fix caching error in xPDOObject::loadCollectionGraph()
  242. - Make xPDOQuery::prepare() always call construct()
  243. - [#2401] Clarify xPDO::removeCollection() return value
  244. - [#2419] Add defined join criteria when custom criteria is provided to xPDOObject::getMany()
  245. - [#2416] Add :NOT IN operator support for array value bindings
  246. - [#2404] Allow xPDOTransport::install to be aborted when an xPDOVehicle fails to install
  247. - [#XPDO-64] Fix xPDO::logTarget not to lose options after first call to xPDO::_log()
  248. - Fix xPDOObject::_loadInstance() to work with xPDOQuery::hydrateGraphNode() properly
  249. - Fix bug in xPDOObject::load() when caching by primary key
  250. - Fix bug with xPDOManager_sqlite::removeSourceContainer()
  251. - [#XPDO-62] Make getObjectGraph() respect class_key
  252. - Add IF EXISTS to DROP DATABASE statement in xPDOManager_mysql::removeSourceContainer()
  253. - Add xPDO::getIndexMeta() method
  254. - Fix invalid call to xPDOManager::getPhpType() in xPDOGenerator::writeSchema()
  255. - [#XPDO-74] Fix bug in xPDOObject::save() when updating rows with compound primary keys
  256. - [#XPDO-72] Fix invalid call to xPDOManager::getPhpType() in xPDOGenerator::parseSchema()
  257. - Fix accessibility of xPDOTransport::_unpack()
  258. - Divert excess log output from xPDOVehicle classes to LOG_LEVEL_DEBUG
  259. - Remove extra slash in path when generating class files
  260. - Simplify includes of parent classes
  261. - Add xPDODriver to better abstract driver-specific attributes and behavior
  262. - Fix several references to xPDO::$_escapeChar in xPDOQuery
  263. - Split xPDO::$_escapeChar into $_escapeCharOpen and $_escapeCharClose
  264. - Simplify path for require_once in platform class templates
  265. - Trim property keys and values in xPDO::parseDSN()
  266. - [#XPDO-66] Add xPDOTransport::ARCHIVE_WITH to allow explicit use of PclZip even if ZipArchive exists
  267. - Add xPDO::literal() method for SQL literal strings
  268. - Introduce pdo_sqlite driver support
  269. - Fix exception logging in xPDOManager_mysql
  270. - Fix xPDO::parseDSN() for sqlite DSN format
  271. - Remove xpdo.connect.inc.php (no longer used)
  272. - Migrate to git
  273. - [#XPDO-46] Implement support for IN operator using array as binding
  274. - [#XPDO-51] Fix incorrect criteria variable when caching individual rows from collections by primary key
  275. - [#XPDO-53] Fix bug preventing save of related objects when a key owner is foreign and not new
  276. - Refactor xPDO::getManager() and xPDOManager::getGenerator() to work with other db engines besides mysql
  277. - Replace direct references to xPDO::$_escapeChar with new xPDO::escape()
  278. - Move xPDOGenerator::getPHPType() to xPDOManager
  279. - Fix non-static call to xPDO::parseDSN() in xPDO::__construct()
  280. - Make sure db-specific connect_file exists before trying to include it
  281. - Remove unnecessary overridden _initFields() in xPDOObject derivatives
  282. - [#XPDO-54] Fix xPDOQuery to properly recognize MySQL Fulltext search expression as a conditional clause
  283. - [#XPDO-52] Fix fatal error when xPDOManager::createObjectContainer() cannot prepare a PDOStatement
  284. - xPDO::log() and xPDO::$logTarget will now accept an ARRAY target with an option that is a reference to the var
  285. - xPDO::connect() should return false on Exception
  286. - Ensure driverOptions is set as an empty array if the value passed is not an array
  287. - Log PDOException messages in xPDO::connect()
  288. - [#XPDO-49] Fix inconsistent static and non-static calls to fromJSON() and toJSON() methods on xPDO
  289. - Added xPDO::getService to load service classes
  290. - Commented out deprecated code in xPDOVehicle dealing with PHP validators
  291. - Fixed typo in xPDOVehicle where $r should be $v
  292. - [#XPDO-40] Fixed getCount to work when passing a criteria with a class alias set.
  293. - xPDOTransport: Fix several E_STRICT errors caused by static calls to methods not defined as static.
  294. - xPDOTransportVehicle: Implemented missing _compilePayload(), and fixed errors in _installTransport() and uninstall().
  295. - xPDOValidator: Fix several E_STRICT errors caused by inconsistent method signatures in xPDOValidationRule::isValid() derivatives.
  296. - Fixed bug in xPDOTransportVehicle::put() referring to xPDOFileVehicle.
  297. - xPDOManager_mysql::createSourceContainer() and removeSourceContainer() will use provided connection properties or default to current xPDO instance configuration.
  298. - Removed dependency on mysql extension for xPDOManager_mysql::createSourceContainer() and removeSourceContainer() implementations.
  299. - Refactored xPDOManager to be an abstract class rather than calling static methods in derivatives.
  300. - Added support for xPDOObjectVehicle::uninstall() to operate on related_objects.
  301. - Fixed bug in xPDOObjectVehicle::uninstall() not getting UPDATE_OBJECT value properly.
  302. - Added xPDOTransport::UNINSTALL_OBJECT attribute and support in xPDOObjectVehicle::uninstall() [default value is true].
  303. - Refactored xPDOCacheManager to determine new folder/file permissions via umask().
  304. - Modified xPDOQuery_mysql::select() to trim the comma-delimited fields specified after explode()'ing the string.
  305. - Modified xPDOVehicle::resolve() to return true if xPDOTransport::RESOLVE_FILES is set to false with file resolver types.
  306. - Modified xPDOFileVehicle::install() to check xPDOTransport::INSTALL_FILES is not set to false before checking for the existence of the defined fileSource.
  307. - Fixed xPDOVehicle::resolve() and xPDOFileVehicle::install() to prevent them from attempting to preserve files that do not exist.
  308. - Added xPDOTransport::INSTALL_FILES and xPDOTransport::UNINSTALL_FILES to make xPDOFileVehicle behavior consistent with RESOLVE_FILES and RESOLVE_FILES_REMOVE.
  309. - Updated xPDOVehicle::resolve() to properly detect if resolved when restoring preserved file archives.
  310. - Updated xPDO and xPDOCriteria constructors to use proper PHP5 __construct().
  311. - Added xPDOTransportVehicle class to allow transport packages to be embedded in other transport packages.
  312. - Updated copyright dates.
  313. - [#XPDO-42] Fixed error with xPDOQuery::parseConditions() ignoring NULL bound values.
  314. - Fixed xPDOCriteria::toSQL() to properly handle NULL values.
  315. - Updated/fixed xPDOZip implementation and enabled it as the preferred zip provider for xPDOTransport.
  316. - Made xPDOVehicle an abstract class.
  317. - [#XPDO-4] Allow nesting conditions arbitrarily deep using simple nested array format.
  318. xPDO 2.0.0-rc1 (LastChangedRevision: 389, LastChangedDate: 2009-12-31 11:18:40 -0700 (Thu, 31 Dec 2009))
  319. ====================================
  320. - [#XPDO-27] Allow getCount() to work with Collection Graphs.
  321. - [#XPDO-38] Modified xPDOQuery to determine conjunctions for condition groups based on conjunction specified for first condition in the group.
  322. - Added changelog.txt