* Version 1.4.1 (stable) - API 1.4.1 (stable) - 2007-05-03

- return length as "precision,scale" for NUMERIC and DECIMAL fields in mapNativeDatatype()
- in getTableIndexDefinition() and getTableConstraintDefinition() in the Reverse
  module, also return the field position in the index/constraint
- fixed bug #10895: setLimit() does not work properly when a subquery uses LIMIT

note:
open todo items:
- fix pattern escaping using GLOB instead of LIKE or create an register own implementation of LIKE

* Version 1.4.1 (stable) - API 1.4.1 (stable) - 2007-05-03

- return length as "precision,scale" for NUMERIC and DECIMAL fields in mapNativeDatatype()
- in getTableIndexDefinition() and getTableConstraintDefinition() in the Reverse
  module, also return the field position in the index/constraint
- fixed bug #10895: setLimit() does not work properly when a subquery uses LIMIT

note:
open todo items:
- fix pattern escaping using GLOB instead of LIKE or create an register own implementation of LIKE

* Version 1.4.0 (stable) - API 1.4.0 (stable) - 2007-03-13

- propagate errors in getTableFieldDefinition() in the Reverse module
- fixed bug #9895: Error mapping broken since 5.2.0
- implemented a fallback mechanism within getTableIndexDefinition() and
  getTableConstraintDefinition() in the Reverse module to ignore the 'idxname_format'
  option and use the index name as provided in case of failure before returning
  an error
- added a 'nativetype_map_callback' option to map native data declarations back to
  custom data types (thanks to Andrew Hill).
- fixed bug #9693: execute statement again in case of a SQLITE_SCHEMA error
- fixed bug #10027: PHP4 compatibility in createConstraint() and dropConstraint()
- implemented listViews() in the Manager module
- implemented listTableViews() in the Manager module
- implemented listTableTriggers() in the Manager module
- implemented getTriggerDefinition() in the Reverse module [experimental]
- fixed bug #9828: propagate errors in getConnection()
- phpdoc fixes

note:
open todo items:
- fix pattern escaping using GLOB instead of LIKE or create an register own implementation of LIKE

* Version 1.3.0 (stable) - API 2.3.0 (stable) - 2006-11-03

note:
- this driver only supports SQLite version 2.x databases
- the replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced
- the multi_query test failes because this is not supported by ext/sqlite
- the savepoint test failes because this is not supported by sqlite
- the case sensitive search test fails because this is not supported by SQLite
- the pattern escaping test fails because this is not supported by SQLite
- do not skip id generation in nextId() when creating a sequence on demand
  becazse this prevents lastInsertID() from working
- migrated to package.xml version 2

open todo items:
- fix pattern escaping using GLOB instead of LIKE or create an register own implementation of LIKE

* Version 1.2.1 (stable) - API 1.2.1 (stable) - 2006-08-21

- fixed issue in tableInfo() that originates in getTableFieldDefinition() which
  led to returning incorrect type values (Bug #8291)
- added support for NULL columns in getTableFieldDefinition()
- added full support for alterTable() via emulation
- added support for primary key creation and dropping
- do not list empty contraints and indexes
- use information_schema in listTableFields() instead of selecting from the
  table since that does not work if the table is empty
- fixed handling of contraints in _getTableColumns()
- fixed primary key handling in alterTable(), createConstraint() and dropConstraint()
- do not set a default if type is a LOB (Request #8074)
- fixed handling return values when disable_query is set in _doQuery() and _execute()
- increased MDB2 dependency too 2.2.1

note:
- this driver only supports SQLite version 2.x databases
- the replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced
- the multi_query test failes because this is not supported by ext/sqlite
- the savepoint test failes because this is not supported by sqlite
- the case sensitive search test fails because this is not supported by SQLite
- the pattern escaping test fails because this is not supported by SQLite

open todo items:
- fix pattern escaping using GLOB instead of LIKE or create an register own implementation of LIKE

* Version 1.2.0 (stable) - API 1.2.0 (stable) - 2006-07-23

- added setTransactionIsolation()
- MDB2_PORTABILITY_RTRIM ignored by driver (Bug #8239)
- added ability to escape wildcard characters in escape() and quote()
- added setTransactionIsolation()
- added debug() call at the end of a query/prepare/execute calling (Request #7933)
- added context array parameter to debug() and make use of it whereever sensible
- added optional method name parameter to raiseError() and use whereever possible
- added ability to escape wildcard characters in escape() and quote()
- added debug() call at the end of a query/prepare/execute calling (Request #7933)
- added 'nativetype' output to tableInfo() and getTableFieldDefinition()
- added 'mdb2type' output to getTableFieldDefinition()
- reworked tableInfo() to use a common implementation based on getTableFieldDefinition()
  when a table name is passed (Bug #8124)
- fixed incorrect regex in mapNativeDatatype() (Bug #8256) (thx ioz at ionosfera dot com)
- use old dsn when rolling back open transactions in disconnect()

note: this driver only supports SQLite version 2.x databases

open todo items:
- fix pattern escaping using GLOB instead of LIKE or create an register own implementation of LIKE
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table tests fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 1.1.0 (stable) - API 1.1.0 (stable) - 2006-06-15

- fixed unsigned handling in mapNativeDatatype()
- use setCharset() in connect()/_doConnect()
- generalized quoteIdentifier() with a property
- fixed warning in replace() if type is not set (Bug #7740)
- cosmetic performance tweak in getTableFieldDefinition()
- switched most array_key_exists() calls to !empty() to improve readability and performance
- fixed a few edge cases and potential warnings
- added ability to rewrite queries for query(), exec() and prepare() using a debug handler callback
- revert change that would prefer 'clob' over 'text' for TEXT fields
  (this was breaking runtime instrospection)

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table tests fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 1.0.2 (stable) - API 1.0.2 (stable) - 2006-05-14

- explicitly set is_manip parameter to false for transaction debug calls
- added ability to hint that a constraint is a primary key in dropConstraint()
- typo fixes in phpdoc (thx Stoyan)
- added support for fixed and variable types for 'text' in declarations,
  as well as in reverse engineering (Request #1523)
- made _doQuery() return a reference
- added userinfo's to all raiseError calls that previously had none
- added 'prepared_statements' supported meta data setting

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table tests fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 1.0.1 (stable) - API 1.0.1 (stable) - 2006-04-16

- aligned _modifyQuery() signature and phpdoc
- fix bug sqlite:///:memory: trys to open file (bug #6599)
- added 'result_introspection' supported metadata support
- properly quote table names in tableInfo() (related to bug #6573)
- use connected_server_info in getServerVersion() as a cache cache
- use parent::disconnect() in disconnect()
- added server_version option
- set error code in all raiseError() calls
- added support for length in integer reverse engineering
- some fixes regarding boolean reverse engineering
- protect against sql injection in the reverse and manager module

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table tests fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 1.0.0 (stable) - API 1.0.0 (stable) - 2006-02-09

- use PRAGMA short_column_names = 1/0 for MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES handling
- handle null as resource when disable_query option is enabled in result object

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table tests fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 0.2.4 (beta) - API 0.2.4 (beta) - 2006-02-05

- datatype 'clob' missing in mapNativeDatatype() (bug #6490)
- removed bogus result->free() (bug #6491)
- added support for length in integer and decimal columns
- improved regexp for column reverse engineering
- removed ugly hack for quote parameter in quote() since it was insufficient
  (escaping also needs to be prevented)
- Now integer fields are created and mapped as INTEGER instead of INT, this
  kick started the auto increment feature properly
- improved parsing in getServerInfo() (bug #6550)
- fix case when reading from sqlite information schema (bug #6491)

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table tests fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 0.2.3 (beta) - API 0.2.3 (beta) - 2006-01-13

- explicitly pass if the module is phptype specific in all loadModule calls (bug #6226)
- fixed handling of autoincrement and unsigned in Reverse and Datatype module
- tweaked handling of the native error message
- typo fixes in error handling of nextResult() and numRows() calls
- _fixIndexName() now just attempts to remove possible formatting
- renamed _isSequenceName() to _fixSequenceName()
- _fixSequenceName() now just attempts to remove possible formatting, and only
  returns a boolean if no formatting was applied when the new "check" parameter is set to true
- use MDB2_ERROR_ALREADY_EXISTS if the database to create already exists (bug #6481)

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table test fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 0.2.2 (beta) - API 0.2.2 (beta) - 2005-12-30

- fixed handling of autoincrement in the datatype module

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table test fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 0.2.1 (beta) - API 0.2.1 (beta) - 2005-12-28

- fixed now() and substring()
- disabled "add" and "rename" in alterTable() sqlite 2.x as they are not supported
- fixed bug in regexp inside _getTableColumns()
- added mapping for boolean into mapNativeDatatype()
- proper quote new table name in alterTable()

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table test fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced

* Version 0.2.0 (beta) - API 0.2.0 (beta) - 2005-12-21

- do not fix case in listUsers()
- unified case fixing in the list*() methods
- support sorting order in createIndex()
- tweaked lob and text handling in mapNativeDatatype()
- fixed getTableFieldDefinition()
- use getConnection() to access connection property
- split index and constraint handling
- quote identifiers where possible inside the manager methods depending on
  the new 'quote_identifier' option (defaults to off)
- refactored get*Declaration() methods to use getTypeDeclaration()
- setting in_transaction to false on disconnect
- added new Function modules to handle difference in SQL functions
- force rollback() with open transactions on disconnect
- added alterTable() (only does table name change and column adding)
- escape floats to make sure they do not contain evil characters (bug #5608)
- split off manipulation queries into exec() method from the query() method *BC BREAK*
- only if result_types is set to false in prepare() method the query will be
  handled as a DML statement *BC BREAK*
- use a proper default value if a field is set to not null in _getDeclaration*() (bug #5930)
- added ability to determine unsigned in mapNativeDatatype()
  (only really implemented in the mysql(i) drivers) (bug #6054)
- use lastInsertID() method in nextID()
- added getServerVersion()
- unified array structure in mapNativeDatatype() *BC BREAK*
- added 'mdbtype' to tableInfo() output that is generated from mapNativeDatatype()
- changed 'len' to 'length' in tableInfo() output *BC BREAK*

open todo items:
- a number of the manager test cases fail because sqlite does not support adding
  primary keys to existing tables
- the alter table test fails because this is unsupported in sqlite2
- the test replace test fails because sqlite reports an incorrect affected rows
  value when no existing data was replaced
- the testnow and testsubstring tests fail

* Version 0.1.1 (beta) - API 0.1.1 (beta) - 2005-06-10

- increased php dependency to 4.3.0 due to the usage of the streams API since beta5

* Version 0.1.0 (beta) - API 0.1.0 (beta) - 2005-04-29

first unbundled release from MDB2 core

- cosmetic fixes to _getDatabaseFile()
- dont just check for isset() for boolean values in order to support
  setting them false as well (bug #4373)
- ensure SQL injection protection in all _quote() methods (was missing in
  some decimal, float, time, date and timestamp implementations)
- check if database_name is empty to determine if to connect in connect()
- Warning: there are some serious issues on php5 HEAD on windows

