Bind params also work now, and raiseErrorFn with csv driver. Added csv driver to QA process.
<p>Better error checking in oci8 UpdateBlob() and UpdateBlobFile().
<p>Added TIME type to MySQL - patch by Manfred h9125297#zechine.wu-wien.ac.at
<p>Prepare/Execute implemented for Interbase/Firebird
<p>Changed some regular expressions to be anchored by /^ $/ for speed.
<p>Added UnixTimeStamp() and UnixDate() to ADOConnection(). Now these functions
are in both ADOConnection and ADORecordSet classes.
<p>Empty recordsets were not cached - fixed.
<p>Thanks to Gaetano Giunta (g.giunta#libero.it) for the oci8 code review. We
didn't agree on everything, but i hoped we agreed to disagree!
<p><b>1.90 6 April 2002</b></p>
<p>Now all database drivers support fetch modes ADODB_FETCH_NUM and ADODB_FETCH_ASSOC, though
still not fully tested. Eg. Frontbase, Sybase, Informix.
<p>NextRecordSet() support for mssql. Contributed by "Sven Axelsson" sven.axelsson#bokochwebb.se
<p>Added blob support for SQL Anywhere. Contributed by Wade Johnson wade#wadejohnson.de
<p>Fixed some security loopholes in server.php. Server.php also supports fetch mode.
<p>Generalized GenID() to support odbc and mssql drivers. Mssql no longer generates GUID's.
<p>Experimental RowLock($table,$where) for mssql.
<p>Properly implemented Prepare() in oci8 and ODBC.
<p>Added Bind() support to oci8 to support Prepare().
<p>Improved error handler. Catches CacheExecute() and GenID() errors now.
<p>Now if you are running php from the command line, debugging messages do not output html formating.
Not 100% complete, but getting there.
<p><b>1.81 22 March 2002</b></p>
<p>Restored default $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT for backward compatibility.
<p>SelectLimit for oci8 improved - Our FIRST_ROWS optimization now does not overwrite existing hint.
<p>New Sybase SQL Anywhere driver. Contributed by Wade Johnson wade#wadejohnson.de
<p><b>1.80 15 March 2002</b></p>
<p>Redesigned directory structure of ADOdb files. Added new driver directory where
all database drivers reside.
<p>Changed caching algorithm to create subdirectories. Now we scale better.
<p>Informix driver now supports insert_id(). Contribution by "Andrea Pinnisi" pinnisi#sysnet.it
<p>Added experimental ISO date and FetchField support for informix.
<p>Fixed a quoting bug in Execute() with bind parameters, causing problems with blobs.
<p>Mssql driver speedup by 10-15%.
<p>Now in CacheExecute($secs2cache,$sql,...), $secs2cache is optional. If missing, it will
take the value defined in $connection->cacheSecs (default is 3600 seconds). Note that
CacheSelectLimit(), the secs2cache is still compulsory - sigh.
<p>Sybase SQL Anywhere driver (using ODBC) contributed by Wade Johnson wade#wadejohnson.de
<p><b>1.72 8 March 2002</b></p>
<p>Added @ when returning Fields() to prevent spurious error - "Michael William Miller" mille562#pilot.msu.edu
<p>MetaDatabases() for postgres contributed by Phil pamelant#nerim.net
<p>Mitchell T. Young (mitch#youngfamily.org) contributed informix driver.
<p>Fixed rs2html() problem. I cannot reproduce, so probably a problem with pre PHP 4.1.0 versions,
when supporting new ADODB_FETCH_MODEs.
<p>Mattia Rossi (mattia#technologist.com) contributed BlobDecode() and UpdateBlobFile() for postgresql
using the postgres specific pg_lo_import()/pg_lo_open() - i don't use them but hopefully others will
find this useful. See <ahref="http://phplens.com/lens/lensforum/msgs.php?id=1262">this posting</a>
for an example of usage.
<p>Added UpdateBlobFile() for uploading files to a database.
<p>Made UpdateBlob() compatible with oci8po driver.
<p>Added noNullStrings support to oci8 driver. Oracle changes all ' ' strings to nulls,
so you need to set strings to ' ' to prevent the nullifying of strings. $conn->noNullStrings = true;
will do this for you automatically. This is useful when you define a char column as NOT NULL.
<p>Fixed UnixTimeStamp() bug - wasn't setting minutes and seconds properly. Patch from Agusti Fita i Borrell agusti#anglatecnic.com.
<p>Toni Tunkkari added patch for sybase dates. Problem with spaces in day part of date fixed.
<p><b>1.71 18 Jan 2002</b></p>
<p>Sequence start id support. Now $conn->Gen_ID('seqname', 50) to start sequence from 50.
<p>CSV driver fix for selectlimit, from Andreas - akaiser#vocote.de.
<P>Gam3r spotted that a global variable was undefined in the session handler.
<p>Mssql date regex had error. Fixed - reported by Minh Hoang vb_user#yahoo.com.
<p>DBTimeStamp() and DBDate() now accept iso dates and unix timestamps. This means
that the PostgreSQL handling of dates in GetInsertSQL() and GetUpdateSQL() can
be removed. Also if these functions are passed '' or null or false, we return a SQL null.
<p>GetInsertSQL() and GetUpdateSQL() now accept a new parameter, $magicq to
indicate whether quotes should be inserted based on magic quote settings - suggested by
dj#4ict.com.
<p>Reformated docs slightly based on suggestions by Chris Small.
<p><b>1.65 28 Dec 2001</b></p>
<p>Fixed borland_ibase class naming bug.
<p>Now instead of using $rs->fields[0] internally, we use reset($rs->fields) so
that we are compatible with ADODB_FETCH_ASSOC mode. Reported by Nico S.
<p>Changed recordset constructor and _initrs() for oci8 so that it returns the field definitions even
if no rows in the recordset. Reported by Rick Hickerson (rhickers#mv.mv.com).
<p>Improved support for postgresql in GetInsertSQL and GetUpdateSQL by
"mike" mike#partner2partner.com and "Ryan Bailey" rebel#windriders.com
<p><b>1.64 20 Dec 2001</b></p>
<p>Danny Milosavljevic <danny.milo#gmx.net> added some patches for MySQL error handling
and displaying default values.
<p>Fixed some ADODB_FETCH_BOTH inconsistencies in odbc and interbase.
<p>Added more tests to test suite to cover ADODB_FETCH_* and ADODB_ERROR_HANDLER.
<p>Added firebird (ibase) driver
<p>Added borland_ibase driver for interbase 6.5
<p><b>1.63 13 Dec 2001</b></p>
Absolute to the adodb-lib.inc.php file not set properly. Fixed.<p>
<p><b>1.62 11 Dec 2001</b></p>
<p>Major speedup of ADOdb for low-end web sites by reducing the php code loading and compiling
cycle. We conditionally compile not so common functions.
Moved csv code to adodb-csvlib.inc.php to reduce adodb.inc.php parsing. This file
is loaded only when the csv/proxy driver is used, or CacheExecute() is run.
Also moved PageExecute(), GetSelectSQL() and GetUpdateSQL() core code to adodb-lib.inc.php.
This reduced the 70K main adodb.inc.php file to 55K, and since at least 20K of the file
is comments, we have reduced 50K of code in adodb.inc.php to 35K. There
should be 35% reduction in memory and thus 35% speedup in compiling the php code for the
main adodb.inc.php file.
<p>Highly tuned SelectLimit() for oci8 for massive speed improvements on large files.
Selecting 20 rows starting from the 20,000th row of a table is now 7 times faster.
Thx to Tomas V V Cox.
<p>Allow . and # in table definitions in GetInsertSQL and GetUpdateSQL.
See ADODB_TABLE_REGEX constant. Thx to Ari Kuorikoski.
<p>Added ADODB_PREFETCH_ROWS constant, defaulting to 10. This determines the number
of records to prefetch in a SELECT statement. Only used by oci8.</p>
<p>Added high portability Oracle class called oci8po. This uses ? for bind variables, and
lower cases column names.</p>
<p>Now all database drivers support $ADODB_FETCH_MODE, including interbase, ado, and odbc:
ADODB_FETCH_NUM and ADODB_FETCH_ASSOC. ADODB_FETCH_BOTH is not fully implemented for all
database drivers.
<p><b>1.61 Nov 2001</b></p>
<p>Added PO_RecordCount() and PO_Insert_ID(). PO stands for portable. Pablo Roca
[pabloroca#mvps.org]</p>
<p>GenID now returns 0 if not available. Safer is that you should check $conn->hasGenID
for availability.</p>
<p>M'soft ADO we now correctly close recordset in _close() peterd#telephonetics.co.uk</p>
<p>MSSQL now supports GenID(). It generates a 16-byte GUID from mssql newid()
function.</p>
<p>Changed ereg_replace to preg_replace in SelectLimit. This is a fix for mssql.
Ereg doesn't support t or n! Reported by marino Carlos xaplo#postnuke-espanol.org</p>
<p>Added $recordset->connection. This is the ADOConnection object for the recordset.
Works with cached and normal recordsets. Surprisingly, this had no affect on performance!</p>
<p><b>1.54 15 Nov 2001</b></p>
Fixed some more bugs in PageExecute(). I am getting sick of bug in this and will have to
reconsider my QA here. The main issue is that I don't use PageExecute() and
to check whether it is working requires a visual inspection of the html generated currently.
It is possible to write a test script but it would be quite complicated :(
<p> More speedups of SelectLimit() for DB2, Oci8, access, vfp, mssql.
<p>
<p><b>1.53 7 Nov 2001</b></p>
Added support for ADODB_FETCH_ASSOC for ado and odbc drivers.<p>
Tuned GetRowAssoc(false) in postgresql and mysql.<p>
Stephen Van Dyke contributed ADOdb icon, accepted with some minor mods.<p>
Enabled Affected_Rows() for postgresql<p>
Speedup for Concat() using implode() - Benjamin Curtis ben_curtis#yahoo.com<p>
Fixed some more bugs in PageExecute() to prevent infinite loops<p>
<p><b>1.52 5 Nov 2001</b></p>
Spelling error in CacheExecute() caused it to fail. $ql should be $sql in line 625!<p>
Added fixes for parsing [ and ] in GetUpdateSQL().
<p><b>1.51 5 Nov 2001</b></p>
<p>Oci8 SelectLimit() speedup by using OCIFetch().
<p>Oci8 was mistakenly reporting errors when $db->debug = true.
<p>If a connection failed with ODBC, it was not correctly reported - fixed.
<p>_connectionID was inited to -1, changed to false.
<p>Added $rs->FetchRow(), to simplify API, ala PEAR DB
<p>Added PEAR DB compat mode, which is still faster than PEAR! See adodb-pear.inc.php.
<p>Removed postgres pconnect debugging statement.
<p><b>1.50 31 Oct 2001</b></p>
<p>ADOdbConnection renamed to ADOConnection, and ADOdbFieldObject to ADOFieldObject.
<p>PageExecute() now checks for empty $rs correctly, and the errors in the docs on this subject have been fixed.
<p>odbc_error() does not return 6 digit error correctly at times. Implemented workaround.
<p>Added ADORecordSet_empty class. This will speedup INSERTS/DELETES/UPDATES because the return
object created is much smaller.
<p>Added Prepare() to odbc, and oci8 (but doesn't work properly for oci8 still).
<p>Made pgsql a synonym for postgre7, and changed SELECT LIMIT to use OFFSET for compat with
postgres 7.2.
<p>Revised adodb-cryptsession.php thanks to Ari.
<p>Set resources to false on _close, to force freeing of resources.
<p>Added adodb-errorhandler.inc.php, adodb-errorpear.inc.php and raiseErrorFn on Freek's urging.
<p>GetRowAssoc($toUpper=true): $toUpper added as default.
<p>Errors when connecting to a database were not captured formerly. Now we do it correctly.
<p><b>1.40 19 September 2001</b></p>
<p>PageExecute() to implement page scrolling added. Code and idea by Iván Oliva.</p>
<p>Some minor postgresql fixes.</p>
<p>Added sequence support using GenID() for postgresql, oci8, mysql, interbase.</p>
<p>Added UpdateBlob support for interbase (untested).</p>
<p>Added encrypted sessions (see adodb-cryptsession.php). By Ari Kuorikoski <kuoriari#finebyte.com></p>
<p><b>1.31 21 August 2001</b></p>
<p>Many bug fixes thanks to "GaM3R (Cameron)" <gamr#outworld.cx>. Some session changes due to Gam3r.
<p>Fixed qstr() to quote also.
<p>rs2html() now pretty printed.
<p>Jonathan Younger jyounger#unilab.com contributed the great idea GetUpdateSQL() and GetInsertSQL() which
generates SQL to update and insert into a table from a recordset. Modify the recordset fields
array, then can this function to generate the SQL (the SQL is not executed).
<p>"Nicola Fankhauser" <nicola.fankhauser#couniq.com> found some bugs in date handling for mssql.</p>
<p>Added minimal Oracle support for LOBs. Still under development.</p>
Added $ADODB_FETCH_MODE so you can control whether recordsets return arrays which are
numeric, associative or both. This is a global variable you set. Currently only MySQL, Oci8, Postgres
drivers support this.
<p>PostgreSQL properly closes recordsets now. Reported by several people.
<p>
Added UpdateBlob() for Oracle. A hack to make it easier to save blobs.
<p>
Oracle timestamps did not display properly. Fixed.
<p><b>1.20 6 June 2001</b></p>
<p>Now Oracle can connect using tnsnames.ora or server and service name</p>
<p>Extensive Oci8 speed optimizations.
Oci8 code revised to support variable binding, and /*+ FIRST_ROWS */ hint.</p>
<p>Worked around some 4.0.6 bugs in odbc_fetch_into().</p>
<p>Paolo S. Asioli paolo.asioli#libero.it suggested GetRowAssoc().</p>
<p>Escape quotes for oracle wrongly set to '. Now '' is used.</p>
<p>Variable binding now works in ODBC also.</p>
<p>Jumped to version 1.20 because I don't like 13 :-)</p>
<p><b>1.12 6 June 2001</b></p>
<p>Changed $ADODB_DIR to ADODB_DIR constant to plug a security loophole.</p>
<p>Changed _close() to close persistent connections also. Prevents connection leaks.</p>
<p>Major revision of oracle and oci8 drivers.
Added OCI_RETURN_NULLS and OCI_RETURN_LOBS to OCIFetchInto(). BLOB, CLOB and VARCHAR2 recognition
in MetaType() improved. MetaColumns() returns columns in correct sort order.</p>
<p>Interbase timestamp input format was wrong. Fixed.</p>
<p><b>1.11 20 May 2001</b></p>
<p>Improved file locking for Windows.</p>
<p>Probabilistic flushing of cache to avoid avalanche updates when cache timeouts.</p>
<p>Cached recordset timestamp not saved in some scenarios. Fixed.</p>
<p><b>1.10 19 May 2001</b></p>
<p>Added caching. CacheExecute() and CacheSelectLimit().
<p>Added csv driver. See <ahref="http://php.weblogs.com/adodb_csv">http://php.weblogs.com/ADODB_csv</a>.
<p>Fixed SelectLimit(), SELECT TOP not working under certain circumstances.
<p>Added better Frontbase support of MetaTypes() by Frank M. Kromann.
<p><b>1.01 24 April 2001</b></p>
<p>Fixed SelectLimit bug. not quoted properly.
<p>SelectLimit: SELECT TOP -1 * FROM TABLE not support by Microsoft. Fixed.</p>
<p>GetMenu improved by glen.davies#cce.ac.nz to support multiple hilited items<p>
<p>FetchNextObject() did not work with only 1 record returned. Fixed bug reported by $tim#orotech.net</p>
<p>Fixed mysql field max_length problem. Fix suggested by Jim Nicholson (jnich#att.com)</p>
<p><b>1.00 16 April 2001</b></p>
<p>Given some brilliant suggestions on how to simplify ADOdb by akul. You no longer need to
setup $ADODB_DIR yourself, and ADOLoadCode() is automatically called by ADONewConnection(),
simplifying the startup code.</p>
<p>FetchNextObject() added. Suggested by Jakub Marecek. This makes FetchObject() obsolete, as
this is more flexible and powerful.</p>
<p>Misc fixes to SelectLimit() to support Access (top must follow distinct) and Fields()
in the array recordset. From Reinhard Balling.</p>
<p><b>0.96 27 Mar 2001</b></p>
<p>ADOConnection Close() did not return a value correctly. Thanks to akul#otamedia.com.</p>
<p>When the horrible magic_quotes is enabled, back-slash () is changed to double-backslash (\).
This doesn't make sense for Microsoft/Sybase databases. We fix this in qstr().</p>
<p>Fixed Sybase date problem in UnixDate() thanks to Toni Tunkkari. Also fixed MSSQL problem
in UnixDate() - thanks to milhouse31#hotmail.com.</p>
<p>MoveNext() moved to leaf classes for speed in MySQL/PostgreSQL. 10-15% speedup.</p>
<p>Added null handling in bindInputArray in Execute() -- Ron Baldwin suggestion.</p>
<p>Fixed some option tags. Thanks to john#jrmstudios.com.</p>
<p><b>0.95 13 Mar 2001</b></p>
<p>Added postgres7 database driver which supports LIMIT and other version 7 stuff in the future.</p>
<p>Added SelectLimit to ADOConnection to simulate PostgreSQL's "select * from table limit 10 offset 3".
Added helper function GetArrayLimit() to ADORecordSet.</p>
<p>Fixed mysql metacolumns bug. Thanks to Freek Dijkstra (phpeverywhere#macfreek.com).</p>
<p>Also many PostgreSQL changes by Freek. He almost rewrote the whole PostgreSQL driver!</p>
<p>Added fix to input parameters in Execute for non-strings by Ron Baldwin.</p>
<p>Added new metatype, X for TeXt. Formerly, metatype B for Blob also included
text fields. Now 'B' is for binary/image data. 'X' for textual data.</p>
<p>Fixed $this->GetArray() in GetRows().</p>
<p>Oracle and OCI8: 1st parameter is always blank -- now warns if it is filled.</p>
<p>Now <i>hasLimit</i> and <i>hasTop</i> added to indicate whether
SELECT * FROM TABLE LIMIT 10 or SELECT TOP 10 * FROM TABLE are supported.</p>
<p><b>0.94 04 Feb 2001</b></p>
<p>Added ADORecordSet::GetRows() for compatibility with Microsoft ADO. Synonym for GetArray().</p>
<p>Added new metatype 'R' to represent autoincrement numbers.</p>
<p>Added ADORecordSet.FetchObject() to return a row as an object.</p>
<p>Finally got a Linux box to test PostgreSql. Many fixes.</p>
<p>Fixed copyright misspellings in 0.93.</p>
<p>Fixed mssql MetaColumns type bug.</p>
<p>Worked around odbc bug in PHP4 for sessions.</p>
<p>Fixed many documentation bugs (affected_rows, metadatabases, qstr).</p>
<p>Fixed MySQL timestamp format (removed comma).</p>
<p>Interbase driver did not call ibase_pconnect(). Fixed.</p>
<p><b>0.93 18 Jan 2002</b></p>
<p>Fixed GetMenu bug.</p>
<p>Simplified Interbase commit and rollback.</p>
<p>Default behaviour on closing a connection is now to rollback all active transactions.</p>
<p>Added field object handling for array recordset for future XML compatibility.</p>
<p>Added arr2html() to convert array to html table.</p>
<p><b>0.92 2 Jan 2002</b></p>
<p>Interbase Commit and Rollback should be working again.</p>
<p>Changed initialisation of ADORecordSet. This is internal and should not affect users. We
are doing this to support cached recordsets in the future.</p>
<p>Implemented ADORecordSet_array class. This allows you to simulate a database recordset
with an array.</p>
<p>Added UnixDate() and UnixTimeStamp() to ADORecordSet.</p>
<p><b>0.91 21 Dec 2000</b></p>
<p>Fixed ODBC so ErrorMsg() is working.</p>
<p>Worked around ADO unrecognised null (0x1) value problem in COM.</p>
<p>Added Sybase support for FetchField() type</p>
<p>Removed debugging code and unneeded html from various files</p>
<p>Changed to javadoc style comments to adodb.inc.php.</p>
<p>Added maxsql as synonym for mysqlt</p>
<p>Now ODBC downloads first 8K of blob by default
<p><b>0.90 15 Nov 2000</b></p>
<p>Lots of testing of Microsoft ADO. Should be more stable now.</p>
<p>Added $ADODB_COUNTREC. Set to false for high speed selects.</p>
<p>Added Sybase support. Contributed by Toni Tunkkari (toni.tunkkari#finebyte.com). Bug in Sybase
API: GetFields is unable to determine date types.</p>
<p>Changed behaviour of RecordSet.GetMenu() to support size parameter (listbox) properly.</p>
<p>Added emptyDate and emptyTimeStamp to RecordSet class that defines how to represent
empty dates.</p>
<p>Added MetaColumns($table) that returns an array of ADOFieldObject's listing
the columns of a table.</p>
<p>Added transaction support for PostgresSQL -- thanks to "Eric G. Werk" egw#netguide.dk.</p>
<p>Added adodb-session.php for session support.</p>
<p><b>0.80 30 Nov 2000</b></p>
<p>Added support for charSet for interbase. Implemented MetaTables for most databases.
PostgreSQL more extensively tested.</p>
<p><b>0.71 22 Nov 2000</b></p>
<p>Switched from using require_once to include/include_once for backward compatability with PHP 4.02 and earlier.</p>
<p><b>0.70 15 Nov 2000</b></p>
<p>Calls by reference have been removed (call_time_pass_reference=Off) to ensure compatibility with future versions of PHP,
except in Oracle 7 driver due to a bug in php_oracle.dll.</p>
<p>PostgreSQL database driver contributed by Alberto Cerezal (acerezalp#dbnet.es).
</p>
<p>Oci8 driver for Oracle 8 contributed by George Fourlanos (fou#infomap.gr).</p>
<p>Added <i>mysqlt</i> database driver to support MySQL 3.23 which has transaction
support. </p>
<p>Oracle default date format (DD-MON-YY) did not match ADOdb default date format (which is YYYY-MM-DD). Use ALTER SESSION to force the default date.</p>
<p>Error message checking is now included in test suite.</p>
<p>MoveNext() did not check EOF properly -- fixed.</p>
<p><b>0.60 Nov 8 2000</b></p>
<p>Fixed some constructor bugs in ODBC and ADO. Added ErrorNo function to ADOConnection
class. </p>
<p><b>0.51 Oct 18 2000</b></p>
<p>Fixed some interbase bugs.</p>
<p><b>0.50 Oct 16 2000</b></p>
<p>Interbase commit/rollback changed to be compatible with PHP 4.03. </p>
<p>CommitTrans( ) will now return true if transactions not supported. </p>
<p>Conversely RollbackTrans( ) will return false if transactions not supported.
</p>
<p><b>0.46 Oct 12</b></p>
Many Oracle compatibility issues fixed.
<p><b>0.40 Sept 26</b></p>
<p>Many bug fixes</p>
<p>Now Code for BeginTrans, CommitTrans and RollbackTrans is working. So is the Affected_Rows
and Insert_ID. Added above functions to test.php.</p>
<p>ADO type handling was busted in 0.30. Fixed.</p>
<p>Generalised Move( ) so it works will all databases, including ODBC.</p>
<p><b>0.30 Sept 18</b></p>
<p>Renamed ADOLoadDB to ADOLoadCode. This is clearer.</p>
<p>Added BeginTrans, CommitTrans and RollbackTrans functions.</p>
<p>Added Affected_Rows() and Insert_ID(), _affectedrows() and _insertID(), ListTables(),
ListDatabases(), ListColumns().</p>
<p>Need to add New_ID() and hasInsertID and hasAffectedRows, autoCommit </p>
<p><b>0.20 Sept 12</b></p>
<p>Added support for Microsoft's ADO.</p>
<p>Added new field to ADORecordSet -- canSeek</p>
<p>Added new parameter to _fetch($ignore_fields = false). Setting to true will
not update fields array for faster performance.</p>
<p>Added new field to ADORecordSet/ADOConnection -- dataProvider to indicate whether
a class is derived from odbc or ado.</p>
<p>Changed class ODBCFieldObject to ADOFieldObject -- not documented currently.</p>
<p>Added benchmark.php and testdatabases.inc.php to the test suite.</p>
<p>Added to ADORecordSet FastForward( ) for future high speed scrolling. Not documented.</p>