summaryrefslogtreecommitdiff
path: root/framework/3rdParty/adodb/docs/old-changelog.htm
blob: bf8a1af26728676d4c8a4c5829a76cd073a7070b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
<html><title>Old Changelog: ADOdb</title><body>
<h3>Old Changelog</h3>

</p><p><b>3.92 22 Sept 2003</b> 
</p><p>Added GetAssoc and CacheGetAssoc to connection object.
</p><p>Removed TextMax and CharMax functions from adodb.inc.php. 
</p><p>HasFailedTrans() returned false when trans failed. Fixed. 
</p><p>Moved perf driver classes into adodb/perf/*.php. 
</p><p>Misc improvements to performance monitoring, including UI(). 
</p><p>RETVAL in mssql Parameter(), we do not append @ now. 
</p><p>Added Param($name) to connection class, returns '?' or ":$name", for defining 
  bind parameters portably. 
</p><p>LogSQL traps affected_rows() and saves its value properly now. Also fixed oci8 
  _stmt and _affectedrows() bugs. 
</p><p>Session code timestamp check for oci8 works now. Formerly default NLS_DATE_FORMAT 
  stripped off time portion. Thx to Tony Blair (tonanbarbarian#hotmail.com). Also 
  added new $conn-&gt;datetime field to oci8, controls whether MetaType() returns 
  'D' ($this-&gt;datetime==false) or 'T' ($this-&gt;datetime == true) for DATE type. 
</p><p>Fixed bugs in adodb-cryptsession.inc.php and adodb-session-clob.inc.php. 
</p><p>Fixed misc bugs in adodb_key_exists, GetInsertSQL() and GetUpdateSQL(). 
</p><p>Tuned include_once handling to reduce file-system checking overhead. 
</p><p><b>3.91 9 Sept 2003</b> 
</p><p>Only released to InterAkt 
</p><p>Added LogSQL() for sql logging and $ADODB_NEWCONNECTION to override factory 
  for driver instantiation. 
</p><p>Added IfNull($field,$ifNull) function, thx to johnwilk#juno.com 
</p><p>Added portable substr support. 
</p><p>Now rs2html() has new parameter, $echo. Set to false to return $html instead 
  of echoing it. 
</p><p><b>3.90 5 Sept 2003</b> 
</p><p>First beta of performance monitoring released. 
</p><p>MySQL supports MetaTable() masking. 
</p><p>Fixed key_exists() bug in adodb-lib.inc.php 
</p><p>Added sp_executesql Prepare() support to mssql. 
</p><p>Added bind support to db2. 
</p><p>Added swedish language file - Christian Tiberg" christian#commsoft.nu 
</p><p>Bug in drop index for mssql data dict fixed. Thx to Gert-Rainer Bitterlich. 
</p><p>Left join setting for oci8 was wrong. Thx to johnwilk#juno.com 
</p><p><b>3.80 27 Aug 2003</b> 
</p><p>Patch for PHP 4.3.3 cached recordset csv2rs() fread loop incompatibility. 
</p><p>Added matching mask for MetaTables. Only for oci8, mssql and postgres currently. 
</p><p>Rewrite of "oracle" driver connection code, merging with "oci8", by Gaetano. 
</p><p>Added better debugging for Smart Transactions. 
</p><p>Postgres DBTimeStamp() was wrongly using TO_DATE. Changed to TO_TIMESTAMP. 
</p><p>ADODB_FETCH_CASE check pushed to ADONewConnection to allow people to define 
  it after including adodb.inc.php. 
</p><p>Added portugese (brazilian) to languages. Thx to "Levi Fukumori". 
</p><p>Removed arg3 parameter from Execute/SelectLimit/Cache* functions. 
</p><p>Execute() now accepts 2-d array as $inputarray. Also changed docs of fnExecute() 
  to note change in sql query counting with 2-d arrays. 
</p><p>Added MONEY to MetaType in PostgreSQL. 
</p><p>Added more debugging output to CacheFlush(). 
</p><p><b>3.72 9 Aug 2003</b> 
</p><p>Added qmagic($str), which is a qstr($str) that auto-checks for magic quotes 
  and does the right thing... 
</p><p>Fixed CacheFlush() bug - Thx to martin#gmx.de 
</p><p>Walt Boring contributed MetaForeignKeys for postgres7. 
</p><p>_fetch() called _BlobDecode() wrongly in interbase. Fixed. 
</p><p>adodb_time bug fixed with dates after 2038 fixed by Jason Pell. http://phplens.com/lens/lensforum/msgs.php?id=6980 
</p><p><b>3.71 4 Aug 2003</b> 
</p><p>The oci8 driver, MetaPrimaryKeys() did not check the owner correctly when $owner 
  == false. 
</p><p>Russian language file contributed by "Cyrill Malevanov" cyrill#malevanov.spb.ru. 
</p><p>Spanish language file contributed by "Horacio Degiorgi" horaciod#codigophp.com. 
</p><p>Error handling in oci8 bugfix - if there was an error in Execute(), then when 
  calling ErrorNo() and/or ErrorMsg(), the 1st call would return the error, but 
  the 2nd call would return no error. 
</p><p>Error handling in odbc bugfix. ODBC would always return the last error, even 
  if it happened 5 queries ago. Now we reset the errormsg to '' and errorno to 
  0 everytime before CacheExecute() and Execute(). 
</p><p><b>3.70 29 July 2003</b> 
</p><p>Added new SQLite driver. Tested on PHP 4.3 and PHP 5. 
</p><p>Added limited "sapdb" driver support - mainly date support. 
</p><p>The oci8 driver did not identify NUMBER with no defined precision correctly. 
</p><p>Added ADODB_FORCE_NULLS, if set, then PHP nulls are converted to SQL nulls 
  in GetInsertSQL/GetUpdateSQL. 
</p><p>DBDate() and DBTimeStamp() format for postgresql had problems. Fixed. 
</p><p>Added tableoptions to ChangeTableSQL(). Thx to Mike Benoit. 
</p><p>Added charset support to postgresql. Thx to Julian Tarkhanov. 
</p><p>Changed OS check for MS-Windows to prevent confusion with darWIN (MacOS) 
</p><p>Timestamp format for db2 was wrong. Changed to yyyy-mm-dd-hh.mm.ss.nnnnnn. 
</p><p>adodb-cryptsession.php includes wrong. Fixed. 
</p><p>Added MetaForeignKeys(). Supported by mssql, odbc_mssql and oci8. 
</p><p>Fixed some oci8 MetaColumns/MetaPrimaryKeys bugs. Thx to Walt Boring. 
</p><p>adodb_getcount() did not init qryRecs to 0. Missing "WHERE" clause checking 
  in GetUpdateSQL fixed. Thx to Sebastiaan van Stijn. 
</p><p>Added support for only 'VIEWS' and "TABLES" in MetaTables. From Walt Boring. 
</p><p>Upgraded to adodb-xmlschema.inc.php 0.0.2. 
</p><p>NConnect for mysql now returns value. Thx to Dennis Verspuij. 
</p><p>ADODB_FETCH_BOTH support added to interbase/firebird. 
</p><p>Czech language file contributed by Kamil Jakubovic jake#host.sk. 
</p><p>PostgreSQL BlobDecode did not use _connectionID properly. Thx to Juraj Chlebec. 
</p><p>Added some new initialization stuff for Informix. Thx to "Andrea Pinnisi" pinnisi#sysnet.it 
</p><p>ADODB_ASSOC_CASE constant wrong in sybase _fetch(). Fixed. 
</p><p><b>3.60 16 June 2003</b> 
</p><p>We now SET CONCAT_NULL_YIELDS_NULL OFF for odbc_mssql driver to be compat with 
  mssql driver. 
</p><p>The property $emptyDate missing from connection class. Also changed 1903 to 
  constant (TIMESTAMP_FIRST_YEAR=100). Thx to Sebastiaan van Stijn. 
</p><p>ADOdb speedup optimization - we now return all arrays by reference. 
</p><p>Now DBDate() and DBTimeStamp() now accepts the string 'null' as a parameter. 
  Suggested by vincent. 
</p><p>Added GetArray() to connection class. 
</p><p>Added not_null check in informix metacolumns(). 
</p><p>Connection parameters for postgresql did not work correctly when port was defined. 
</p><p>DB2 is now a tested driver, making adodb 100% compatible. Extensive changes 
  to odbc driver for DB2, including implementing serverinfo() and SQLDate(), switching 
  to SQL_CUR_USE_ODBC as the cursor mode, and lastAffectedRows and SelectLimit() 
  fixes. 
</p><p>The odbc driver's FetchField() field names did not obey ADODB_ASSOC_CASE. Fixed. 
</p><p>Some bugs in adodb_backtrace() fixed. 
</p><p>Added "INT IDENTITY" type to adorecordset::MetaType() to support odbc_mssql 
  properly. 
</p><p>MetaColumns() for oci8, mssql, odbc revised to support scale. Also minor revisions 
  to odbc MetaColumns() for vfp and db2 compat. 
</p><p>Added unsigned support to mysql datadict class. Thx to iamsure. 
</p><p>Infinite loop in mssql MoveNext() fixed when ADODB_FETCH_ASSOC used. Thx to 
  Josh R, Night_Wulfe#hotmail.com. 
</p><p>ChangeTableSQL contributed by Florian Buzin. 
</p><p>The odbc_mssql driver now sets CONCAT_NULL_YIELDS_NULL OFF for compat with 
  mssql driver. 
</p>

<p><b>3.50 19 May 2003</b></p>
<p>Fixed mssql compat with FreeTDS. FreeTDS does not implement mssql_fetch_assoc(). 
<p>Merged back connection and recordset code into adodb.inc.php. 
<p>ADOdb sessions using oracle clobs contributed by achim.gosse#ddd.de. See adodb-session-clob.php. 
<p>Added /s modifier to preg_match everywhere, which ensures that regex does not 
  stop at /n. Thx Pao-Hsi Huang. 
<p>Fixed error in metacolumns() for mssql. 
<p>Added time format support for SQLDate. 
<p>Image => B added to metatype. 
<p>MetaType now checks empty($this->blobSize) instead of empty($this). 
<p>Datadict has beta support for informix, sybase (mapped to mssql), db2 and generic 
  (which is a fudge). 
<p>BlobEncode for postgresql uses pg_escape_bytea, if available. Needed for compat 
  with 7.3. 
<p>Added $ADODB_LANG, to support multiple languages in MetaErrorMsg(). 
<p>Datadict can now parse table definition as declarative text. 
<p>For DataDict, oci8 autoincrement trigger missing semi-colon. Fixed. 
<p>For DataDict, when REPLACE flag enabled, drop sequence in datadict for autoincrement 
  field in postgres and oci8.s 
<p>Postgresql defaults to template1 database if no database defined in connect/pconnect. 
<p>We now clear _resultid in postgresql if query fails. 
<p><b>3.40 19 May 2003</b></p>
<p>Added insert_id for odbc_mssql. 
<p>Modified postgresql UpdateBlobFile() because it did not work in safe mode. 
<p>Now connection object is passed to raiseErrorFn as last parameter. Needed by 
  StartTrans(). 
<p>Added StartTrans() and CompleteTrans(). It is recommended that you do not modify 
  transOff, but use the above functions. 
<p>oci8po now obeys ADODB_ASSOC_CASE settings. 
<p>Added virtualized error codes, using PEAR DB equivalents. Requires you to manually 
  include adodb-error.inc.php yourself, with MetaError() and MetaErrorMsg($errno). 
<p>GetRowAssoc for mysql and pgsql were flawed. Fix by Ross Smith. 
<p>Added to datadict types I1, I2, I4 and I8. Changed datadict type 'T' to map 
  to timestamp instead of datetime for postgresql. 
<p>Error handling in ExecuteSQLArray(), adodb-datadict.inc.php did not work. 
<p>We now auto-quote postgresql connection parameters when building connection 
  string. 
<p>Added session expiry notification. 
<p>We now test with odbc mysql - made some changes to odbc recordset constructor. 
<p>MetaColumns now special cases access and other databases for odbc. 
<p><b>3.31 17 March 2003</b></p>
<p>Added row checking for _fetch in postgres. 
<p>Added Interval type to MetaType for postgres. 
<p>Remapped postgres driver to call postgres7 driver internally. 
<p>Adorecordset_array::getarray() did not return array when nRows >= 0. 
<p>Postgresql: at times, no error message returned by pg_result_error() but error 
  message returned in pg_last_error(). Recoded again. 
<p>Interbase blob's now use chunking for updateblob. 
<p>Move() did not set EOF correctly. Reported by Jorma T. 
<p>We properly support mysql timestamp fields when we are creating mysql tables 
  using the data-dict interface. 
<p>Table regex includes backticks character now. 
<p><b>3.30 3 March 2003</b></p>
<p>Added $ADODB_EXTENSION and $ADODB_COMPAT_FETCH constant. 
<p>Made blank1stItem configurable using syntax "value:text" in GetMenu/GetMenu2. 
  Thx to Gabriel Birke. 
<p>Previously ADOdb differed from the Microsoft standard because it did not define 
  what to set $this->fields when EOF was reached. Now at EOF, ADOdb sets $this->fields 
  to false for all databases, which is consist with Microsoft's implementation. 
  Postgresql and mysql have always worked this way (in 3.11 and earlier). If you 
  are experiencing compatibility problems (and you are not using postgresql nor 
  mysql) on upgrading to 3.30, try setting the global variables $ADODB_COUNTRECS 
  = true (which is the default) and $ADODB_FETCH_COMPAT = true (this is a new 
  global variable). 
<p>We now check both pg_result_error and pg_last_error as sometimes pg_result_error 
  does not display anything. Iman Mayes 
<p> We no longer check for magic quotes gpc in Quote(). 
<p> Misc fixes for table creation in adodb-datadict.inc.php. Thx to iamsure. 
<p> Time calculations use adodb_time library for all negative timestamps due to 
  problems in Red Hat 7.3 or later. Formerly, only did this for Windows. 
<p> In mssqlpo, we now check if $sql in _query is a string before we change || 
  to +. This is to support prepared stmts. 
<p> Move() and MoveLast() internals changed to support to support EOF and $this->fields 
  change. 
<p> Added ADODB_FETCH_BOTH support to mssql. Thx to Angel Fradejas afradejas#mediafusion.es 
<p> We now check if link resource exists before we run mysql_escape_string in 
  qstr(). 
<p> Before we flock in csv code, we check that it is not a http url. 
<p><b>3.20 17 Feb 2003</b></p>
<p>Added new Data Dictionary classes for creating tables and indexes. Warning 
  - this is very much alpha quality code. The API can still change. See adodb/tests/test-datadict.php 
  for more info. 
<p>We now ignore $ADODB_COUNTRECS for mysql, because PHP truncates incomplete 
  recordsets when mysql_unbuffered_query() is called a second time. 
<p>Now postgresql works correctly when $ADODB_COUNTRECS = false. 
<p>Changed _adodb_getcount to properly support SELECT DISTINCT. 
<p>Discovered that $ADODB_COUNTRECS=true has some problems with prepared queries 
  - suspect PHP bug. 
<p>Now GetOne and GetRow run in $ADODB_COUNTRECS=false mode for better performance. 
<p>Added support for mysql_real_escape_string() and pg_escape_string() in qstr(). 
<p>Added an intermediate variable for mysql _fetch() and MoveNext() to store fields, 
  to prevent overwriting field array with boolean when mysql_fetch_array() returns 
  false. 
<p>Made arrays for getinsertsql and getupdatesql case-insensitive. Suggested by 
  Tim Uckun" tim#diligence.com 
<p><b>3.11 11 Feb 2003</b></p>
<p>Added check for ADODB_NEVER_PERSIST constant in PConnect(). If defined, then 
  PConnect() will actually call non-persistent Connect(). 
<p>Modified interbase to properly work with Prepare(). 
<p>Added $this->ibase_timefmt to allow you to change the date and time format. 
<p>Added support for $input_array parameter in CacheFlush(). 
<p>Added experimental support for dbx, which was then removed when i found that 
  it was slower than using native calls. 
<p>Added MetaPrimaryKeys for mssql and ibase/firebird. 
<p>Added new $trim parameter to GetCol and CacheGetCol 
<p>Uses updated adodb-time.inc.php 0.06. 
<p><b>3.10 27 Jan 2003</b> 
<p>Added adodb_date(), adodb_getdate(), adodb_mktime() and adodb-time.inc.php. 
<p>For interbase, added code to handle unlimited number of bind parameters. From 
  Daniel Hasan daniel#hasan.cl. 
<p>Added BlobDecode and UpdateBlob for informix. Thx to Fernando Ortiz. 
<p>Added constant ADODB_WINDOWS. If defined, means that running on Windows. 
<p>Added constant ADODB_PHPVER which stores php version as a hex num. Removed 
  $ADODB_PHPVER variable. 
<p>Felho Bacsi reported a minor white-space regular expression problem in GetInsertSQL. 
<p>Modified ADO to use variant to store _affectedRows 
<p>Changed ibase to use base class Replace(). Modified base class Replace() to 
  support ibase. 
<p>Changed odbc to auto-detect when 0 records returned is wrong due to bad odbc 
  drivers. 
<p>Changed mssql to use datetimeconvert ini setting only when 4.30 or later (does 
  not work in 4.23). 
<p>ExecuteCursor($stmt, $cursorname, $params) now accepts a new $params array 
  of additional bind parameters -- William Lovaton walovaton#yahoo.com.mx. 
<p>Added support for sybase_unbuffered_query if ADODB_COUNTRECS == false. Thx 
  to chuck may. 
<p>Fixed FetchNextObj() bug. Thx to Jorma Tuomainen. 
<p>We now use SCOPE_IDENTITY() instead of @@IDENTITY for mssql - thx to marchesini#eside.it 
<p>Changed postgresql movenext logic to prevent illegal row number from being 
  passed to pg_fetch_array(). 
<p>Postgresql initrs bug found by "Bogdan RIPA" bripa#interakt.ro $f1 accidentally 
  named $f 
<p><b>3.00 6 Jan 2003</b> 
<p>Fixed adodb-pear.inc.php syntax error. 
<p>Improved _adodb_getcount() to use SELECT COUNT(*) FROM ($sql) for languages 
  that accept it. 
<p>Fixed _adodb_getcount() caching error. 
<p>Added sql to retrive table and column info for odbc_mssql. 
<p><strong>2.91 3 Jan 2003</strong> 
<p>Revised PHP version checking to use $ADODB_PHPVER with legal values 0x4000, 
  0x4050, 0x4200, 0x4300. 
<p>Added support for bytea fields and oid blobs in postgres by allowing BlobDecode() 
  to detect and convert non-oid fields. Also added BlobEncode to postgres when 
  you want to encode oid blobs. 
<p>Added blobEncodeType property for connections to inform phpLens what encoding 
  method to use for blobs. 
<p>Added BlobDecode() and BlobEncode() to base ADOConnection class. 
<p>Added umask() to _gencachename() when creating directories. 
<p>Added charPage for ado drivers, so you can set the code page. 
<pre>
$conn->charPage = CP_UTF8;
$conn->Connect($dsn);
</pre>
<p>Modified _seek in mysql to check for num rows=0. 
<p>Added to metatypes new informix types for IDS 9.30. Thx Fernando Ortiz. 
<p>_maxrecordcount returned in CachePageExecute $rsreturn 
<p>Fixed sybase cacheselectlimit( ) problems 
<p>MetaColumns() max_length should use precision for types X and C for ms access. 
  Fixed. 
<p>Speedup of odbc non-SELECT sql statements. 
<p>Added support in MetaColumns for Wide Char types for ODBC. We halve max_length 
  if unicode/wide char. 
<p>Added 'B' to types handled by GetUpdateSQL/GetInsertSQL. 
<p>Fixed warning message in oci8 driver with $persist variable when using PConnect. 
<p><b>2.90 11 Dec 2002</b> 
<p>Mssql and mssqlpo and oci8po now support ADODB_ASSOC_CASE. 
<p>Now MetaType() can accept a field object as the first parameter. 
<p>New $arr = $db-&gt;ServerInfo( ) function. Returns $arr['description'] which 
  is the string description, and $arr['version']. 
<p>PostgreSQL and MSSQL speedups for insert/updates. 
<p> Implemented new SetFetchMode() that removes the need to use $ADODB_FETCH_MODE. 
  Each connection has independant fetchMode. 
<p>ADODB_ASSOC_CASE now defaults to 2, use native defaults. This is because we 
  would break backward compat for too many applications otherwise. 
<p>Patched encrypted sessions to use replace() 
<p>The qstr function supports quoting of nulls when escape character is \ 
<p>Rewrote bits and pieces of session code to check for time synch and improve 
  reliability. 
<p>Added property ADOConnection::hasTransactions = true/false; 
<p>Added CreateSequence and DropSequence functions 
<p>Found misplaced MoveNext() in adodb-postgres.inc.php. Fixed. 
<p>Sybase SelectLimit not reliable because 'set rowcount' not cached - fixed. 
<p>Moved ADOConnection to adodb-connection.inc.php and ADORecordSet to adodb-recordset.inc.php. 
  This allows us to use doxygen to generate documentation. Doxygen doesn't like 
  the classes in the main adodb.inc.php file for some mysterious reason. 
<p><b>2.50, 14 Nov 2002</b> 
<p>Added transOff and transCnt properties for disabling (transOff = true) and 
  tracking transaction status (transCnt>0). 
<p>Added inputarray handling into _adodb_pageexecute_all_rows - "Ross Smith" RossSmith#bnw.com. 
<p>Fixed postgresql inconsistencies in date handling. 
<p>Added support for mssql_fetch_assoc. 
<p>Fixed $ADODB_FETCH_MODE bug in odbc MetaTables() and MetaPrimaryKeys(). 
<p>Accidentally declared UnixDate() twice, making adodb incompatible with php 
  4.3.0. Fixed. 
<p>Fixed pager problems with some databases that returned -1 for _currentRow on 
  MoveLast() by switching to MoveNext() in adodb-lib.inc.php. 
<p>Also fixed uninited $discard in adodb-lib.inc.php. 
<p><b>2.43, 25 Oct 2002</b></p>
Added ADODB_ASSOC_CASE constant to better support ibase and odbc field names. 
<p>Added support for NConnect() for oracle OCINLogin. 
<p>Fixed NumCols() bug. 
<p>Changed session handler to use Replace() on write. 
<p>Fixed oci8 SelectLimit aggregate function bug again. 
<p>Rewrote pivoting code. 
<p><b>2.42, 4 Oct 2002</b></p>
<p>Fixed ibase_fetch() problem with nulls. Also interbase now does automatic blob 
  decoding, and is backward compatible. Suggested by Heinz Hombergs heinz#hhombergs.de. 
<p>Fixed postgresql MoveNext() problems when called repeatedly after EOF. Also 
  suggested by Heinz Hombergs. 
<p>PageExecute() does not rewrite queries if SELECT DISTINCT is used. Requested 
  by hans#velum.net 
<p>Added additional fixes to oci8 SelectLimit handling with aggregate functions 
  - thx to Christian Bugge for reporting the problem. 
<p><b>2.41, 2 Oct 2002</b></p>
<p>Fixed ADODB_COUNTRECS bug in odbc. Thx to Joshua Zoshi jzoshi#hotmail.com. 
<p>Increased buffers for adodb-csvlib.inc.php for extremely long sql from 8192 
  to 32000. 
<p>Revised pivottable.inc.php code. Added better support for aggregate fields. 
<p>Fixed mysql text/blob types problem in MetaTypes base class - thx to horacio 
  degiorgi. 
<p>Added SQLDate($fmt,$date) function, which allows an sql date format string 
  to be generated - useful for group by's. 
<p>Fixed bug in oci8 SelectLimit when offset>100. 
<p><b>2.40 4 Sept 2002</b></p>
<p>Added new NLS_DATE_FORMAT property to oci8. Suggested by Laurent NAVARRO ln#altidev.com 
<p>Now use bind parameters in oci8 selectlimit for better performance. 
<p>Fixed interbase replaceQuote for dialect != 1. Thx to "BEGUIN Pierre-Henri 
  - INFOCOB" phb#infocob.com. 
<p>Added white-space check to QA. 
<p>Changed unixtimestamp to support fractional seconds (we always round down/floor 
  the seconds). Thanks to beezly#beezly.org.uk. 
<p>Now you can set the trigger_error type your own user-defined type in adodb-errorhandler.inc.php. 
  Suggested by Claudio Bustos clbustos#entelchile.net. 
<p>Added recordset filters with rsfilter.inc.php. 
<p>$conn->_rs2rs does not create a new recordset when it detects it is of type 
  array. Some trickery there as there seems to be a bug in Zend Engine 
<p>Added render_pagelinks to adodb-pager.inc.php. Code by "Pablo Costa" pablo#cbsp.com.br. 
<p>MetaType() speedup in adodb.inc.php by using hashing instead of switch. Best 
  performance if constant arrays are supported, as they are in PHP5. 
<p>adodb-session.php now updates only the expiry date if the crc32 check indicates 
  that the data has not been modified. 
<p><b>2.31 20 Aug 2002</b></p>
<p>Made changes to pivottable.inc.php due to daniel lucuzaeu's suggestions (we sum the pivottable column if desired).
<p>Fixed ErrorNo() in postgres so it does not depend on _errorMsg property.
<p>Robert Tuttle added support for oracle cursors. See ExecuteCursor().
<p>Fixed Replace() so it works with mysql when updating record where data has not changed. Reported by
Cal Evans (cal#calevans.com).
<p><b>2.30 1 Aug 2002</b></p>
<p>Added pivottable.inc.php. Thanks to daniel.lucazeau#ajornet.com for the original 
  concept.
<p>Added ADOConnection::outp($msg,$newline) to output error and debugging messages. Now 
you can override this using the ADODB_OUTP constant and use your own output handler.
<p>Changed == to === for 'null' comparison. Reported by ericquil#yahoo.com 
<p>Fixed mssql SelectLimit( ) bug when distinct used.
<p><b>2.30 1 Aug 2002</b></p>
<p>New GetCol() and CacheGetCol() from ross#bnw.com that returns the first field as a 1 dim array.
<p>We have an empty recordset, but RecordCount() could return -1. Fixed. Reported by  "Jonathan Polansky" jonathan#polansky.com.
<p>We now check for session variable changes using strlen($sessval).crc32($sessval). 
Formerly we only used crc32().
<p>Informix SelectLimit() problem with $ADODB_COUNTRECS fixed.
<p>Fixed informix SELECT FIRST x DISTINCT, and not SELECT DISTINCT FIRST x - reported by F Riosa
<p>Now default adodb error handlers ignores error if @ used.
<p>If you set $conn->autoRollback=true, we auto-rollback persistent connections for odbc, mysql, oci8, mssql. 
Default for autoRollback is false. No need to do so for postgres. 
As interbase requires a transaction id (what a flawed api), we don't do it for interbase.
<p>Changed PageExecute() to use non-greedy preg_match when searching for "FROM" keyword.
<p><b>2.20 9 July 2002</b></p>
<p>Added CacheGetOne($secs2cache,$sql), CacheGetRow($secs2cache,$sql), CacheGetAll($secs2cache,$sql).
<p>Added $conn->OffsetDate($dayFraction,$date=false) to generate sql that calcs 
  date offsets. Useful for scheduling appointments.
<p>Added connection properties: leftOuter, rightOuter that hold left and right 
  outer join operators.
<p>Added connection property: ansiOuter to indicate whether ansi outer joins supported.
<p>New driver <i>mssqlpo</i>, the portable mssql driver, which converts string 
  concat operator from || to +.
<p>Fixed ms access bug - SelectLimit() did not support ties - fixed.
<p>Karsten Kraus (Karsten.Kraus#web.de), contributed error-handling code to ADONewConnection. 
  Unfortunately due to backward compat problems, had to rollback most of the changes.
<p>Added new parameter to GetAssoc() to allow returning an array of key-value pairs, 
ignoring any additional columns in the recordset. Off by default.
<p>Corrected mssql $conn->sysDate to return only date using convert().
<p>CacheExecute() improved debugging output.
<p>Changed rs2html() so newlines are converted to BR tags. Also optimized rs2html() based
on feedback by "Jerry Workman" jerry#mtncad.com.
<p>Added support for Replace() with Interbase, using DELETE and INSERT.
<p>Some minor optimizations (mostly removing & references when passing arrays).
<p>Changed  GenID() to allows id's larger than the size of an integer.
<p>Added force_session property to oci8 for better updateblob() support.
<p>Fixed PageExecute() which did not work properly with sql containing GROUP BY.
<p><b>2.12 12 June 2002</b></p>
<p>Added toexport.inc.php to export recordsets in CSV and tab-delimited format.
<p>CachePageExecute() does not work - fixed - thx John Huong.
<p>Interbase aliases not set properly in FetchField() - fixed. Thx Stefan Goethals.
<p>Added cache property to adodb pager class. The number of secs to cache recordsets.
<p>SQL rewriting bug in pageexecute() due to skipping of newlines due to missing /s modifier. Fixed.
<p>Max size of cached recordset due to a bug was 256000 bytes. Fixed.
<p>Speedup of 1st invocation of CacheExecute() by tuning code.
<p>We compare $rewritesql with $sql in pageexecute code in case of rewrite failure.
<p><b>2.11 7 June 2002</b></p>
<p>Fixed PageExecute() rewrite sql problem - COUNT(*) and ORDER BY don't go together with
	mssql, access and postgres. Thx to Alexander Zhukov alex#unipack.ru
<p>DB2 support for CHARACTER type added - thx John Huong huongch#bigfoot.com
<p>For ado, $argProvider not properly checked. Fixed - kalimero#ngi.it
<p>Added $conn->Replace() function for update with automatic insert if the record does not exist. 
	Supported by all databases except interbase.
<p><b>2.10 4 June 2002</b></p>
<p>Added uniqueSort property to indicate mssql ORDER BY cols must be unique.
<p>Optimized session handler by crc32 the data. We only write if session data has changed.
<p>adodb_sess_read in adodb-session.php now returns ''correctly - thanks to Jorma Tuomainen, webmaster#wizactive.com
<p>Mssql driver did not throw EXECUTE errors correctly because ErrorMsg() and ErrorNo() called in wrong order. 
Pointed out by Alexios Fakos. Fixed.
<p>Changed ado to use client cursors. This fixes BeginTran() problems with ado.
<p>Added handling of timestamp type in ado.
<p>Added to ado_mssql support for insert_id() and affected_rows().
<p>Added support for mssql.datetimeconvert=0, available since php 4.2.0.
<p>Made UnixDate() less strict, so that the time is ignored if present.
<p>Changed quote() so that it checks for magic_quotes_gpc.
<p>Changed maxblobsize for odbc to default to 64000.
<p><b>2.00 13 May 2002</b></p>
<p>Added drivers <i>informix72</i> for pre-7.3 versions, and <i>oci805</i> for 
  oracle 8.0.5, and postgres64 for postgresql 6.4 and earlier. The postgres and postgres7 drivers
  are now identical.
<p>Interbase now partially supports ADODB_FETCH_BOTH, by defaulting to ASSOC mode.
<p>Proper support for blobs in mssql. Also revised blob support code 
is base class. Now UpdateBlobFile() calls UpdateBlob() for consistency.
<p>Added support for changed odbc_fetch_into api in php 4.2.0 
with $conn-&gt;_has_stupid_odbc_fetch_api_change.
<p>Fixed spelling of tablock locking hint in GenID( ) for mssql. 
<p>Added RowLock( ) to several databases, including oci8, informix, sybase, etc. 
  Fixed where error in mssql RowLock().
<p>Added sysDate and sysTimeStamp properties to most database drivers. These are the sql
functions/constants for that database that return the current date and current timestamp, and 
are useful for portable inserts and updates.
<p>Support for RecordCount() caused date handling in sybase and mssql to break. 
Fixed, thanks to Toni Tunkkari, by creating derived classes for ADORecordSet_array for
both databases. Generalized using arrayClass property. Also to support RecordCount(), 
changed metatype handling for ado drivers. Now the type returned in FetchField 
  is no longer a number, but the 1-char data type returned by MetaType.
  At the same time, fixed a lot of date handling. Now mssql support dmy and mdy date formats. 
Also speedups in sybase and mssql with preg_match and ^ in date/timestamp handling.
Added support in sybase and mssql for 24 hour clock in timestamps (no AM/PM).
<p>Extensive revisions to informix driver - thanks to Samuel CARRIERE samuel_carriere#hotmail.com 
<p>Added $ok parameter to CommitTrans($ok) for easy rollbacks.
<p>Fixed odbc MetaColumns and MetaTables to save and restore $ADODB_FETCH_MODE.
<p>Some odbc drivers did not call the base connection class constructor. Fixed.
<p>Fixed regex for GetUpdateSQL() and GetInsertSQL() to support more legal character combinations.

<p><b>1.99 21 April 2002</b></p>
<p>Added emulated RecordCount() to all database drivers if $ADODB_COUNTRECS = true 
  (which it is by default). Inspired by Cristiano Duarte (cunha17#uol.com.br). 
<p>Unified stored procedure support for mssql and oci8. Parameter() and PrepareSP() 
  functions implemented. 
<p>Added support for SELECT FIRST in informix, modified hasTop property to support 
  this. 
<p>Changed csv driver to handle updates/deletes/inserts properly (when Execute() returns true).
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 <a href="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 &lt;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&aacute;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 &lt;kuoriari#finebyte.com></p>
<p><b>1.31 21 August 2001</b></p>
<p>Many bug fixes thanks to "GaM3R (Cameron)" &lt;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" &lt;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 <a href="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>
<p>Realised that ADO's Move( ) uses relative positioning. ADOdb uses absolute. 
</p>
<p><b>0.10 Sept 9 2000</b></p>
<p>First release</p>
</body></html>