source: trunk/phpgwapi/inc/adodb/tests/test.php @ 34

Revision 34, 54.2 KB checked in by niltonneto, 17 years ago (diff)

Versão nova do ADODB (4.5 para 4.95)

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2/*
3V4.80 8 Mar 2006  (c) 2000-2007 John Lim (jlim#natsoft.com.my). All rights reserved.
4  Released under both BSD license and Lesser GPL library license.
5  Whenever there is any discrepancy between the two licenses,
6  the BSD license will take precedence.
7  Set tabs to 4 for best viewing.
8       
9  Latest version is available at http://adodb.sourceforge.net
10*/
11
12
13if (!defined('E_STRICT')) define('E_STRICT',E_NOTICE);
14error_reporting(E_ALL|E_STRICT);
15
16$ADODB_FLUSH = true;
17
18define('ADODB_ASSOC_CASE',0);
19
20
21function getmicrotime()
22{
23        $t = microtime();
24        $t = explode(' ',$t);
25        return (float)$t[1]+ (float)$t[0];
26}
27
28
29if (PHP_VERSION < 5) include_once('../adodb-pear.inc.php');
30//--------------------------------------------------------------------------------------
31//define('ADODB_ASSOC_CASE',1);
32//
33function Err($msg)
34{
35        print "<b>$msg</b><br>";
36        flush();
37}
38
39function CheckWS($conn)
40{
41global $ADODB_EXTENSION;
42
43        include_once('../session/adodb-session.php');
44        if (defined('CHECKWSFAIL')){ echo " TESTING $conn ";flush();}
45        $saved = $ADODB_EXTENSION;
46        $db = ADONewConnection($conn);
47        $ADODB_EXTENSION = $saved;
48        if (headers_sent()) {
49                print "<p><b>White space detected in adodb-$conn.inc.php or include file...</b></p>";
50                //die();
51        }
52}
53
54function do_strtolower(&$arr)
55{
56        foreach($arr as $k => $v) {
57                if (is_object($v)) $arr[$k] = adodb_pr($v,true);
58                else $arr[$k] = strtolower($v);
59        }
60}
61
62
63function CountExecs($db, $sql, $inputarray)
64{
65global $EXECS;  $EXECS++;
66}
67
68function CountCachedExecs($db, $secs2cache, $sql, $inputarray)
69{
70global $CACHED; $CACHED++;
71}
72
73// the table creation code is specific to the database, so we allow the user
74// to define their own table creation stuff
75
76function testdb(&$db,$createtab="create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)")
77{
78GLOBAL $ADODB_vers,$ADODB_CACHE_DIR,$ADODB_FETCH_MODE,$ADODB_COUNTRECS;
79
80        //adodb_pr($db);
81       
82?>      <form method=GET>
83        </p>
84        <table width=100% ><tr><td bgcolor=beige>&nbsp;</td></tr></table>
85        </p>
86<?php 
87        $create =false;
88        /*$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
89       
90        $rs = $db->Execute('select lastname,firstname,lastname,id from ADOXYZ');
91        $arr = $rs->GetAssoc();
92        echo "<pre>";print_r($arr);
93        die();*/
94       
95        if (!$db) die("testdb: database not inited");
96        GLOBAL $EXECS, $CACHED;
97       
98        $EXECS = 0;
99        $CACHED = 0;
100        //$db->Execute("drop table adodb_logsql");
101        if ((rand()%3) == 0) @$db->Execute("delete from adodb_logsql");
102        $db->debug=1;
103       
104        $db->fnExecute = 'CountExecs';
105        $db->fnCacheExecute = 'CountCachedExecs';
106       
107        if (empty($_GET['nolog'])) {
108                echo "<h3>SQL Logging enabled</h3>";
109                $db->LogSQL();/*
110                $sql =
111"SELECT t1.sid, t1.sid, t1.title, t1.hometext, t1.notes, t1.aid, t1.informant,
112t2.url, t2.email, t1.catid, t3.title, t1.topic, t4.topicname, t4.topicimage,
113t4.topictext, t1.score, t1.ratings, t1.counter, t1.comments, t1.acomm
114FROM `nuke_stories` `t1`, `nuke_authors` `t2`, `nuke_stories_cat` `t3`, `nuke_topics` `t4`
115        WHERE ((t2.aid=t1.aid) AND (t3.catid=t1.catid) AND (t4.topicid=t1.topic)
116        AND ((t1.alanguage='german') OR (t1.alanguage='')) AND (t1.ihome='0'))
117        ORDER BY t1.time DESC";
118                $db->SelectLimit($sql);
119                echo $db->ErrorMsg();*/
120        }
121        $ADODB_CACHE_DIR = dirname(TempNam('/tmp','testadodb'));
122        $db->debug = false;
123        //print $db->UnixTimeStamp('2003-7-22 23:00:00');
124       
125        $phpv = phpversion();
126        if (defined('ADODB_EXTENSION')) $ext = ' &nbsp; Extension '.ADODB_EXTENSION.' installed';
127        else $ext = '';
128        print "<h3>ADODB Version: $ADODB_vers Host: <i>$db->host</i> &nbsp; Database: <i>$db->database</i> &nbsp; PHP: $phpv $ext</h3>";
129       
130        flush();
131
132        if (function_exists('date_default_timezone_set')) date_default_timezone_set('Asia/Kuala_Lumpur');
133       
134        $arr = $db->ServerInfo();
135        print_r($arr);
136        echo E_ALL,' ',E_STRICT, "<br>";
137        $e = error_reporting(E_ALL | E_STRICT);
138        echo error_reporting(),'<p>';
139        flush();
140        #$db->debug=1;
141        $tt  = $db->Time();
142        if ($tt == 0) echo '<br><b>$db->Time failed</b>';
143        else echo "<br>db->Time: ".date('d-m-Y H:i:s',$tt);
144        echo '<br>';
145       
146        echo "Date=",$db->UserDate('2002-04-07'),'<br>';
147        print "<i>date1</i> (1969-02-20) = ".$db->DBDate('1969-2-20');
148        print "<br><i>date1</i> (1999-02-20) = ".$db->DBDate('1999-2-20');
149        print "<br><i>date1.1</i> 1999 = ".$db->DBDate("'1999'");
150        print "<br><i>date2</i> (1970-1-2) = ".$db->DBDate(24*3600)."<p>";
151        print "<i>ts1</i> (1999-02-20 13:40:50) = ".$db->DBTimeStamp('1999-2-20 1:40:50 pm');
152        print "<br><i>ts1.1</i> (1999-02-20 13:40:00) = ".$db->DBTimeStamp('1999-2-20 13:40');
153        print "<br><i>ts2</i> (1999-02-20) = ".$db->DBTimeStamp('1999-2-20');
154        print "<br><i>ts3</i> (1970-1-2 +/- timezone) = ".$db->DBTimeStamp(24*3600);
155        print "<br> Fractional TS (1999-2-20 13:40:50.91): ".$db->DBTimeStamp($db->UnixTimeStamp('1999-2-20 13:40:50.91+1'));
156         $dd = $db->UnixDate('1999-02-20');
157        print "<br>unixdate</i> 1999-02-20 = ".date('Y-m-d',$dd)."<p>";
158        print "<br><i>ts4</i> =".($db->UnixTimeStamp("19700101000101")+8*3600);
159        print "<br><i>ts5</i> =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123"));
160        print "<br><i>ts6</i> =".$db->UserTimeStamp("20040110092123");
161        print "<br><i>ts7</i> =".$db->DBTimeStamp("20040110092123");
162        flush();
163        // mssql too slow in failing bad connection
164        if (false && $db->databaseType != 'mssql') {
165                print "<p>Testing bad connection. Ignore following error msgs:<br>";
166                $db2 = ADONewConnection();
167                $rez = $db2->Connect("bad connection");
168                $err = $db2->ErrorMsg();
169                print "<i>Error='$err'</i></p>";
170                if ($rez) print "<b>Cannot check if connection failed.</b> The Connect() function returned true.</p>";
171        }
172        #error_reporting($e);
173        flush();
174
175        //$ADODB_COUNTRECS=false;
176        $rs=$db->Execute('select * from ADOXYZ order by id');
177        if($rs === false) $create = true;
178        else $rs->Close();
179       
180        //if ($db->databaseType !='vfp') $db->Execute("drop table ADOXYZ");
181       
182        if ($create) {
183                if (false && $db->databaseType == 'ibase') {
184                        print "<b>Please create the following table for testing:</b></p>$createtab</p>";
185                        return;
186                } else {
187                        $db->debug = 99;
188                #       $e = error_reporting(E_ALL-E_WARNING);
189                        $db->Execute($createtab);
190                #       error_reporting($e);
191                }
192        }
193        #error_reporting(E_ALL);
194        echo "<p>Testing Metatypes</p>";
195        $t = $db->MetaType('varchar');
196        if ($t != 'C') Err("Bad Metatype for varchar");
197       
198        $rs = $db->Execute("delete from ADOXYZ"); // some ODBC drivers will fail the drop so we delete
199        if ($rs) {
200                if(! $rs->EOF) print "<b>Error: </b>RecordSet returned by Execute('delete...') should show EOF</p>";
201                $rs->Close();
202        } else print "err=".$db->ErrorMsg();
203
204        print "<p>Test select on empty table, FetchField when EOF, and GetInsertSQL</p>";
205        $rs = $db->Execute("select id,firstname from ADOXYZ where id=9999");
206        if ($rs && !$rs->EOF) print "<b>Error: </b>RecordSet returned by Execute(select...') on empty table should show EOF</p>";
207        if ($rs->EOF && (($ox = $rs->FetchField(0)) && !empty($ox->name))) {
208                $record['id'] = 99;
209                $record['firstname'] = 'John';
210                $sql =  $db->GetInsertSQL($rs, $record);
211                if (strtoupper($sql) != strtoupper("INSERT INTO ADOXYZ ( id, firstname ) VALUES ( 99, 'John' )")) Err("GetInsertSQL does not work on empty table: $sql");
212        } else {
213                Err("FetchField does not work on empty recordset, meaning GetInsertSQL will fail...");
214        }
215        if ($rs) $rs->Close();
216        flush();
217        //$db->debug=true;     
218        print "<p>Testing Commit: ";
219        $time = $db->DBDate(time());
220        if (!$db->BeginTrans()) {
221                print '<b>Transactions not supported</b></p>';
222                if ($db->hasTransactions) Err("hasTransactions should be false");
223        } else { /* COMMIT */
224                if (!$db->hasTransactions) Err("hasTransactions should be true");
225                if ($db->transCnt != 1) Err("Invalid transCnt = $db->transCnt (should be 1)");
226                $rs = $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (99,'Should Not','Exist (Commit)',$time)");
227                if ($rs && $db->CommitTrans()) {
228                        $rs->Close();
229                        $rs = $db->Execute("select * from ADOXYZ where id=99");
230                        if ($rs === false || $rs->EOF) {
231                                print '<b>Data not saved</b></p>';
232                                $rs = $db->Execute("select * from ADOXYZ where id=99");
233                                print_r($rs);
234                                die();
235                        } else print 'OK</p>';
236                        if ($rs) $rs->Close();
237                } else {
238                        if (!$rs) {
239                                print "<b>Insert failed</b></p>";
240                                $db->RollbackTrans();
241                        } else print "<b>Commit failed</b></p>";
242                }
243                if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)");
244               
245                /* ROLLBACK */ 
246                if (!$db->BeginTrans()) print "<p><b>Error in BeginTrans</b>()</p>";
247                print "<p>Testing Rollback: ";
248                $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (100,'Should Not','Exist (Rollback)',$time)");
249                if ($db->RollbackTrans()) {
250                        $rs = $db->Execute("select * from ADOXYZ where id=100");
251                        if ($rs && !$rs->EOF) print '<b>Fail: Data should rollback</b></p>';
252                        else print 'OK</p>';
253                        if ($rs) $rs->Close();
254                } else
255                        print "<b>Commit failed</b></p>";
256                       
257                $rs = $db->Execute('delete from ADOXYZ where id>50');
258                if ($rs) $rs->Close();
259               
260                if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)");
261        }
262       
263        if (1) {
264                print "<p>Testing MetaDatabases()</p>";
265                print_r( $db->MetaDatabases());
266
267                print "<p>Testing MetaTables() and MetaColumns()</p>";
268                $a = $db->MetaTables();
269                if ($a===false) print "<b>MetaTables not supported</b></p>";
270                else {
271                        print "Array of tables and views: ";
272                        foreach($a as $v) print " ($v) ";
273                        print '</p>';
274                }
275               
276                $a = $db->MetaTables('VIEW');
277                if ($a===false) print "<b>MetaTables not supported (views)</b></p>";
278                else {
279                        print "Array of views: ";
280                        foreach($a as $v) print " ($v) ";
281                        print '</p>';
282                }
283               
284                $a = $db->MetaTables(false,false,'aDo%');
285                if ($a===false) print "<b>MetaTables not supported (mask)</b></p>";
286                else {
287                        print "Array of ado%: ";
288                        foreach($a as $v) print " ($v) ";
289                        print '</p>';
290                }
291               
292                $a = $db->MetaTables('TABLE');
293                if ($a===false) print "<b>MetaTables not supported</b></p>";
294                else {
295                        print "Array of tables: ";
296                        foreach($a as $v) print " ($v) ";
297                        print '</p>';
298                }
299               
300                $db->debug=0;
301                $rez = $db->MetaColumns("NOSUCHTABLEHERE");
302                if ($rez !== false) {
303                        Err("MetaColumns error handling failed");
304                        var_dump($rez);
305                }
306                $db->debug=1;
307                $a = $db->MetaColumns('ADOXYZ');
308                if ($a===false) print "<b>MetaColumns not supported</b></p>";
309                else {
310                        print "<p>Columns of ADOXYZ: <font size=1><br>";
311                        foreach($a as $v) {print_r($v); echo "<br>";}
312                        echo "</font>";
313                }
314               
315                print "<p>Testing MetaIndexes</p>";
316               
317                $a = $db->MetaIndexes(('ADOXYZ'),true);
318                if ($a===false) print "<b>MetaIndexes not supported</b></p>";
319                else {
320                        print "<p>Indexes of ADOXYZ: <font size=1><br>";
321                        adodb_pr($a);
322                        echo "</font>";
323                }
324                print "<p>Testing MetaPrimaryKeys</p>";
325                $a = $db->MetaPrimaryKeys('ADOXYZ');
326                var_dump($a);
327        }
328        $rs = $db->Execute('delete from ADOXYZ');
329        if ($rs) $rs->Close();
330       
331        $db->debug = false;
332       
333       
334        switch ($db->databaseType) {
335        case 'vfp':
336               
337                if (0) {
338                        // memo test
339                        $rs = $db->Execute("select data from memo");
340                        rs2html($rs);
341                }
342                break;
343
344        case 'postgres7':
345        case 'postgres64':
346        case 'postgres':
347        case 'ibase':
348                print "<p>Encode=".$db->BlobEncode("abc\0d\"'
349ef")."</p>";//'
350
351                print "<p>Testing Foreign Keys</p>";
352                $arr = $db->MetaForeignKeys('ADOXYZ',false,true);
353                print_r($arr);
354                if (!$arr) Err("No MetaForeignKeys");
355                break;
356       
357        case 'odbc_mssql':
358        case 'mssqlpo':
359                print "<p>Testing Foreign Keys</p>";
360                $arr = $db->MetaForeignKeys('Orders',false,true);
361                print_r($arr);
362                if (!$arr) Err("Bad MetaForeignKeys");
363                if ($db->databaseType == 'odbc_mssql') break;
364       
365        case 'mssql':
366       
367               
368/*
369ASSUME Northwind available...
370
371CREATE PROCEDURE SalesByCategory
372        @CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998'
373AS
374IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998'
375BEGIN
376        SELECT @OrdYear = '1998'
377END
378
379SELECT ProductName,
380        TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0)
381FROM [Order Details] OD, Orders O, Products P, Categories C
382WHERE OD.OrderID = O.OrderID
383        AND OD.ProductID = P.ProductID
384        AND P.CategoryID = C.CategoryID
385        AND C.CategoryName = @CategoryName
386        AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear
387GROUP BY ProductName
388ORDER BY ProductName
389GO
390
391
392CREATE PROCEDURE ADODBTestSP
393@a nvarchar(25)
394AS
395SELECT GETDATE() AS T, @a AS A
396GO
397*/
398                print "<h4>Testing Stored Procedures for mssql</h4>";
399                $saved = $db->debug;
400                $db->debug=true;
401                $assoc = $ADODB_FETCH_MODE;
402                $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
403                $cmd = $db->PrepareSP('ADODBTestSP');
404                $ss = "You should see me in the output.";
405                $db->InParameter($cmd,$ss,'a');
406                $rs = $db->Execute($cmd);
407                #var_dump($rs->fields);
408                echo $rs->fields['T']." --- ".$rs->fields['A']."---<br>";
409
410                $cat = 'Dairy Products';
411                $yr = '1998';
412               
413                $stmt = $db->PrepareSP('SalesByCategory');
414                $db->InParameter($stmt,$cat,'CategoryName');
415                $db->InParameter($stmt,$yr,'OrdYear');
416                $rs = $db->Execute($stmt);
417                rs2html($rs);
418               
419                $cat = 'Grains/Cereals';
420                $yr = 1998;
421               
422                $stmt = $db->PrepareSP('SalesByCategory');
423                $db->InParameter($stmt,$cat,'CategoryName');
424                $db->InParameter($stmt,$yr,'OrdYear');
425                $rs = $db->Execute($stmt);
426                rs2html($rs);
427               
428                $ADODB_FETCH_MODE = $assoc;
429               
430                /*
431                Test out params - works in PHP 4.2.3 and 4.3.3 and 4.3.8 but not 4.3.0:
432               
433                        CREATE PROCEDURE at_date_interval
434                                @days INTEGER,
435                                @start VARCHAR(20) OUT,
436                                @end VARCHAR(20) OUT   
437                        AS
438                        BEGIN
439                                set @start = CONVERT(VARCHAR(20), getdate(), 101)
440                                set @end =CONVERT(VARCHAR(20), dateadd(day, @days, getdate()), 101 )
441                        END
442                        GO
443                */
444                $db->debug=1;
445                $stmt = $db->PrepareSP('at_date_interval');
446                $days = 10;
447                $begin_date = '';
448                $end_date = '';
449                $db->InParameter($stmt,$days,'days', 4, SQLINT4);
450                $db->OutParameter($stmt,$begin_date,'start', 20, SQLVARCHAR );
451                $db->OutParameter($stmt,$end_date,'end', 20, SQLVARCHAR );
452                $db->Execute($stmt);
453                if (empty($begin_date) or empty($end_date) or $begin_date == $end_date) {
454                        Err("MSSQL SP Test for OUT Failed");
455                        print "begin=$begin_date end=$end_date<p>";
456                } else print "(Today +10days) = (begin=$begin_date end=$end_date)<p>";
457       
458                $db->debug = $saved;
459                break;
460        case 'oci8':
461        case 'oci8po':
462               
463                if (0) {
464                $t = getmicrotime();
465                $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
466                $arr = $db->GetArray('select * from abalone_tree');
467                $arr = $db->GetArray('select * from abalone_tree');
468                $arr = $db->GetArray('select * from abalone_tree');
469                echo "<p>t = ",getmicrotime() - $t,"</p>";
470                die();
471                }
472               
473                # cleanup
474                $db->Execute("delete from photos where id=99 or id=1");
475                $db->Execute("insert into photos (id) values(1)");
476                $db->Execute("update photos set photo=null,descclob=null where id=1");
477               
478                $saved = $db->debug;
479                $db->debug=true;
480               
481               
482
483                /*
484                CREATE TABLE PHOTOS
485                (
486                  ID           NUMBER(16),
487                  PHOTO        BLOB,
488                  DESCRIPTION  VARCHAR2(4000 BYTE),
489                  DESCCLOB     CLOB
490                );
491               
492                INSERT INTO PHOTOS (ID) VALUES(1);
493                */
494                $s = '';
495                for ($i = 0; $i <= 500; $i++) {
496                        $s .= '1234567890';
497                }
498               
499                $sql = "INSERT INTO photos ( ID, photo) ".
500                        "VALUES ( :id, empty_blob() )".
501                        " RETURNING photo INTO :xx";
502
503               
504                $blob_data = $s;
505                $id = 99;
506               
507                $stmt = $db->PrepareSP($sql);
508                $db->InParameter($stmt, $id, 'id');
509                $blob = $db->InParameter($stmt, $s, 'xx',-1, OCI_B_BLOB);
510                $db->StartTrans();
511                $result = $db->Execute($stmt);
512                $db->CompleteTrans();
513               
514                $s2= $db->GetOne("select photo from photos where id=99");
515                echo "<br>---$s2";
516                if ($s !== $s2) Err("insert blob does not match");
517
518                print "<h4>Testing Blob: size=".strlen($s)."</h4>";
519                $ok = $db->Updateblob('photos','photo',$s,'id=1');
520                if (!$ok) Err("Blob failed 1");
521                else {
522                        $s2= $db->GetOne("select photo from photos where id=1");
523                        if ($s !== $s2) Err("updateblob does not match");
524                }
525               
526                print "<h4>Testing Clob: size=".strlen($s)."</h4>";
527                $ok = $db->UpdateClob('photos','descclob',$s,'id=1');
528                if (!$ok) Err("Clob failed 1");
529                else {
530                        $s2= $db->GetOne("select descclob from photos where id=1");
531                        if ($s !== $s2) Err("updateclob does not match");
532                }
533               
534               
535                $s = '';
536                $s2 = '';
537                print "<h4>Testing Foreign Keys</h4>";
538                $arr = $db->MetaForeignKeys('emp','scott');
539                print_r($arr);
540                if (!$arr) Err("Bad MetaForeignKeys");
541/*
542-- TEST PACKAGE
543-- "Set scan off" turns off substitution variables.
544Set scan off;
545
546CREATE OR REPLACE PACKAGE Adodb AS
547TYPE TabType IS REF CURSOR RETURN TAB%ROWTYPE;
548PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR);
549PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) ;
550PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR);
551PROCEDURE data_in(input IN VARCHAR);
552PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER);
553END Adodb;
554/
555
556
557CREATE OR REPLACE PACKAGE BODY Adodb AS
558PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR) IS
559        BEGIN
560                OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames;
561        END open_tab;
562
563        PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) IS
564        BEGIN
565                OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames;
566                tablenames := 'TEST';
567        END open_tab2;
568
569PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR) IS
570        BEGIN
571                output := 'Cinta Hati '||input;
572        END;
573       
574PROCEDURE data_in(input IN VARCHAR) IS
575        ignore varchar(1000);
576        BEGIN
577                ignore := input;
578        END;
579
580PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER) AS
581BEGIN
582p2 := p1;
583END;
584END Adodb;
585/
586
587*/
588
589                print "<h4>Testing Cursor Variables</h4>";
590                $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:zz,'A%'); END;",'zz');
591       
592                if ($rs && !$rs->EOF) {
593                        $v = $db->GetOne("SELECT count(*) FROM tab where tname like 'A%'");
594                        if ($v == $rs->RecordCount()) print "Test 1 RowCount: OK<p>";
595                        else Err("Test 1 RowCount ".$rs->RecordCount().", actual = $v");
596                } else {
597                        print "<b>Error in using Cursor Variables 1</b><p>";
598                }
599                $rs->Close();
600               
601                print "<h4>Testing Stored Procedures for oci8</h4>";
602               
603                $stmt = $db->PrepareSP("BEGIN adodb.data_out(:a1, :a2); END;");
604                $a1 = 'Malaysia';
605                //$a2 = ''; # a2 doesn't even need to be defined!
606                $db->InParameter($stmt,$a1,'a1');
607                $db->OutParameter($stmt,$a2,'a2');
608                $rs = $db->Execute($stmt);
609                if ($rs) {
610                        if ($a2 !== 'Cinta Hati Malaysia') print "<b>Stored Procedure Error: a2 = $a2</b><p>";
611                        else echo  "OK: a2=$a2<p>";
612                } else {
613                        print "<b>Error in using Stored Procedure IN/Out Variables</b><p>";
614                }
615               
616                $tname = 'A%';
617               
618                $stmt = $db->PrepareSP('select * from tab where tname like :tablename');
619                $db->Parameter($stmt,$tname,'tablename');
620                $rs = $db->Execute($stmt);
621                rs2html($rs);
622               
623                $stmt = $db->PrepareSP("begin adodb.data_in(:a1); end;");
624                $db->InParameter($stmt,$a1,'a1');
625                $db->Execute($stmt);
626               
627                $db->debug = $saved;
628                break;
629       
630        default:
631                break;
632        }
633        $arr = array(
634                array(1,'Caroline','Miranda'),
635                array(2,'John','Lim'),
636                array(3,'Wai Hun','See')
637        );
638        //$db->debug=1;
639        print "<p>Testing Bulk Insert of 3 rows</p>";
640
641        $sql = "insert into ADOXYZ (id,firstname,lastname) values (".$db->Param('0').",".$db->Param('1').",".$db->Param('2').")";
642        $db->StartTrans();
643        $db->Execute($sql,$arr);
644        $db->CompleteTrans();
645        $rs = $db->Execute('select * from ADOXYZ order by id');
646        if (!$rs || $rs->RecordCount() != 3) Err("Bad bulk insert");
647       
648        rs2html($rs);
649       
650        $db->Execute('delete from ADOXYZ');
651               
652        print "<p>Inserting 50 rows</p>";
653
654        for ($i = 0; $i < 5; $i++) {   
655
656        $time = $db->DBDate(time());
657        if (empty($_GET['hide'])) $db->debug = true;
658        switch($db->databaseType){
659        case 'mssqlpo':
660        case 'mssql':
661                $sqlt = "CREATE TABLE mytable (
662  row1 INT  IDENTITY(1,1) NOT NULL,
663  row2 varchar(16),
664  PRIMARY KEY  (row1))";
665                //$db->debug=1;
666                if (!$db->Execute("delete from mytable"))
667                        $db->Execute($sqlt);
668                       
669                $ok = $db->Execute("insert into mytable (row2) values ('test')");
670                $ins_id=$db->Insert_ID();
671                echo "Insert ID=";var_dump($ins_id);
672                if ($ins_id == 0) Err("Bad Insert_ID()");
673                $ins_id2 = $db->GetOne("select row1 from mytable");
674                if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2");
675               
676                $arr = array(0=>'Caroline',1=>'Miranda');
677                $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)";
678                break;
679        case 'mysqli':
680        case 'mysqlt':
681        case 'mysql':
682                $sqlt = "CREATE TABLE `mytable` (
683  `row1` int(11) NOT NULL auto_increment,
684  `row2` varchar(16) NOT NULL default '',
685  PRIMARY KEY  (`row1`),
686  KEY `myindex` (`row1`,`row2`)
687) ";
688                if (!$db->Execute("delete from mytable"))
689                        $db->Execute($sqlt);
690                       
691                $ok = $db->Execute("insert into mytable (row2) values ('test')");
692                $ins_id=$db->Insert_ID();
693                echo "Insert ID=";var_dump($ins_id);
694                if ($ins_id == 0) Err("Bad Insert_ID()");
695                $ins_id2 = $db->GetOne("select row1 from mytable");
696                if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2");
697               
698        default:
699                $arr = array(0=>'Caroline',1=>'Miranda');
700                $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)";
701                break;
702       
703        case 'oci8':
704        case 'oci805':
705                $arr = array('first'=>'Caroline','last'=>'Miranda');
706                $amt = rand() % 100;
707                $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,:first,:last,$time)";               
708                break;
709        }
710        if ($i & 1) {
711                $sql = $db->Prepare($sql);
712        }
713        $rs = $db->Execute($sql,$arr);
714               
715        if ($rs === false) Err( 'Error inserting with parameters');
716        else $rs->Close();
717        $db->debug = false;
718        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+1,'John','Lim',$time)");
719        /*$ins_id=$db->Insert_ID();
720        echo "Insert ID=";var_dump($ins_id);*/
721        if ($db->databaseType == 'mysql') if ($ins_id == 0) Err('Bad Insert_ID');
722        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+2,'Mary','Lamb',$time )");
723        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+3,'George','Washington',$time )");
724        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+4,'Mr. Alan','Tam',$time )");
725        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+5,'Alan',".$db->quote("Turing'ton").",$time )");
726        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created)values ($i*10+6,'Serena','Williams',$time )");
727        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+7,'Yat Sun','Sun',$time )");
728        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+8,'Wai Hun','See',$time )");
729        $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+9,'Steven','Oey',$time )");
730        } // for
731        if (1) {
732        $db->debug=1;
733        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
734        $cnt = $db->GetOne("select count(*) from ADOXYZ");
735        $rs = $db->Execute('update ADOXYZ set id=id+1');       
736        if (!is_object($rs)) {
737                print_r($rs);
738                err("Update should return object");
739        }
740        if (!$rs) err("Update generated error");
741       
742        $nrows = $db->Affected_Rows();   
743        if ($nrows === false) print "<p><b>Affected_Rows() not supported</b></p>";
744        else if ($nrows != $cnt)  print "<p><b>Affected_Rows() Error: $nrows returned (should be 50) </b></p>";
745        else print "<p>Affected_Rows() passed</p>";
746        }
747       
748        if ($db->dataProvider == 'oci8')  $array = array('zid'=>1,'zdate'=>date('Y-m-d',time()));
749        else $array=array(1,date('Y-m-d',time()));
750       
751       
752        #$array = array(1,date('Y-m-d',time()));
753        $id = $db->GetOne("select id from ADOXYZ
754                where id=".$db->Param('zid')." and created>=".$db->Param('ZDATE')."",
755                $array);
756        if ($id != 1) Err("Bad bind; id=$id");
757        else echo "<br>Bind date/integer 1 passed";
758       
759        $array =array(1,$db->BindDate(time()));
760        $id = $db->GetOne("select id from ADOXYZ
761                where id=".$db->Param('0')." and created>=".$db->Param('1')."",
762                $array);
763        if ($id != 1) Err("Bad bind; id=$id");
764        else echo "<br>Bind date/integer 2 passed";
765       
766        $db->debug = false;
767        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
768 //////////////////////////////////////////////////////////////////////////////////////////
769       
770        $rs = $db->Execute("select * from ADOXYZ where firstname = 'not known'");
771        if (!$rs ||  !$rs->EOF) print "<p><b>Error on empty recordset</b></p>";
772        else if ($rs->RecordCount() != 0) {
773                print "<p><b>Error on RecordCount. Should be 0. Was ".$rs->RecordCount()."</b></p>";
774                print_r($rs->fields);
775        }
776        if ($db->databaseType !== 'odbc') {
777                $rs = $db->Execute("select id,firstname,lastname,created,".$db->random." from ADOXYZ order by id");
778                if ($rs) {
779                        if ($rs->RecordCount() != 50) {
780                                print "<p><b>RecordCount returns ".$rs->RecordCount().", should be 50</b></p>";
781                                adodb_pr($rs->GetArray());
782                                $poc = $rs->PO_RecordCount('ADOXYZ');
783                                if ($poc == 50) print "<p> &nbsp; &nbsp; PO_RecordCount passed</p>";
784                                else print "<p><b>PO_RecordCount returns wrong value: $poc</b></p>";
785                        } else print "<p>RecordCount() passed</p>";
786                        if (isset($rs->fields['firstname'])) print '<p>The fields columns can be indexed by column name.</p>';
787                        else {
788                                Err( '<p>The fields columns <i>cannot</i> be indexed by column name.</p>');
789                                print_r($rs->fields);
790                        }
791                        if (empty($_GET['hide'])) rs2html($rs);
792                }
793                else print "<p><b>Error in Execute of SELECT with random</b></p>";
794        }
795        $val = $db->GetOne("select count(*) from ADOXYZ");
796         if ($val == 50) print "<p>GetOne returns ok</p>";
797         else print "<p><b>Fail: GetOne returns $val</b></p>";
798
799         echo "<b>GetRow Test</b>";
800        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
801        $val1 = $db->GetRow("select count(*) from ADOXYZ");
802        $val2 = $db->GetRow("select count(*) from ADOXYZ");
803         if ($val1[0] == 50 and sizeof($val1) == 1 and $val2[0] == 50 and sizeof($val2) == 1) print "<p>GetRow returns ok</p>";
804         else {
805                print_r($val);
806                print "<p><b>Fail: GetRow returns {$val2[0]}</b></p>";
807        }
808
809        print "<p>FetchObject/FetchNextObject Test</p>";
810        $rs = $db->Execute('select * from ADOXYZ');
811        if ($rs) {
812                if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
813               
814                while ($o = $rs->FetchNextObject()) { // calls FetchObject internally
815                        if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) {
816                                print_r($o);
817                                print "<p><b>Firstname is not string</b></p>";
818                                break;
819                        }
820                }
821        } else {
822                print "<p><b>Failed rs</b></p>";
823                die("<p>ADOXYZ table cannot be read - die()");
824        }
825        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
826        print "<p>FetchObject/FetchNextObject Test 2</p>";
827        #$db->debug=99;
828        $rs = $db->Execute('select * from ADOXYZ');
829        if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
830        print_r($rs->fields);
831        while ($o = $rs->FetchNextObject()) { // calls FetchObject internally
832                if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) {
833                        print_r($o);
834                        print "<p><b>Firstname is not string</b></p>";
835                        break;
836                }
837        }
838        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
839       
840        $savefetch = $ADODB_FETCH_MODE;
841        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
842       
843        print "<p>CacheSelectLimit  Test...</p>";
844        $db->debug=1;
845        $rs = $db->CacheSelectLimit('select  id, firstname from  ADOXYZ order by id',2);
846       
847        if ($rs && !$rs->EOF) {
848                if (isset($rs->fields[0])) {
849                        Err("ASSOC has numeric fields");
850                        print_r($rs->fields);
851                }
852                if ($rs->fields['id'] != 1)  {Err("Error"); print_r($rs->fields);};
853                if (trim($rs->fields['firstname']) != 'Caroline')  {print Err("Error 2"); print_r($rs->fields);};
854               
855                $rs->MoveNext();
856                if ($rs->fields['id'] != 2)  {Err("Error 3"); print_r($rs->fields);};
857                $rs->MoveNext();
858                if (!$rs->EOF) {
859                        Err("Error EOF");
860                        print_r($rs);
861                }
862        }
863       
864        print "<p>FETCH_MODE = ASSOC: Should get 1, Caroline</p>";
865        $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',2);
866        if ($rs && !$rs->EOF) {
867                if (ADODB_ASSOC_CASE == 2) {
868                        $id = 'ID';
869                        $fname = 'FIRSTNAME';
870                }else {
871                        $id = 'id';
872                        $fname = 'firstname';
873                }
874                if ($rs->fields[$id] != 1)  {Err("Error 1"); print_r($rs->fields);};
875                if (trim($rs->fields[$fname]) != 'Caroline')  {Err("Error 2"); print_r($rs->fields);};
876                $rs->MoveNext();
877                if ($rs->fields[$id] != 2)  {Err("Error 3"); print_r($rs->fields);};
878                $rs->MoveNext();
879                if (!$rs->EOF) Err("Error EOF");
880                else if (is_array($rs->fields) || $rs->fields) {
881                        Err("Error: ## fields should be set to false on EOF");
882                        print_r($rs->fields);
883                }
884        }
885       
886        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
887        print "<p>FETCH_MODE = NUM: Should get 1, Caroline</p>";
888        $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1);
889        if ($rs && !$rs->EOF) {
890                if (isset($rs->fields['id'])) Err("FETCH_NUM has ASSOC fields");
891                if ($rs->fields[0] != 1)  {Err("Error 1"); print_r($rs->fields);};
892                if (trim($rs->fields[1]) != 'Caroline')  {Err("Error 2");print_r($rs->fields);};
893                $rs->MoveNext();
894                if (!$rs->EOF) Err("Error EOF");
895
896        }
897        $ADODB_FETCH_MODE = $savefetch;
898       
899        $db->debug = false;
900        print "<p>GetRowAssoc Upper: Should get 1, Caroline</p>";
901        $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1);
902        if ($rs && !$rs->EOF) {
903                $arr = $rs->GetRowAssoc();
904                if ($arr['ID'] != 1) {Err("Error 1");print_r($arr);};
905                if (trim($arr['FIRSTNAME']) != 'Caroline') {Err("Error 2"); print_r($arr);};
906                $rs->MoveNext();
907                if (!$rs->EOF) Err("Error EOF");
908
909        }
910        print "<p>GetRowAssoc Lower: Should get 1, Caroline</p>";
911        $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1);
912        if ($rs && !$rs->EOF) {
913                $arr = $rs->GetRowAssoc(false);
914                if ($arr['id'] != 1) {Err("Error 1"); print_r($arr);};
915                if (trim($arr['firstname']) != 'Caroline') {Err("Error 2"); print_r($arr);};
916
917        }
918       
919        print "<p>GetCol Test</p>";
920        $col = $db->GetCol('select distinct firstname from ADOXYZ order by 1');
921        if (!is_array($col)) Err("Col size is wrong");
922        if (trim($col[0]) != 'Alan' or trim($col[9]) != 'Yat Sun') Err("Col elements wrong");
923
924        $db->debug = true;
925       
926               
927        echo "<p>Date Update Test</p>";
928        $zdate = date('Y-m-d',time()+3600*24);
929        $zdate = $db->DBDate($zdate);
930        $db->Execute("update ADOXYZ set created=$zdate where id=1");
931        $row = $db->GetRow("select created,firstname from ADOXYZ where id=1");
932        print_r($row); echo "<br>";
933       
934       
935       
936        print "<p>SelectLimit Distinct Test 1: Should see Caroline, John and Mary</p>";
937        $rs = $db->SelectLimit('select distinct * from ADOXYZ order by id',3);
938       
939       
940        if ($rs && !$rs->EOF) {
941                if (trim($rs->fields[1]) != 'Caroline') Err("Error 1 (exp Caroline), ".$rs->fields[1]);
942                $rs->MoveNext();
943               
944                if (trim($rs->fields[1]) != 'John') Err("Error 2 (exp John), ".$rs->fields[1]);
945                $rs->MoveNext();
946                if (trim($rs->fields[1]) != 'Mary') Err("Error 3 (exp Mary),".$rs->fields[1]);
947                $rs->MoveNext();
948                if (! $rs->EOF) Err("Error EOF");
949                //rs2html($rs);
950        } else Err("Failed SelectLimit Test 1");
951       
952        print "<p>SelectLimit Test 2: Should see Mary, George and Mr. Alan</p>";
953        $rs = $db->SelectLimit('select * from ADOXYZ order by id',3,2);
954        if ($rs && !$rs->EOF) {
955                if (trim($rs->fields[1]) != 'Mary') Err("Error 1 - No Mary, instead: ".$rs->fields[1]);
956                $rs->MoveNext();
957                if (trim($rs->fields[1]) != 'George')Err("Error 2 - No George, instead: ".$rs->fields[1]);
958                $rs->MoveNext();
959                if (trim($rs->fields[1]) != 'Mr. Alan') Err("Error 3 - No Mr. Alan, instead: ".$rs->fields[1]);
960                $rs->MoveNext();
961                if (! $rs->EOF) Err("Error EOF");
962        //      rs2html($rs);
963        }
964         else Err("Failed SelectLimit Test 2 ". ($rs ? 'EOF':'no RS'));
965       
966        print "<p>SelectLimit Test 3: Should see Wai Hun and Steven</p>";
967        $db->debug=1;
968        global $A; $A=1;
969        $rs = $db->SelectLimit('select * from ADOXYZ order by id',-1,48);
970        $A=0;
971        if ($rs && !$rs->EOF) {
972                if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
973                if (trim($rs->fields[1]) != 'Wai Hun') Err("Error 1 ".$rs->fields[1]);
974                $rs->MoveNext();
975                if (trim($rs->fields[1]) != 'Steven') Err("Error 2 ".$rs->fields[1]);
976                $rs->MoveNext();
977                if (! $rs->EOF) {
978                        Err("Error EOF");
979                }
980                //rs2html($rs);
981        }
982         else Err("Failed SelectLimit Test 3");
983                $db->debug = false;
984       
985       
986        $rs = $db->Execute("select * from ADOXYZ order by id");
987        print "<p>Testing Move()</p>"; 
988        if (!$rs)Err( "Failed Move SELECT");
989        else {
990                if (!$rs->Move(2)) {
991                        if (!$rs->canSeek) print "<p>$db->databaseType: <b>Move(), MoveFirst() nor MoveLast() not supported.</b></p>";
992                        else print '<p><b>RecordSet->canSeek property should be set to false</b></p>';
993                } else {
994                        $rs->MoveFirst();
995                        if (trim($rs->Fields("firstname")) != 'Caroline') {
996                                print "<p><b>$db->databaseType: MoveFirst failed -- probably cannot scroll backwards</b></p>";
997                        }
998                        else print "MoveFirst() OK<BR>";
999                                               
1000                                                // Move(3) tests error handling -- MoveFirst should not move cursor
1001                        $rs->Move(3);
1002                        if (trim($rs->Fields("firstname")) != 'George') {
1003                                print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(3) failed</b></p>";
1004                        } else print "Move(3) OK<BR>";
1005                                               
1006                        $rs->Move(7);
1007                        if (trim($rs->Fields("firstname")) != 'Yat Sun') {
1008                                print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(7) failed</b></p>";
1009                                print_r($rs);
1010                        } else print "Move(7) OK<BR>";
1011                        if ($rs->EOF) Err("Move(7) is EOF already");
1012                        $rs->MoveLast();
1013                        if (trim($rs->Fields("firstname")) != 'Steven'){
1014                                 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: MoveLast() failed</b></p>";
1015                                 print_r($rs);
1016                        }else print "MoveLast() OK<BR>";
1017                        $rs->MoveNext();
1018                        if (!$rs->EOF) err("Bad MoveNext");
1019                        if ($rs->canSeek) {
1020                                $rs->Move(3);
1021                                if (trim($rs->Fields("firstname")) != 'George') {
1022                                        print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(3) after MoveLast failed</b></p>";
1023                                       
1024                                } else print "Move(3) after MoveLast() OK<BR>";
1025                        }
1026                       
1027                        print "<p>Empty Move Test";
1028                        $rs = $db->Execute("select * from ADOXYZ where id > 0 and id < 0");
1029                        $rs->MoveFirst();
1030                        if (!$rs->EOF || $rs->fields) Err("Error in empty move first");
1031                }
1032        }
1033       
1034        $rs = $db->Execute('select * from ADOXYZ where id = 2');
1035        if ($rs->EOF || !is_array($rs->fields)) Err("Error in select");
1036        $rs->MoveNext();
1037        if (!$rs->EOF) Err("Error in EOF (xx) ");
1038 //     $db->debug=true;
1039        print "<p>Testing ADODB_FETCH_ASSOC and concat: concat firstname and lastname</p>";
1040
1041        $save = $ADODB_FETCH_MODE;
1042        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
1043        if ($db->dataProvider == 'postgres') {
1044                $sql = "select ".$db->Concat('cast(firstname as varchar)',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ";
1045                $rs = $db->Execute($sql);
1046        } else {
1047                $sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ";
1048                $rs = $db->Execute($sql);
1049        }
1050        if ($rs) {
1051                if (empty($_GET['hide'])) rs2html($rs);
1052        } else {
1053                Err( "Failed Concat:".$sql);
1054        }
1055        $ADODB_FETCH_MODE = $save;
1056        print "<hr />Testing GetArray() ";
1057        //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
1058       
1059        $rs = $db->Execute("select * from ADOXYZ order by id");
1060        if ($rs) {
1061                $arr = $rs->GetArray(10);
1062                if (sizeof($arr) != 10 || trim($arr[1][1]) != 'John' || trim($arr[1][2]) != 'Lim') print $arr[1][1].' '.$arr[1][2]."<b> &nbsp; ERROR</b><br>";
1063                else print " OK<BR>";
1064        }
1065       
1066        $arr = $db->GetArray("select x from ADOXYZ");
1067        $e = $db->ErrorMsg(); $e2 = $db->ErrorNo();
1068        echo "Testing error handling, should see illegal column 'x' error=<i>$e ($e2) </i><br>";
1069        if (!$e || !$e2) Err("Error handling did not work");
1070        print "Testing FetchNextObject for 1 object ";
1071        $rs = $db->Execute("select distinct lastname,firstname from ADOXYZ where firstname='Caroline'");
1072        $fcnt = 0;
1073        if ($rs)
1074        while ($o = $rs->FetchNextObject()) {
1075                $fcnt += 1;     
1076        }
1077        if ($fcnt == 1) print " OK<BR>";
1078        else print "<b>FAILED</b><BR>";
1079       
1080        $stmt = $db->Prepare("select * from ADOXYZ where id < 3");
1081        $rs = $db->Execute($stmt);
1082        if (!$rs) Err("Prepare failed");
1083        else {
1084                $arr = $rs->GetArray();
1085                if (!$arr) Err("Prepare failed 2");
1086                if (sizeof($arr) != 2) Err("Prepare failed 3");
1087        }
1088        print "Testing GetAssoc() ";
1089        $savecrecs = $ADODB_COUNTRECS;
1090        $ADODB_COUNTRECS = false;
1091        //$arr = $db->GetArray("select  lastname,firstname from ADOXYZ");
1092        //print_r($arr);
1093        print "<hr />";
1094        $rs = $db->Execute("select distinct lastname,firstname,created from ADOXYZ");
1095       
1096        if ($rs) {
1097                $arr = $rs->GetAssoc();
1098                //print_r($arr);
1099                if (empty($arr['See']) || trim(reset($arr['See'])) != 'Wai Hun') print $arr['See']." &nbsp; <b>ERROR</b><br>";
1100                else print " OK 1";
1101        }
1102       
1103        $arr = $db->GetAssoc("select distinct lastname,firstname from ADOXYZ");
1104        if ($arr) {
1105                //print_r($arr);
1106                if (empty($arr['See']) || trim($arr['See']) != 'Wai Hun') print $arr['See']." &nbsp; <b>ERROR</b><br>";
1107                else print " OK 2<BR>";
1108        }
1109        // Comment this out to test countrecs = false
1110        $ADODB_COUNTRECS = $savecrecs;
1111        $db->debug=1;
1112        $query = $db->Prepare("select count(*) from ADOXYZ");
1113        $rs = $db->CacheExecute(10,$query);
1114        if (reset($rs->fields) != 50) echo Err("$cnt wrong for Prepare/CacheGetOne");
1115       
1116        for ($loop=0; $loop < 1; $loop++) {
1117        print "Testing GetMenu() and CacheExecute<BR>";
1118        $db->debug = true;
1119        $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
1120       
1121       
1122
1123
1124        if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu('menu','Steven').'<BR>';
1125        else print " Fail<BR>";
1126        $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
1127       
1128        if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu('menu','Steven',false).'<BR>';
1129        else print " Fail<BR>";
1130       
1131        $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
1132       
1133        if ($rs) print ' 1st line set to **** , Steven selected: '. $rs->GetMenu('menu','Steven','1st:****').'<BR>';
1134        else print " Fail<BR>";
1135       
1136
1137       
1138        $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
1139        if ($rs) print ' Multiple, Alan selected: '. $rs->GetMenu('menu','Alan',false,true).'<BR>';
1140        else print " Fail<BR>";
1141        print '</p><hr />';
1142       
1143        $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
1144        if ($rs) {
1145                print ' Multiple, Alan and George selected: '. $rs->GetMenu('menu',array('Alan','George'),false,true);
1146                if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
1147        } else print " Fail<BR>";
1148        print '</p><hr />';
1149       
1150        print "Testing GetMenu3()<br>";
1151        $rs = $db->Execute("select ".$db->Concat('firstname',"'-'",'id').",id, lastname from ADOXYZ order by lastname,id");
1152        if ($rs) print "Grouped Menu: ".$rs->GetMenu3('name');
1153        else Err('Grouped Menu GetMenu3()');
1154        print "<hr />";
1155
1156        print "Testing GetMenu2() <BR>";
1157        $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
1158        if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu2('menu',('Oey')).'<BR>';
1159        else print " Fail<BR>";
1160        $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ");
1161        if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu2('menu',('Oey'),false).'<BR>';
1162        else print " Fail<BR>";
1163        }
1164        echo "<h3>CacheExecute</h3>";
1165
1166        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
1167        $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ");
1168        print_r($rs->fields); echo $rs->fetchMode;echo "<br>";
1169        echo $rs->Fields('firstname');
1170       
1171        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
1172        $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ");
1173        print_r($rs->fields);echo "<br>";
1174        echo $rs->Fields('firstname');
1175        $db->debug = false;
1176       
1177        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
1178        // phplens
1179       
1180        $sql = 'select * from ADOXYZ where 0=1';
1181        echo "<p>**Testing '$sql' (phplens compat 1)</p>";
1182        $rs = $db->Execute($sql);
1183        if (!$rs) err( "<b>No recordset returned for '$sql'</b>");
1184        if (!$rs->FieldCount()) err( "<b>No fields returned for $sql</b>");
1185        if (!$rs->FetchField(1)) err( "<b>FetchField failed for $sql</b>");
1186       
1187        $sql = 'select * from ADOXYZ order by 1';
1188        echo "<p>**Testing '$sql' (phplens compat 2)</p>";
1189        $rs = $db->Execute($sql);
1190        if (!$rs) err( "<b>No recordset returned for '$sql'<br>".$db->ErrorMsg()."</b>");
1191       
1192       
1193        $sql = 'select * from ADOXYZ order by 1,1';
1194        echo "<p>**Testing '$sql' (phplens compat 3)</p>";
1195        $rs = $db->Execute($sql);
1196        if (!$rs) err( "<b>No recordset returned for '$sql'<br>".$db->ErrorMsg()."</b>");
1197       
1198       
1199        // Move
1200        $rs1 = $db->Execute("select id from ADOXYZ where id <= 2 order by 1");
1201        $rs2 = $db->Execute("select id from ADOXYZ where id = 3 or id = 4 order by 1");
1202
1203        if ($rs1) $rs1->MoveLast();
1204        if ($rs2) $rs2->MoveLast();
1205       
1206        if (empty($rs1) || empty($rs2) || $rs1->fields[0] != 2 || $rs2->fields[0] != 4) {
1207                $a = $rs1->fields[0];
1208                $b = $rs2->fields[0];
1209                print "<p><b>Error in multiple recordset test rs1=$a rs2=$b (should be rs1=2 rs2=4)</b></p>";
1210        } else
1211                print "<p>Testing multiple recordsets OK</p>";
1212               
1213       
1214        echo "<p> GenID test: ";
1215        for ($i=1; $i <= 10; $i++)
1216                echo  "($i: ",$val = $db->GenID($db->databaseType.'abcseq6' ,5), ") ";
1217        if ($val == 0) Err("GenID not supported");
1218       
1219        if ($val) {
1220                $db->DropSequence('abc_seq2');
1221                $db->CreateSequence('abc_seq2');
1222                $val = $db->GenID('abc_seq2');
1223                $db->DropSequence('abc_seq2');
1224                $db->CreateSequence('abc_seq2');
1225                $val = $db->GenID('abc_seq2');
1226                if ($val != 1) Err("Drop and Create Sequence not supported ($val)");
1227        }
1228        echo "<p>";
1229       
1230        if (substr($db->dataProvider,0,3) != 'notused') { // used to crash ado
1231                $sql = "select firstnames from ADOXYZ";
1232                print "<p>Testing execution of illegal statement: <i>$sql</i></p>";
1233                if ($db->Execute($sql) === false) {
1234                        print "<p>This returns the following ErrorMsg(): <i>".$db->ErrorMsg()."</i> and ErrorNo(): ".$db->ErrorNo().'</p>';
1235                } else
1236                        print "<p><b>Error in error handling -- Execute() should return false</b></p>";
1237        } else
1238                print "<p><b>ADO skipped error handling of bad select statement</b></p>";
1239       
1240        print "<p>ASSOC TEST 2<br>";
1241        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
1242        $rs = $db->query('select * from ADOXYZ order by id');
1243        if ($ee = $db->ErrorMsg()) {
1244                Err("Error message=$ee");
1245        }
1246        if ($ee = $db->ErrorNo()) {
1247                Err("Error No = $ee");
1248        }
1249        print_r($rs->fields);
1250        for($i=0;$i<$rs->FieldCount();$i++)
1251        {
1252                $fld=$rs->FetchField($i);
1253                print "<br> Field name is ".$fld->name;
1254                print " ".$rs->Fields($fld->name);
1255        }
1256
1257               
1258        print "<p>BOTH TEST 2<br>";
1259        if ($db->dataProvider == 'ado') {
1260                print "<b>ADODB_FETCH_BOTH not supported</b> for dataProvider=".$db->dataProvider."<br>";
1261        } else {
1262                $ADODB_FETCH_MODE = ADODB_FETCH_BOTH;
1263                $rs = $db->query('select * from ADOXYZ order by id');
1264                for($i=0;$i<$rs->FieldCount();$i++)
1265                {
1266                        $fld=$rs->FetchField($i);
1267                        print "<br> Field name is ".$fld->name;
1268                        print " ".$rs->Fields($fld->name);
1269                }
1270        }
1271       
1272        print "<p>NUM TEST 2<br>";
1273        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
1274        $rs = $db->query('select * from ADOXYZ order by id');
1275        for($i=0;$i<$rs->FieldCount();$i++)
1276        {
1277                $fld=$rs->FetchField($i);
1278                print "<br> Field name is ".$fld->name;
1279                print " ".$rs->Fields($fld->name);
1280        }
1281       
1282        print "<p>ASSOC Test of SelectLimit<br>";
1283        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
1284        $rs = $db->selectlimit('select * from ADOXYZ order by id',3,4);
1285        $cnt = 0;
1286        while ($rs && !$rs->EOF) {
1287                $cnt += 1;
1288                if (!isset($rs->fields['firstname'])) {
1289                        print "<br><b>ASSOC returned numeric field</b></p>";
1290                        break;
1291                }
1292                $rs->MoveNext();
1293        }
1294        if ($cnt != 3) print "<br><b>Count should be 3, instead it was $cnt</b></p>";
1295       
1296       
1297        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
1298        if ($db->sysDate) {
1299                $saved = $db->debug;
1300                $db->debug = 1;
1301                $rs = $db->Execute("select {$db->sysDate} from ADOXYZ where id=1");
1302                if (ADORecordSet::UnixDate(date('Y-m-d')) != $rs->UnixDate($rs->fields[0])) {
1303                        print "<p><b>Invalid date {$rs->fields[0]}</b></p>";
1304                } else
1305                        print "<p>Passed \$sysDate test ({$rs->fields[0]})</p>";
1306               
1307                print_r($rs->FetchField(0));
1308                print time();
1309                $db->debug=$saved;
1310        } else {
1311                print "<p><b>\$db->sysDate not defined</b></p>";
1312        }
1313
1314        print "<p>Test CSV</p>";
1315        include_once('../toexport.inc.php');
1316        //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
1317        $rs = $db->SelectLimit('select id,firstname,lastname,created,\'He, he\' he,\'"\' q  from ADOXYZ',10);   
1318       
1319        print "<pre>";
1320        print rs2csv($rs);
1321        print "</pre>";
1322       
1323        $rs = $db->SelectLimit('select id,firstname,lastname,created,\'The      "young man", he said\' from ADOXYZ',10);       
1324       
1325        if (PHP_VERSION < 5) {
1326                print "<pre>";
1327                rs2tabout($rs);
1328                print "</pre>";
1329        }
1330        print " CacheFlush ";
1331        $db->CacheFlush();
1332       
1333        $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A');
1334        $sql = "SELECT $date from ADOXYZ";
1335        print "<p>Test SQLDate: ".htmlspecialchars($sql)."</p>";
1336        $rs = $db->SelectLimit($sql,1);
1337        $d = date('d-m-M-Y-').'Q'.(ceil(date('m')/3.0)).date(' h:i:s A');
1338        if (!$rs) Err("SQLDate query returned no recordset");
1339        else if ($d != $rs->fields[0]) Err("SQLDate 1 failed expected: <br>act:$d <br>sql:".$rs->fields[0]);
1340       
1341        $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A',$db->DBDate("1974-02-25"));
1342        $sql = "SELECT $date from ADOXYZ";
1343        print "<p>Test SQLDate: ".htmlspecialchars($sql)."</p>";
1344        $db->debug=1;
1345        $rs = $db->SelectLimit($sql,1);
1346        $ts = ADOConnection::UnixDate('1974-02-25');
1347        $d = date('d-m-M-Y-',$ts).'Q'.(ceil(date('m',$ts)/3.0)).date(' h:i:s A',$ts);
1348        if (!$rs) {
1349                Err("SQLDate query returned no recordset");
1350                echo $db->ErrorMsg(),'<br>';
1351        } else if ($d != reset($rs->fields)) {
1352                Err("SQLDate 2 failed expected: <br>act:$d <br>sql:".$rs->fields[0].' <br>'.$db->ErrorMsg());
1353        }
1354       
1355       
1356        print "<p>Test Filter</p>";
1357        $db->debug = 1;
1358       
1359        $rs = $db->SelectLimit('select * from ADOXYZ where id < 3 order by id');
1360       
1361        $rs = RSFilter($rs,'do_strtolower');
1362        if (trim($rs->fields[1]) != 'caroline'  && trim($rs->fields[2]) != 'miranda') {
1363                err('**** RSFilter failed');
1364                print_r($rs->fields);
1365        }
1366       
1367        rs2html($rs);
1368               
1369        $db->debug=1;
1370       
1371       
1372        print "<p>Test Replace</p>";
1373       
1374        $ret = $db->Replace('ADOXYZ',
1375                array('id'=>1,'firstname'=>'Caroline','lastname'=>'Miranda'),
1376                array('id'),
1377                $autoq = true);
1378        if (!$ret) echo "<p>Error in replacing existing record</p>";
1379        else {
1380                $saved = $db->debug;
1381                $db->debug = 0;
1382                $savec = $ADODB_COUNTRECS;
1383                $ADODB_COUNTRECS = true;
1384                $rs = $db->Execute('select * FROM ADOXYZ where id=1');
1385                $db->debug = $saved;
1386                if ($rs->RecordCount() != 1) {
1387                        $cnt = $rs->RecordCount();
1388                        rs2html($rs);
1389                        print "<b>Error - Replace failed, count=$cnt</b><p>";
1390                }
1391                $ADODB_COUNTRECS = $savec;
1392        }
1393        $ret = $db->Replace('ADOXYZ',
1394                array('id'=>1000,'firstname'=>'Harun','lastname'=>'Al-Rashid'),
1395                array('id','firstname'),
1396                $autoq = true);
1397        if ($ret != 2) print "<b>Replace failed: </b>";
1398        print "test A return value=$ret (2 expected) <p>";
1399       
1400        $ret = $db->Replace('ADOXYZ',
1401                array('id'=>1000,'firstname'=>'Sherazade','lastname'=>'Al-Rashid'),
1402                'id',
1403                $autoq = true);
1404        if ($ret != 1)
1405                if ($db->dataProvider == 'ibase' && $ret == 2);
1406                else print "<b>Replace failed: </b>";
1407        print "test B return value=$ret (1 or if ibase then 2 expected) <p>";
1408       
1409        print "<h3>rs2rs Test</h3>";
1410       
1411        $rs = $db->Execute('select * from ADOXYZ where id>= 1 order by id');
1412        $rs = $db->_rs2rs($rs);
1413        $rs->valueX = 'X';
1414        $rs->MoveNext();
1415        $rs = $db->_rs2rs($rs);
1416        if (!isset($rs->valueX)) err("rs2rs does not preserve array recordsets");
1417        if (reset($rs->fields) != 1) err("rs2rs does not move to first row: id=".reset($rs->fields));
1418
1419        /////////////////////////////////////////////////////////////
1420        include_once('../pivottable.inc.php');
1421        print "<h3>Pivot Test</h3>";
1422        $db->debug=true;
1423        $sql = PivotTableSQL(
1424                $db,                    # adodb connection
1425                'ADOXYZ',               # tables
1426                'firstname',    # row fields
1427                'lastname',             # column fields
1428                false,                  # join
1429                'ID',                   # sum
1430                'Sum ',                 # label for sum
1431                'sum',                  # aggregate function
1432                true
1433        );
1434        $rs = $db->Execute($sql);
1435        if ($rs) rs2html($rs);
1436        else Err("Pivot sql error");
1437       
1438        $pear = true; //true;
1439        $db->debug=false;
1440       
1441        if ($pear) {
1442        // PEAR TESTS BELOW
1443        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
1444       
1445        include_once "PEAR.php";
1446        $rs = $db->query('select * from ADOXYZ where id>0 and id<10 order by id');
1447       
1448        $i = 0;
1449        if ($rs && !$rs->EOF) {
1450                while ($arr = $rs->fetchRow()) {
1451                        $i++;
1452                        //print "$i ";
1453                        if ($arr[0] != $i) {
1454                                print_r($arr);
1455                                print "<p><b>PEAR DB emulation error 1.</b></p>";
1456                                $pear = false;
1457                                break;
1458                        }
1459                }
1460                $rs->Close();
1461        }
1462       
1463       
1464        if ($i != $db->GetOne('select count(*) from ADOXYZ where id>0 and id<10')) {
1465                print "<p><b>PEAR DB emulation error 1.1 EOF ($i)</b></p>";
1466                $pear = false;
1467        }
1468       
1469        $rs = $db->limitQuery('select * from ADOXYZ where id>0 order by id',$i=3,$top=3);
1470        $i2 = $i;
1471        if ($rs && !$rs->EOF) {
1472
1473                while (!is_object($rs->fetchInto($arr))) {
1474                        $i2++;
1475                       
1476        //                      print_r($arr);
1477        //              print "$i ";print_r($arr);
1478                        if ($arr[0] != $i2) {
1479                                print "<p><b>PEAR DB emulation error 2.</b></p>";
1480                                $pear = false;
1481                                break;
1482                        }
1483                }
1484                $rs->Close();
1485        }
1486        if ($i2 != $i+$top) {
1487                print "<p><b>PEAR DB emulation error 2.1 EOF (correct=$i+$top, actual=$i2)</b></p>";
1488                $pear = false;
1489        }
1490        }
1491        if ($pear) print "<p>PEAR DB emulation passed.</p>";
1492        flush();
1493
1494       
1495        $rs = $db->SelectLimit("select ".$db->sysDate." from ADOXYZ",1);
1496        $date = $rs->fields[0];
1497        if (!$date) Err("Bad sysDate");
1498        else {
1499                $ds = $db->UserDate($date,"d m Y");
1500                if ($ds != date("d m Y")) Err("Bad UserDate: ".$ds.' expected='.date("d m Y"));
1501                else echo "Passed UserDate: $ds<p>";
1502        }
1503        $db->debug=1;
1504        if ($db->dataProvider == 'oci8')
1505                $rs = $db->SelectLimit("select to_char(".$db->sysTimeStamp.",'YYYY-MM-DD HH24:MI:SS') from ADOXYZ",1);
1506        else
1507                $rs = $db->SelectLimit("select ".$db->sysTimeStamp." from ADOXYZ",1);
1508        $date = $rs->fields[0];
1509        if (!$date) Err("Bad sysTimeStamp");
1510        else {
1511                $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y");
1512                if ($ds != date("H \\h\\r\\s-d m Y")) Err("Bad UserTimeStamp: ".$ds.", correct is ".date("H \\h\\r\\s-d m Y"));
1513                else echo "Passed UserTimeStamp: $ds<p>";
1514               
1515                $date = 100;
1516                $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y");
1517                $ds2 = date("H \\h\\r\\s-d m Y",$date);
1518                if ($ds != $ds2) Err("Bad UserTimeStamp 2: $ds: $ds2");
1519                else echo "Passed UserTimeStamp 2: $ds<p>";
1520        }
1521        flush();
1522       
1523        if ($db->hasTransactions) {
1524                $db->debug=1;
1525                echo "<p>Testing StartTrans CompleteTrans</p>";
1526                $db->raiseErrorFn = false;
1527               
1528                $db->SetTransactionMode('SERIALIZABLE');
1529                $db->StartTrans();
1530                $rs = $db->Execute('select * from notable');
1531                        $db->StartTrans();
1532                                $db->BeginTrans();
1533                        $db->Execute("update ADOXYZ set firstname='Carolx' where id=1");
1534                                $db->CommitTrans();
1535                        $db->CompleteTrans();
1536                $rez = $db->CompleteTrans();
1537                $db->SetTransactionMode('');
1538                $db->debug=0;
1539                if ($rez !== false) {
1540                        if (is_null($rez)) Err("Error: _transOK not modified");
1541                        else Err("Error: CompleteTrans (1) should have failed");
1542                } else {
1543                        $name = $db->GetOne("Select firstname from ADOXYZ where id=1");
1544                        if ($name == "Carolx") Err("Error: CompleteTrans (2) should have failed");
1545                        else echo "<p> -- Passed StartTrans test1 - rolling back</p>";
1546                }
1547               
1548                $db->StartTrans();
1549                        $db->BeginTrans();
1550                $db->Execute("update ADOXYZ set firstname='Carolx' where id=1");
1551                        $db->RollbackTrans();
1552                $rez = $db->CompleteTrans();
1553                if ($rez !== true) Err("Error: CompleteTrans (1) should have succeeded");
1554                else {
1555                        $name = $db->GetOne("Select firstname from ADOXYZ where id=1");
1556                        if (trim($name) != "Carolx") Err("Error: CompleteTrans (2) should have succeeded, returned name=$name");
1557                        else echo "<p> -- Passed StartTrans test2 - commiting</p>";
1558                }
1559        }
1560        flush();
1561        $saved = $db->debug;
1562        $db->debug=1;
1563        $cnt = _adodb_getcount($db, 'select * from ADOXYZ where firstname in (select firstname from ADOXYZ)');
1564        echo "<b>Count=</b> $cnt";
1565        $db->debug=$saved;
1566       
1567        global $TESTERRS;
1568        $debugerr = true;
1569       
1570        global $ADODB_LANG;$ADODB_LANG = 'fr';
1571        $db->debug = false;
1572        $TESTERRS = 0;
1573        $db->raiseErrorFn = 'adodb_test_err';
1574        global $ERRNO; // from adodb_test_err
1575        $db->Execute('select * from nowhere');
1576        $metae = $db->MetaError($ERRNO);
1577        if ($metae !== DB_ERROR_NOSUCHTABLE) print "<p><b>MetaError=".$metae." wrong</b>, should be ".DB_ERROR_NOSUCHTABLE."</p>";
1578        else print "<p>MetaError ok (".DB_ERROR_NOSUCHTABLE."): ".$db->MetaErrorMsg($metae)."</p>";
1579        if ($TESTERRS != 1) print "<b>raiseErrorFn select nowhere failed</b><br>";
1580        $rs = $db->Execute('select * from ADOXYZ');
1581        if ($debugerr) print " Move";
1582        $rs->Move(100);
1583        $rs->_queryID = false;
1584        if ($debugerr) print " MoveNext";
1585        $rs->MoveNext();
1586        if ($debugerr) print " $rs=false";
1587        $rs = false;
1588
1589        flush();
1590       
1591        print "<p>SetFetchMode() tests</p>";
1592        $db->SetFetchMode(ADODB_FETCH_ASSOC);
1593        $rs = $db->SelectLimit('select firstname from ADOXYZ',1);
1594        if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC");
1595       
1596        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;   
1597        $rs = $db->SelectLimit('select firstname from ADOXYZ',1);
1598        //var_dump($rs->fields);
1599        if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC");
1600       
1601        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 
1602        $db->SetFetchMode(ADODB_FETCH_NUM);
1603        $rs = $db->SelectLimit('select firstname from ADOXYZ',1);
1604        if (!isset($rs->fields[0])) Err("BAD FETCH NUM");
1605       
1606        flush();
1607       
1608        print "<p>Test MetaTables again with SetFetchMode()</p>";
1609        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
1610        $db->SetFetchMode(ADODB_FETCH_ASSOC);
1611        print_r($db->MetaTables());
1612        print "<p>";
1613       
1614        ////////////////////////////////////////////////////////////////////
1615       
1616        print "<p>Testing Bad Connection</p>";
1617        flush();
1618       
1619        if (true || PHP_VERSION < 5)  {
1620                if ($db->dataProvider == 'odbtp') $db->databaseType = 'odbtp';
1621                $conn = NewADOConnection($db->databaseType);
1622                $conn->raiseErrorFn = 'adodb_test_err';
1623                if (1) $conn->PConnect('abc','baduser','badpassword');
1624                if ($TESTERRS == 2) print "raiseErrorFn tests passed<br>";
1625                else print "<b>raiseErrorFn tests failed ($TESTERRS)</b><br>";
1626               
1627                flush();
1628        }
1629        ////////////////////////////////////////////////////////////////////
1630       
1631        global $nocountrecs;
1632       
1633        if (isset($nocountrecs) && $ADODB_COUNTRECS) err("Error: \$ADODB_COUNTRECS is set");
1634        if (empty($nocountrecs) && $ADODB_COUNTRECS==false) err("Error: \$ADODB_COUNTRECS is not set");
1635
1636        flush();
1637?>
1638        </p>
1639        <table width=100% ><tr><td bgcolor=beige>&nbsp;</td></tr></table>
1640        </p></form>
1641<?php
1642
1643        if ($rs1) $rs1->Close();
1644        if ($rs2) $rs2->Close();
1645        if ($rs) $rs->Close();
1646        $db->Close();
1647       
1648        if ($db->transCnt != 0) Err("Error in transCnt=$db->transCnt (should be 0)");
1649       
1650       
1651        printf("<p>Total queries=%d; total cached=%d</p>",$EXECS+$CACHED, $CACHED);
1652        flush();
1653}
1654
1655function adodb_test_err($dbms, $fn, $errno, $errmsg, $p1=false, $p2=false)
1656{
1657global $TESTERRS,$ERRNO;
1658
1659        $ERRNO = $errno;
1660        $TESTERRS += 1;
1661        print "<i>** $dbms ($fn): errno=$errno &nbsp; errmsg=$errmsg ($p1,$p2)</i><br>";
1662}
1663
1664//--------------------------------------------------------------------------------------
1665
1666
1667@set_time_limit(240); // increase timeout
1668
1669include("../tohtml.inc.php");
1670include("../adodb.inc.php");
1671include("../rsfilter.inc.php");
1672
1673/* White Space Check */
1674
1675if (isset($_SERVER['argv'][1])) {
1676        //print_r($_SERVER['argv']);
1677        $_GET[$_SERVER['argv'][1]] = 1;
1678}
1679
1680if (@$_SERVER['COMPUTERNAME'] == 'TIGRESS') {
1681        CheckWS('mysqlt');
1682        CheckWS('postgres');
1683        CheckWS('oci8po');
1684       
1685        CheckWS('firebird');
1686        CheckWS('sybase');
1687        if (!ini_get('safe_mode')) CheckWS('informix');
1688
1689        CheckWS('ado_mssql');
1690        CheckWS('ado_access');
1691        CheckWS('mssql');
1692       
1693        CheckWS('vfp');
1694        CheckWS('sqlanywhere');
1695        CheckWS('db2');
1696        CheckWS('access');
1697        CheckWS('odbc_mssql');
1698        CheckWS('firebird15');
1699        //
1700        CheckWS('oracle');
1701        CheckWS('proxy');
1702        CheckWS('fbsql');
1703        print "White Space Check complete<p>";
1704}
1705if (sizeof($_GET) == 0) $testmysql = true;
1706
1707
1708foreach($_GET as $k=>$v)  {
1709        //global $$k;
1710        $$k = $v;
1711}       
1712if (strpos(PHP_VERSION,'5') === 0) {
1713        //$testaccess=1;
1714        //$testmssql = 1;
1715        //$testsqlite=1;
1716}
1717?>
1718<html>
1719<title>ADODB Testing</title>
1720<body bgcolor=white>
1721<H1>ADODB Test</H1>
1722
1723This script tests the following databases: Interbase, Oracle, Visual FoxPro, Microsoft Access (ODBC and ADO), MySQL, MSSQL (ODBC, native, ADO).
1724There is also support for Sybase, PostgreSQL.</p>
1725For the latest version of ADODB, visit <a href=http://adodb.sourceforge.net/>adodb.sourceforge.net</a>.</p>
1726
1727Test <a href=test4.php>GetInsertSQL/GetUpdateSQL</a> &nbsp;
1728        <a href=testsessions.php>Sessions</a> &nbsp;
1729        <a href=testpaging.php>Paging</a> &nbsp;
1730        <a href=test-perf.php>Perf Monitor</a><p>
1731<?php
1732include('./testdatabases.inc.php');
1733
1734echo "<br>vers=",ADOConnection::Version();
1735
1736
1737include_once('../adodb-time.inc.php');
1738if (isset($_GET['time'])) adodb_date_test();
1739
1740?>
1741<p><i>ADODB Database Library  (c) 2000-2007 John Lim. All rights reserved. Released under BSD and LGPL, PHP <?php echo PHP_VERSION ?>.</i></p>
1742</body>
1743</html>
Note: See TracBrowser for help on using the repository browser.