00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 error_reporting(E_ALL);
00013
00014 $ADODB_FLUSH = true;
00015
00016 define('ADODB_ASSOC_CASE',0);
00017
00018
00019 function getmicrotime()
00020 {
00021 $t = microtime();
00022 $t = explode(' ',$t);
00023 return (float)$t[1]+ (float)$t[0];
00024 }
00025
00026
00027 if (PHP_VERSION < 5) include_once('../adodb-pear.inc.php');
00028
00029
00030
00031 function Err($msg)
00032 {
00033 print "<b>$msg</b><br>";
00034 flush();
00035 }
00036
00037 function CheckWS($conn)
00038 {
00039 global $ADODB_EXTENSION;
00040
00041 include_once('../session/adodb-session.php');
00042 if (defined('CHECKWSFAIL')){ echo " TESTING $conn ";flush();}
00043 $saved = $ADODB_EXTENSION;
00044 $db = ADONewConnection($conn);
00045 $ADODB_EXTENSION = $saved;
00046 if (headers_sent()) {
00047 print "<p><b>White space detected in adodb-$conn.inc.php or include file...</b></p>";
00048
00049 }
00050 }
00051
00052 function do_strtolower(&$arr)
00053 {
00054 foreach($arr as $k => $v) {
00055 if (is_object($v)) $arr[$k] = adodb_pr($v,true);
00056 else $arr[$k] = strtolower($v);
00057 }
00058 }
00059
00060
00061 function CountExecs($db, $sql, $inputarray)
00062 {
00063 global $EXECS; $EXECS++;
00064 }
00065
00066 function CountCachedExecs($db, $secs2cache, $sql, $inputarray)
00067 {
00068 global $CACHED; $CACHED++;
00069 }
00070
00071
00072
00073
00074 function testdb(&$db,$createtab="create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)")
00075 {
00076 GLOBAL $ADODB_vers,$ADODB_CACHE_DIR,$ADODB_FETCH_MODE,$ADODB_COUNTRECS;
00077
00078 ?> <form method=GET>
00079 </p>
00080 <table width=100% ><tr><td bgcolor=beige> </td></tr></table>
00081 </p>
00082 <?php
00083 $create =false;
00084
00085
00086
00087
00088
00089
00090
00091 if (!$db) die("testdb: database not inited");
00092 GLOBAL $EXECS, $CACHED;
00093
00094 $EXECS = 0;
00095 $CACHED = 0;
00096
00097 if ((rand()%3) == 0) @$db->Execute("delete from adodb_logsql");
00098 $db->debug=1;
00099
00100 $db->fnExecute = 'CountExecs';
00101 $db->fnCacheExecute = 'CountCachedExecs';
00102
00103 if (empty($_GET['nolog'])) {
00104 echo "<h3>SQL Logging enabled</h3>";
00105 $db->LogSQL();
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 }
00117 $ADODB_CACHE_DIR = dirname(TempNam('/tmp','testadodb'));
00118 $db->debug = false;
00119
00120
00121 $phpv = phpversion();
00122 if (defined('ADODB_EXTENSION')) $ext = ' Extension '.ADODB_EXTENSION.' installed';
00123 else $ext = '';
00124 print "<h3>ADODB Version: $ADODB_vers Host: <i>$db->host</i> Database: <i>$db->database</i> PHP: $phpv $ext</h3>";
00125 flush();
00126
00127
00128 $arr = $db->ServerInfo();
00129 print_r($arr);
00130 echo "<br>";
00131 $e = error_reporting(E_ALL-E_WARNING);
00132 flush();
00133 #$db->debug=1;
00134 $tt = $db->Time();
00135 if ($tt == 0) echo '<br><b>$db->Time failed</b>';
00136 else echo "<br>db->Time: ".date('d-m-Y H:i:s',$tt);
00137 echo '<br>';
00138
00139 echo "Date=",$db->UserDate('2002-04-07'),'<br>';
00140 print "<i>date1</i> (1969-02-20) = ".$db->DBDate('1969-2-20');
00141 print "<br><i>date1</i> (1999-02-20) = ".$db->DBDate('1999-2-20');
00142 print "<br><i>date1.1</i> 1999 = ".$db->DBDate("'1999'");
00143 print "<br><i>date2</i> (1970-1-2) = ".$db->DBDate(24*3600)."<p>";
00144 print "<i>ts1</i> (1999-02-20 13:40:50) = ".$db->DBTimeStamp('1999-2-20 1:40:50 pm');
00145 print "<br><i>ts1.1</i> (1999-02-20 13:40:00) = ".$db->DBTimeStamp('1999-2-20 13:40');
00146 print "<br><i>ts2</i> (1999-02-20) = ".$db->DBTimeStamp('1999-2-20');
00147 print "<br><i>ts3</i> (1970-1-2 +/- timezone) = ".$db->DBTimeStamp(24*3600);
00148 print "<br> Fractional TS (1999-2-20 13:40:50.91): ".$db->DBTimeStamp($db->UnixTimeStamp('1999-2-20 13:40:50.91+1'));
00149 $dd = $db->UnixDate('1999-02-20');
00150 print "<br>unixdate</i> 1999-02-20 = ".date('Y-m-d',$dd)."<p>";
00151 print "<br><i>ts4</i> =".($db->UnixTimeStamp("19700101000101")+8*3600);
00152 print "<br><i>ts5</i> =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123"));
00153 print "<br><i>ts6</i> =".$db->UserTimeStamp("20040110092123");
00154 print "<br><i>ts7</i> =".$db->DBTimeStamp("20040110092123");
00155 flush();
00156
00157 if (false && $db->databaseType != 'mssql') {
00158 print "<p>Testing bad connection. Ignore following error msgs:<br>";
00159 $db2 = ADONewConnection();
00160 $rez = $db2->Connect("bad connection");
00161 $err = $db2->ErrorMsg();
00162 print "<i>Error='$err'</i></p>";
00163 if ($rez) print "<b>Cannot check if connection failed.</b> The Connect() function returned true.</p>";
00164 }
00165 error_reporting($e);
00166 flush();
00167
00168
00169 $rs=$db->Execute('select * from adoxyz order by id');
00170 if($rs === false) $create = true;
00171 else $rs->Close();
00172
00173
00174
00175 if ($create) {
00176 if (false && $db->databaseType == 'ibase') {
00177 print "<b>Please create the following table for testing:</b></p>$createtab</p>";
00178 return;
00179 } else {
00180 $db->debug = 99;
00181 $e = error_reporting(E_ALL-E_WARNING);
00182 $db->Execute($createtab);
00183 error_reporting($e);
00184 }
00185 }
00186 error_reporting(E_ALL);
00187 echo "<p>Testing Metatypes</p>";
00188 $t = $db->MetaType('varchar');
00189 if ($t != 'C') Err("Bad Metatype for varchar");
00190
00191 $rs = &$db->Execute("delete from ADOXYZ");
00192 if ($rs) {
00193 if(! $rs->EOF) print "<b>Error: </b>RecordSet returned by Execute('delete...') should show EOF</p>";
00194 $rs->Close();
00195 } else print "err=".$db->ErrorMsg();
00196
00197 print "<p>Test select on empty table, FetchField when EOF, and GetInsertSQL</p>";
00198 $rs = &$db->Execute("select id,firstname from ADOXYZ where id=9999");
00199 if ($rs && !$rs->EOF) print "<b>Error: </b>RecordSet returned by Execute(select...') on empty table should show EOF</p>";
00200 if ($rs->EOF && (($ox = $rs->FetchField(0)) && !empty($ox->name))) {
00201 $record['id'] = 99;
00202 $record['firstname'] = 'John';
00203 $sql = $db->GetInsertSQL($rs, $record);
00204 if (strtoupper($sql) != strtoupper("INSERT INTO ADOXYZ ( id, firstname ) VALUES ( 99, 'John' )")) Err("GetInsertSQL does not work on empty table: $sql");
00205 } else {
00206 Err("FetchField does not work on empty recordset, meaning GetInsertSQL will fail...");
00207 }
00208 if ($rs) $rs->Close();
00209 flush();
00210
00211 print "<p>Testing Commit: ";
00212 $time = $db->DBDate(time());
00213 if (!$db->BeginTrans()) {
00214 print '<b>Transactions not supported</b></p>';
00215 if ($db->hasTransactions) Err("hasTransactions should be false");
00216 } else {
00217 if (!$db->hasTransactions) Err("hasTransactions should be true");
00218 if ($db->transCnt != 1) Err("Invalid transCnt = $db->transCnt (should be 1)");
00219 $rs = $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (99,'Should Not','Exist (Commit)',$time)");
00220 if ($rs && $db->CommitTrans()) {
00221 $rs->Close();
00222 $rs = &$db->Execute("select * from ADOXYZ where id=99");
00223 if ($rs === false || $rs->EOF) {
00224 print '<b>Data not saved</b></p>';
00225 $rs = &$db->Execute("select * from ADOXYZ where id=99");
00226 print_r($rs);
00227 die();
00228 } else print 'OK</p>';
00229 if ($rs) $rs->Close();
00230 } else {
00231 if (!$rs) {
00232 print "<b>Insert failed</b></p>";
00233 $db->RollbackTrans();
00234 } else print "<b>Commit failed</b></p>";
00235 }
00236 if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)");
00237
00238
00239 if (!$db->BeginTrans()) print "<p><b>Error in BeginTrans</b>()</p>";
00240 print "<p>Testing Rollback: ";
00241 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (100,'Should Not','Exist (Rollback)',$time)");
00242 if ($db->RollbackTrans()) {
00243 $rs = $db->Execute("select * from ADOXYZ where id=100");
00244 if ($rs && !$rs->EOF) print '<b>Fail: Data should rollback</b></p>';
00245 else print 'OK</p>';
00246 if ($rs) $rs->Close();
00247 } else
00248 print "<b>Commit failed</b></p>";
00249
00250 $rs = &$db->Execute('delete from ADOXYZ where id>50');
00251 if ($rs) $rs->Close();
00252
00253 if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)");
00254 }
00255
00256 if (1) {
00257 print "<p>Testing MetaDatabases()</p>";
00258 print_r( $db->MetaDatabases());
00259
00260 print "<p>Testing MetaTables() and MetaColumns()</p>";
00261 $a = $db->MetaTables();
00262 if ($a===false) print "<b>MetaTables not supported</b></p>";
00263 else {
00264 print "Array of tables and views: ";
00265 foreach($a as $v) print " ($v) ";
00266 print '</p>';
00267 }
00268
00269 $a = $db->MetaTables('VIEW');
00270 if ($a===false) print "<b>MetaTables not supported (views)</b></p>";
00271 else {
00272 print "Array of views: ";
00273 foreach($a as $v) print " ($v) ";
00274 print '</p>';
00275 }
00276
00277 $a = $db->MetaTables(false,false,'aDo%');
00278 if ($a===false) print "<b>MetaTables not supported (mask)</b></p>";
00279 else {
00280 print "Array of ado%: ";
00281 foreach($a as $v) print " ($v) ";
00282 print '</p>';
00283 }
00284
00285 $a = $db->MetaTables('TABLE');
00286 if ($a===false) print "<b>MetaTables not supported</b></p>";
00287 else {
00288 print "Array of tables: ";
00289 foreach($a as $v) print " ($v) ";
00290 print '</p>';
00291 }
00292
00293 $db->debug=0;
00294 $rez = $db->MetaColumns("NOSUCHTABLEHERE");
00295 if ($rez !== false) {
00296 Err("MetaColumns error handling failed");
00297 var_dump($rez);
00298 }
00299 $db->debug=1;
00300 $a = $db->MetaColumns('ADOXYZ');
00301 if ($a===false) print "<b>MetaColumns not supported</b></p>";
00302 else {
00303 print "<p>Columns of ADOXYZ: <font size=1><br>";
00304 foreach($a as $v) {print_r($v); echo "<br>";}
00305 echo "</font>";
00306 }
00307
00308 print "<p>Testing MetaIndexes</p>";
00309
00310 $a = $db->MetaIndexes(('ADOXYZ'),true);
00311 if ($a===false) print "<b>MetaIndexes not supported</b></p>";
00312 else {
00313 print "<p>Indexes of ADOXYZ: <font size=1><br>";
00314 adodb_pr($a);
00315 echo "</font>";
00316 }
00317 print "<p>Testing MetaPrimaryKeys</p>";
00318 $a = $db->MetaPrimaryKeys('ADOXYZ');
00319 var_dump($a);
00320 }
00321 $rs = &$db->Execute('delete from ADOXYZ');
00322 if ($rs) $rs->Close();
00323
00324 $db->debug = false;
00325
00326
00327 switch ($db->databaseType) {
00328 case 'vfp':
00329
00330 if (0) {
00331
00332 $rs = $db->Execute("select data from memo");
00333 rs2html($rs);
00334 }
00335 break;
00336
00337 case 'postgres7':
00338 case 'postgres64':
00339 case 'postgres':
00340 case 'ibase':
00341 print "<p>Encode=".$db->BlobEncode("abc\0d\"'
00342 ef")."</p>";
00343
00344 print "<p>Testing Foreign Keys</p>";
00345 $arr = $db->MetaForeignKeys('adoxyz',false,true);
00346 print_r($arr);
00347 if (!$arr) Err("No MetaForeignKeys");
00348 break;
00349
00350 case 'odbc_mssql':
00351 case 'mssqlpo':
00352 print "<p>Testing Foreign Keys</p>";
00353 $arr = $db->MetaForeignKeys('Orders',false,true);
00354 print_r($arr);
00355 if (!$arr) Err("Bad MetaForeignKeys");
00356 if ($db->databaseType == 'odbc_mssql') break;
00357
00358 case 'mssql':
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391 print "<h4>Testing Stored Procedures for mssql</h4>";
00392 $saved = $db->debug;
00393 $db->debug=true;
00394 $assoc = $ADODB_FETCH_MODE;
00395 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
00396 $cmd = $db->PrepareSP('ADODBTestSP');
00397 $ss = "You should see me in the output.";
00398 $db->InParameter($cmd,$ss,'a');
00399 $rs = $db->Execute($cmd);
00400 #var_dump($rs->fields);
00401 echo $rs->fields['T']." --- ".$rs->fields['A']."---<br>";
00402
00403 $cat = 'Dairy Products';
00404 $yr = '1998';
00405
00406 $stmt = $db->PrepareSP('SalesByCategory');
00407 $db->InParameter($stmt,$cat,'CategoryName');
00408 $db->InParameter($stmt,$yr,'OrdYear');
00409 $rs = $db->Execute($stmt);
00410 rs2html($rs);
00411
00412 $cat = 'Grains/Cereals';
00413 $yr = 1998;
00414
00415 $stmt = $db->PrepareSP('SalesByCategory');
00416 $db->InParameter($stmt,$cat,'CategoryName');
00417 $db->InParameter($stmt,$yr,'OrdYear');
00418 $rs = $db->Execute($stmt);
00419 rs2html($rs);
00420
00421 $ADODB_FETCH_MODE = $assoc;
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437 $db->debug=1;
00438 $stmt = $db->PrepareSP('at_date_interval');
00439 $days = 10;
00440 $begin_date = '';
00441 $end_date = '';
00442 $db->InParameter($stmt,$days,'days', 4, SQLINT4);
00443 $db->OutParameter($stmt,$begin_date,'start', 20, SQLVARCHAR );
00444 $db->OutParameter($stmt,$end_date,'end', 20, SQLVARCHAR );
00445 $db->Execute($stmt);
00446 if (empty($begin_date) or empty($end_date) or $begin_date == $end_date) {
00447 Err("MSSQL SP Test for OUT Failed");
00448 print "begin=$begin_date end=$end_date<p>";
00449 } else print "(Today +10days) = (begin=$begin_date end=$end_date)<p>";
00450
00451 $db->debug = $saved;
00452 break;
00453 case 'oci8':
00454 case 'oci8po':
00455
00456 if (0) {
00457 $t = getmicrotime();
00458 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
00459 $arr = $db->GetArray('select * from abalone_tree');
00460 $arr = $db->GetArray('select * from abalone_tree');
00461 $arr = $db->GetArray('select * from abalone_tree');
00462 echo "<p>t = ",getmicrotime() - $t,"</p>";
00463 die();
00464 }
00465
00466 # cleanup
00467 $db->Execute("delete from photos where id=99 or id=1");
00468 $db->Execute("insert into photos (id) values(1)");
00469 $db->Execute("update photos set photo=null,descclob=null where id=1");
00470
00471 $saved = $db->debug;
00472 $db->debug=true;
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487 $s = '';
00488 for ($i = 0; $i <= 500; $i++) {
00489 $s .= '1234567890';
00490 }
00491
00492 $sql = "INSERT INTO photos ( ID, photo) ".
00493 "VALUES ( :id, empty_blob() )".
00494 " RETURNING photo INTO :xx";
00495
00496
00497 $blob_data = $s;
00498 $id = 99;
00499
00500 $stmt = $db->PrepareSP($sql);
00501 $db->InParameter($stmt, $id, 'id');
00502 $blob = $db->InParameter($stmt, $s, 'xx',-1, OCI_B_BLOB);
00503 $db->StartTrans();
00504 $result = $db->Execute($stmt);
00505 $db->CompleteTrans();
00506
00507 $s2= $db->GetOne("select photo from photos where id=99");
00508 echo "<br>---$s2";
00509 if ($s !== $s2) Err("insert blob does not match");
00510
00511 print "<h4>Testing Blob: size=".strlen($s)."</h4>";
00512 $ok = $db->Updateblob('photos','photo',$s,'id=1');
00513 if (!$ok) Err("Blob failed 1");
00514 else {
00515 $s2= $db->GetOne("select photo from photos where id=1");
00516 if ($s !== $s2) Err("updateblob does not match");
00517 }
00518
00519 print "<h4>Testing Clob: size=".strlen($s)."</h4>";
00520 $ok = $db->UpdateClob('photos','descclob',$s,'id=1');
00521 if (!$ok) Err("Clob failed 1");
00522 else {
00523 $s2= $db->GetOne("select descclob from photos where id=1");
00524 if ($s !== $s2) Err("updateclob does not match");
00525 }
00526
00527
00528 $s = '';
00529 $s2 = '';
00530 print "<h4>Testing Foreign Keys</h4>";
00531 $arr = $db->MetaForeignKeys('emp','scott');
00532 print_r($arr);
00533 if (!$arr) Err("Bad MetaForeignKeys");
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582 print "<h4>Testing Cursor Variables</h4>";
00583 $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:zz,'A%'); END;",'zz');
00584
00585 if ($rs && !$rs->EOF) {
00586 $v = $db->GetOne("SELECT count(*) FROM tab where tname like 'A%'");
00587 if ($v == $rs->RecordCount()) print "Test 1 RowCount: OK<p>";
00588 else Err("Test 1 RowCount ".$rs->RecordCount().", actual = $v");
00589 } else {
00590 print "<b>Error in using Cursor Variables 1</b><p>";
00591 }
00592 $rs->Close();
00593
00594 print "<h4>Testing Stored Procedures for oci8</h4>";
00595
00596 $stmt = $db->PrepareSP("BEGIN adodb.data_out(:a1, :a2); END;");
00597 $a1 = 'Malaysia';
00598
00599 $db->InParameter($stmt,$a1,'a1');
00600 $db->OutParameter($stmt,$a2,'a2');
00601 $rs = $db->Execute($stmt);
00602 if ($rs) {
00603 if ($a2 !== 'Cinta Hati Malaysia') print "<b>Stored Procedure Error: a2 = $a2</b><p>";
00604 else echo "OK: a2=$a2<p>";
00605 } else {
00606 print "<b>Error in using Stored Procedure IN/Out Variables</b><p>";
00607 }
00608
00609 $tname = 'A%';
00610
00611 $stmt = $db->PrepareSP('select * from tab where tname like :tablename');
00612 $db->Parameter($stmt,$tname,'tablename');
00613 $rs = $db->Execute($stmt);
00614 rs2html($rs);
00615
00616 $stmt = $db->PrepareSP("begin adodb.data_in(:a1); end;");
00617 $db->InParameter($stmt,$a1,'a1');
00618 $db->Execute($stmt);
00619
00620 $db->debug = $saved;
00621 break;
00622
00623 default:
00624 break;
00625 }
00626 $arr = array(
00627 array(1,'Caroline','Miranda'),
00628 array(2,'John','Lim'),
00629 array(3,'Wai Hun','See')
00630 );
00631
00632 print "<p>Testing Bulk Insert of 3 rows</p>";
00633
00634 $sql = "insert into ADOXYZ (id,firstname,lastname) values (".$db->Param('0').",".$db->Param('1').",".$db->Param('2').")";
00635 $db->StartTrans();
00636 $db->Execute($sql,$arr);
00637 $db->CompleteTrans();
00638 $rs = $db->Execute('select * from ADOXYZ order by id');
00639 if (!$rs || $rs->RecordCount() != 3) Err("Bad bulk insert");
00640
00641 rs2html($rs);
00642
00643 $db->Execute('delete from ADOXYZ');
00644
00645 print "<p>Inserting 50 rows</p>";
00646
00647 for ($i = 0; $i < 5; $i++) {
00648
00649 $time = $db->DBDate(time());
00650 if (empty($_GET['hide'])) $db->debug = true;
00651 switch($db->databaseType){
00652 case 'mssqlpo':
00653 case 'mssql':
00654 $sqlt = "CREATE TABLE mytable (
00655 row1 INT IDENTITY(1,1) NOT NULL,
00656 row2 varchar(16),
00657 PRIMARY KEY (row1))";
00658
00659 if (!$db->Execute("delete from mytable"))
00660 $db->Execute($sqlt);
00661
00662 $ok = $db->Execute("insert into mytable (row2) values ('test')");
00663 $ins_id=$db->Insert_ID();
00664 echo "Insert ID=";var_dump($ins_id);
00665 if ($ins_id == 0) Err("Bad Insert_ID()");
00666 $ins_id2 = $db->GetOne("select row1 from mytable");
00667 if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2");
00668
00669 $arr = array(0=>'Caroline',1=>'Miranda');
00670 $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)";
00671 break;
00672 case 'mysqli':
00673 case 'mysqlt':
00674 case 'mysql':
00675 $sqlt = "CREATE TABLE `mytable` (
00676 `row1` int(11) NOT NULL auto_increment,
00677 `row2` varchar(16) NOT NULL default '',
00678 PRIMARY KEY (`row1`),
00679 KEY `myindex` (`row1`,`row2`)
00680 ) ";
00681 if (!$db->Execute("delete from mytable"))
00682 $db->Execute($sqlt);
00683
00684 $ok = $db->Execute("insert into mytable (row2) values ('test')");
00685 $ins_id=$db->Insert_ID();
00686 echo "Insert ID=";var_dump($ins_id);
00687 if ($ins_id == 0) Err("Bad Insert_ID()");
00688 $ins_id2 = $db->GetOne("select row1 from mytable");
00689 if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2");
00690
00691 default:
00692 $arr = array(0=>'Caroline',1=>'Miranda');
00693 $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)";
00694 break;
00695
00696 case 'oci8':
00697 case 'oci805':
00698 $arr = array('first'=>'Caroline','last'=>'Miranda');
00699 $amt = rand() % 100;
00700 $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,:first,:last,$time)";
00701 break;
00702 }
00703 if ($i & 1) {
00704 $sql = $db->Prepare($sql);
00705 }
00706 $rs = $db->Execute($sql,$arr);
00707
00708 if ($rs === false) Err( 'Error inserting with parameters');
00709 else $rs->Close();
00710 $db->debug = false;
00711 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+1,'John','Lim',$time)");
00712
00713
00714 if ($db->databaseType == 'mysql') if ($ins_id == 0) Err('Bad Insert_ID');
00715 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+2,'Mary','Lamb',$time )");
00716 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+3,'George','Washington',$time )");
00717 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+4,'Mr. Alan','Tam',$time )");
00718 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+5,'Alan',".$db->quote("Turing'ton").",$time )");
00719 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created)values ($i*10+6,'Serena','Williams',$time )");
00720 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+7,'Yat Sun','Sun',$time )");
00721 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+8,'Wai Hun','See',$time )");
00722 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+9,'Steven','Oey',$time )");
00723 }
00724 if (1) {
00725 $db->debug=1;
00726 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
00727 $cnt = $db->GetOne("select count(*) from ADOXYZ");
00728 $rs = $db->Execute('update ADOXYZ set id=id+1');
00729 if (!is_object($rs)) {
00730 print_r($rs);
00731 err("Update should return object");
00732 }
00733 if (!$rs) err("Update generated error");
00734
00735 $nrows = $db->Affected_Rows();
00736 if ($nrows === false) print "<p><b>Affected_Rows() not supported</b></p>";
00737 else if ($nrows != $cnt) print "<p><b>Affected_Rows() Error: $nrows returned (should be 50) </b></p>";
00738 else print "<p>Affected_Rows() passed</p>";
00739 }
00740
00741 if ($db->dataProvider == 'oci8') $array = array('zid'=>1,'zdate'=>date('Y-m-d',time()));
00742 else $array=array(1,date('Y-m-d',time()));
00743
00744
00745 #$array = array(1,date('Y-m-d',time()));
00746 $id = $db->GetOne("select id from ADOXYZ
00747 where id=".$db->Param('zid')." and created>=".$db->Param('ZDATE')."",
00748 $array);
00749 if ($id != 1) Err("Bad bind; id=$id");
00750 else echo "<br>Bind date/integer passed";
00751
00752 $db->debug = false;
00753 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
00755
00756 $rs = $db->Execute("select * from ADOXYZ where firstname = 'not known'");
00757 if (!$rs || !$rs->EOF) print "<p><b>Error on empty recordset</b></p>";
00758 else if ($rs->RecordCount() != 0) {
00759 print "<p><b>Error on RecordCount. Should be 0. Was ".$rs->RecordCount()."</b></p>";
00760 print_r($rs->fields);
00761 }
00762 if ($db->databaseType !== 'odbc') {
00763 $rs = &$db->Execute("select id,firstname,lastname,created,".$db->random." from ADOXYZ order by id");
00764 if ($rs) {
00765 if ($rs->RecordCount() != 50) {
00766 print "<p><b>RecordCount returns ".$rs->RecordCount().", should be 50</b></p>";
00767 adodb_pr($rs->GetArray());
00768 $poc = $rs->PO_RecordCount('ADOXYZ');
00769 if ($poc == 50) print "<p> PO_RecordCount passed</p>";
00770 else print "<p><b>PO_RecordCount returns wrong value: $poc</b></p>";
00771 } else print "<p>RecordCount() passed</p>";
00772 if (isset($rs->fields['firstname'])) print '<p>The fields columns can be indexed by column name.</p>';
00773 else {
00774 Err( '<p>The fields columns <i>cannot</i> be indexed by column name.</p>');
00775 print_r($rs->fields);
00776 }
00777 if (empty($_GET['hide'])) rs2html($rs);
00778 }
00779 else print "<p><b>Error in Execute of SELECT with random</b></p>";
00780 }
00781 $val = $db->GetOne("select count(*) from ADOXYZ");
00782 if ($val == 50) print "<p>GetOne returns ok</p>";
00783 else print "<p><b>Fail: GetOne returns $val</b></p>";
00784
00785 echo "<b>GetRow Test</b>";
00786 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
00787 $val1 = $db->GetRow("select count(*) from ADOXYZ");
00788 $val2 =& $db->GetRow("select count(*) from ADOXYZ");
00789 if ($val1[0] == 50 and sizeof($val1) == 1 and $val2[0] == 50 and sizeof($val2) == 1) print "<p>GetRow returns ok</p>";
00790 else {
00791 print_r($val);
00792 print "<p><b>Fail: GetRow returns {$val2[0]}</b></p>";
00793 }
00794
00795 print "<p>FetchObject/FetchNextObject Test</p>";
00796 $rs = $db->Execute('select * from ADOXYZ');
00797 if ($rs) {
00798 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
00799
00800 while ($o = $rs->FetchNextObject()) {
00801 if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) {
00802 print_r($o);
00803 print "<p><b>Firstname is not string</b></p>";
00804 break;
00805 }
00806 }
00807 } else {
00808 print "<p><b>Failed rs</b></p>";
00809 die("<p>ADOXYZ table cannot be read - die()");
00810 }
00811 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
00812 print "<p>FetchObject/FetchNextObject Test 2</p>";
00813 #$db->debug=99;
00814 $rs = $db->Execute('select * from ADOXYZ');
00815 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
00816 print_r($rs->fields);
00817 while ($o = $rs->FetchNextObject()) {
00818 if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) {
00819 print_r($o);
00820 print "<p><b>Firstname is not string</b></p>";
00821 break;
00822 }
00823 }
00824 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
00825
00826 $savefetch = $ADODB_FETCH_MODE;
00827 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
00828
00829 print "<p>CacheSelectLimit Test...</p>";
00830 $db->debug=1;
00831 $rs = $db->CacheSelectLimit('select id, firstname from ADOXYZ order by id',2);
00832
00833 if ($rs && !$rs->EOF) {
00834 if (isset($rs->fields[0])) {
00835 Err("ASSOC has numeric fields");
00836 print_r($rs->fields);
00837 }
00838 if ($rs->fields['id'] != 1) {Err("Error"); print_r($rs->fields);};
00839 if (trim($rs->fields['firstname']) != 'Caroline') {print Err("Error 2"); print_r($rs->fields);};
00840
00841 $rs->MoveNext();
00842 if ($rs->fields['id'] != 2) {Err("Error 3"); print_r($rs->fields);};
00843 $rs->MoveNext();
00844 if (!$rs->EOF) {
00845 Err("Error EOF");
00846 print_r($rs);
00847 }
00848 }
00849
00850 print "<p>FETCH_MODE = ASSOC: Should get 1, Caroline</p>";
00851 $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',2);
00852 if ($rs && !$rs->EOF) {
00853 if (ADODB_ASSOC_CASE == 2) {
00854 $id = 'ID';
00855 $fname = 'FIRSTNAME';
00856 }else {
00857 $id = 'id';
00858 $fname = 'firstname';
00859 }
00860 if ($rs->fields[$id] != 1) {Err("Error 1"); print_r($rs->fields);};
00861 if (trim($rs->fields[$fname]) != 'Caroline') {Err("Error 2"); print_r($rs->fields);};
00862 $rs->MoveNext();
00863 if ($rs->fields[$id] != 2) {Err("Error 3"); print_r($rs->fields);};
00864 $rs->MoveNext();
00865 if (!$rs->EOF) Err("Error EOF");
00866 else if (is_array($rs->fields) || $rs->fields) {
00867 Err("Error: ## fields should be set to false on EOF");
00868 print_r($rs->fields);
00869 }
00870 }
00871
00872 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
00873 print "<p>FETCH_MODE = NUM: Should get 1, Caroline</p>";
00874 $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',1);
00875 if ($rs && !$rs->EOF) {
00876 if (isset($rs->fields['id'])) Err("FETCH_NUM has ASSOC fields");
00877 if ($rs->fields[0] != 1) {Err("Error 1"); print_r($rs->fields);};
00878 if (trim($rs->fields[1]) != 'Caroline') {Err("Error 2");print_r($rs->fields);};
00879 $rs->MoveNext();
00880 if (!$rs->EOF) Err("Error EOF");
00881
00882 }
00883 $ADODB_FETCH_MODE = $savefetch;
00884
00885 $db->debug = false;
00886 print "<p>GetRowAssoc Upper: Should get 1, Caroline</p>";
00887 $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',1);
00888 if ($rs && !$rs->EOF) {
00889 $arr = &$rs->GetRowAssoc();
00890 if ($arr['ID'] != 1) {Err("Error 1");print_r($arr);};
00891 if (trim($arr['FIRSTNAME']) != 'Caroline') {Err("Error 2"); print_r($arr);};
00892 $rs->MoveNext();
00893 if (!$rs->EOF) Err("Error EOF");
00894
00895 }
00896 print "<p>GetRowAssoc Lower: Should get 1, Caroline</p>";
00897 $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',1);
00898 if ($rs && !$rs->EOF) {
00899 $arr = &$rs->GetRowAssoc(false);
00900 if ($arr['id'] != 1) {Err("Error 1"); print_r($arr);};
00901 if (trim($arr['firstname']) != 'Caroline') {Err("Error 2"); print_r($arr);};
00902
00903 }
00904
00905 print "<p>GetCol Test</p>";
00906 $col = $db->GetCol('select distinct firstname from adoxyz order by 1');
00907 if (!is_array($col)) Err("Col size is wrong");
00908 if (trim($col[0]) != 'Alan' or trim($col[9]) != 'Yat Sun') Err("Col elements wrong");
00909
00910 $db->debug = true;
00911
00912
00913 echo "<p>Date Update Test</p>";
00914 $zdate = date('Y-m-d',time()+3600*24);
00915 $zdate = $db->DBDate($zdate);
00916 $db->Execute("update ADOXYZ set created=$zdate where id=1");
00917 $row = $db->GetRow("select created,firstname from ADOXYZ where id=1");
00918 print_r($row); echo "<br>";
00919
00920
00921
00922 print "<p>SelectLimit Distinct Test 1: Should see Caroline, John and Mary</p>";
00923 $rs = &$db->SelectLimit('select distinct * from ADOXYZ order by id',3);
00924
00925
00926 if ($rs && !$rs->EOF) {
00927 if (trim($rs->fields[1]) != 'Caroline') Err("Error 1 (exp Caroline), ".$rs->fields[1]);
00928 $rs->MoveNext();
00929
00930 if (trim($rs->fields[1]) != 'John') Err("Error 2 (exp John), ".$rs->fields[1]);
00931 $rs->MoveNext();
00932 if (trim($rs->fields[1]) != 'Mary') Err("Error 3 (exp Mary),".$rs->fields[1]);
00933 $rs->MoveNext();
00934 if (! $rs->EOF) Err("Error EOF");
00935
00936 } else Err("Failed SelectLimit Test 1");
00937
00938 print "<p>SelectLimit Test 2: Should see Mary, George and Mr. Alan</p>";
00939 $rs = &$db->SelectLimit('select * from ADOXYZ order by id',3,2);
00940 if ($rs && !$rs->EOF) {
00941 if (trim($rs->fields[1]) != 'Mary') Err("Error 1 - No Mary, instead: ".$rs->fields[1]);
00942 $rs->MoveNext();
00943 if (trim($rs->fields[1]) != 'George')Err("Error 2 - No George, instead: ".$rs->fields[1]);
00944 $rs->MoveNext();
00945 if (trim($rs->fields[1]) != 'Mr. Alan') Err("Error 3 - No Mr. Alan, instead: ".$rs->fields[1]);
00946 $rs->MoveNext();
00947 if (! $rs->EOF) Err("Error EOF");
00948
00949 }
00950 else Err("Failed SelectLimit Test 2 ". ($rs ? 'EOF':'no RS'));
00951
00952 print "<p>SelectLimit Test 3: Should see Wai Hun and Steven</p>";
00953 $db->debug=1;
00954 global $A; $A=1;
00955 $rs = &$db->SelectLimit('select * from ADOXYZ order by id',-1,48);
00956 $A=0;
00957 if ($rs && !$rs->EOF) {
00958 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
00959 if (trim($rs->fields[1]) != 'Wai Hun') Err("Error 1 ".$rs->fields[1]);
00960 $rs->MoveNext();
00961 if (trim($rs->fields[1]) != 'Steven') Err("Error 2 ".$rs->fields[1]);
00962 $rs->MoveNext();
00963 if (! $rs->EOF) {
00964 Err("Error EOF");
00965 }
00966
00967 }
00968 else Err("Failed SelectLimit Test 3");
00969 $db->debug = false;
00970
00971
00972 $rs = &$db->Execute("select * from ADOXYZ order by id");
00973 print "<p>Testing Move()</p>";
00974 if (!$rs)Err( "Failed Move SELECT");
00975 else {
00976 if (!$rs->Move(2)) {
00977 if (!$rs->canSeek) print "<p>$db->databaseType: <b>Move(), MoveFirst() nor MoveLast() not supported.</b></p>";
00978 else print '<p><b>RecordSet->canSeek property should be set to false</b></p>';
00979 } else {
00980 $rs->MoveFirst();
00981 if (trim($rs->Fields("firstname")) != 'Caroline') {
00982 print "<p><b>$db->databaseType: MoveFirst failed -- probably cannot scroll backwards</b></p>";
00983 }
00984 else print "MoveFirst() OK<BR>";
00985
00986
00987 $rs->Move(3);
00988 if (trim($rs->Fields("firstname")) != 'George') {
00989 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(3) failed</b></p>";
00990 } else print "Move(3) OK<BR>";
00991
00992 $rs->Move(7);
00993 if (trim($rs->Fields("firstname")) != 'Yat Sun') {
00994 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(7) failed</b></p>";
00995 print_r($rs);
00996 } else print "Move(7) OK<BR>";
00997 if ($rs->EOF) Err("Move(7) is EOF already");
00998 $rs->MoveLast();
00999 if (trim($rs->Fields("firstname")) != 'Steven'){
01000 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: MoveLast() failed</b></p>";
01001 print_r($rs);
01002 }else print "MoveLast() OK<BR>";
01003 $rs->MoveNext();
01004 if (!$rs->EOF) err("Bad MoveNext");
01005 if ($rs->canSeek) {
01006 $rs->Move(3);
01007 if (trim($rs->Fields("firstname")) != 'George') {
01008 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(3) after MoveLast failed</b></p>";
01009
01010 } else print "Move(3) after MoveLast() OK<BR>";
01011 }
01012
01013 print "<p>Empty Move Test";
01014 $rs = $db->Execute("select * from ADOXYZ where id > 0 and id < 0");
01015 $rs->MoveFirst();
01016 if (!$rs->EOF || $rs->fields) Err("Error in empty move first");
01017 }
01018 }
01019
01020 $rs = $db->Execute('select * from ADOXYZ where id = 2');
01021 if ($rs->EOF || !is_array($rs->fields)) Err("Error in select");
01022 $rs->MoveNext();
01023 if (!$rs->EOF) Err("Error in EOF (xx) ");
01024
01025 print "<p>Testing ADODB_FETCH_ASSOC and concat: concat firstname and lastname</p>";
01026
01027 $save = $ADODB_FETCH_MODE;
01028 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
01029 if ($db->dataProvider == 'postgres') {
01030 $sql = "select ".$db->Concat('cast(firstname as varchar)',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ";
01031 $rs = &$db->Execute($sql);
01032 } else {
01033 $sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ";
01034 $rs = &$db->Execute($sql);
01035 }
01036 if ($rs) {
01037 if (empty($_GET['hide'])) rs2html($rs);
01038 } else {
01039 Err( "Failed Concat:".$sql);
01040 }
01041 $ADODB_FETCH_MODE = $save;
01042 print "<hr />Testing GetArray() ";
01043
01044
01045 $rs = &$db->Execute("select * from ADOXYZ order by id");
01046 if ($rs) {
01047 $arr = &$rs->GetArray(10);
01048 if (sizeof($arr) != 10 || trim($arr[1][1]) != 'John' || trim($arr[1][2]) != 'Lim') print $arr[1][1].' '.$arr[1][2]."<b> ERROR</b><br>";
01049 else print " OK<BR>";
01050 }
01051
01052 $arr = $db->GetArray("select x from ADOXYZ");
01053 $e = $db->ErrorMsg(); $e2 = $db->ErrorNo();
01054 echo "Testing error handling, should see illegal column 'x' error=<i>$e ($e2) </i><br>";
01055 if (!$e || !$e2) Err("Error handling did not work");
01056 print "Testing FetchNextObject for 1 object ";
01057 $rs = &$db->Execute("select distinct lastname,firstname from ADOXYZ where firstname='Caroline'");
01058 $fcnt = 0;
01059 if ($rs)
01060 while ($o = $rs->FetchNextObject()) {
01061 $fcnt += 1;
01062 }
01063 if ($fcnt == 1) print " OK<BR>";
01064 else print "<b>FAILED</b><BR>";
01065
01066 $stmt = $db->Prepare("select * from ADOXYZ where id < 3");
01067 $rs = $db->Execute($stmt);
01068 if (!$rs) Err("Prepare failed");
01069 else {
01070 $arr = $rs->GetArray();
01071 if (!$arr) Err("Prepare failed 2");
01072 if (sizeof($arr) != 2) Err("Prepare failed 3");
01073 }
01074 print "Testing GetAssoc() ";
01075 $savecrecs = $ADODB_COUNTRECS;
01076 $ADODB_COUNTRECS = false;
01077
01078
01079 print "<hr />";
01080 $rs =& $db->Execute("select distinct lastname,firstname,created from ADOXYZ");
01081
01082 if ($rs) {
01083 $arr = $rs->GetAssoc();
01084
01085 if (empty($arr['See']) || trim(reset($arr['See'])) != 'Wai Hun') print $arr['See']." <b>ERROR</b><br>";
01086 else print " OK 1";
01087 }
01088
01089 $arr = &$db->GetAssoc("select distinct lastname,firstname from ADOXYZ");
01090 if ($arr) {
01091
01092 if (empty($arr['See']) || trim($arr['See']) != 'Wai Hun') print $arr['See']." <b>ERROR</b><br>";
01093 else print " OK 2<BR>";
01094 }
01095
01096 $ADODB_COUNTRECS = $savecrecs;
01097 $db->debug=1;
01098 $query = $db->Prepare("select count(*) from ADOXYZ");
01099 $rs = $db->CacheExecute(10,$query);
01100 if (reset($rs->fields) != 50) echo Err("$cnt wrong for Prepare/CacheGetOne");
01101
01102 for ($loop=0; $loop < 1; $loop++) {
01103 print "Testing GetMenu() and CacheExecute<BR>";
01104 $db->debug = true;
01105 $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
01106
01107
01108
01109
01110 if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu('menu','Steven').'<BR>';
01111 else print " Fail<BR>";
01112 $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
01113
01114 if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu('menu','Steven',false).'<BR>';
01115 else print " Fail<BR>";
01116
01117 $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
01118 if ($rs) print ' Multiple, Alan selected: '. $rs->GetMenu('menu','Alan',false,true).'<BR>';
01119 else print " Fail<BR>";
01120 print '</p><hr />';
01121
01122 $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
01123 if ($rs) {
01124 print ' Multiple, Alan and George selected: '. $rs->GetMenu('menu',array('Alan','George'),false,true);
01125 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>";
01126 } else print " Fail<BR>";
01127 print '</p><hr />';
01128
01129 print "Testing GetMenu3()<br>";
01130 $rs = $db->Execute("select ".$db->Concat('firstname',"'-'",'id').",id, lastname from ADOXYZ order by lastname,id");
01131 if ($rs) print "Grouped Menu: ".$rs->GetMenu3('name');
01132 else Err('Grouped Menu GetMenu3()');
01133 print "<hr />";
01134
01135 print "Testing GetMenu2() <BR>";
01136 $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ");
01137 if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu2('menu',('Oey')).'<BR>';
01138 else print " Fail<BR>";
01139 $rs = &$db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ");
01140 if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu2('menu',('Oey'),false).'<BR>';
01141 else print " Fail<BR>";
01142 }
01143 echo "<h3>CacheEXecute</h3>";
01144
01145 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
01146 $rs = &$db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ");
01147 print_r($rs->fields); echo $rs->fetchMode;echo "<br>";
01148 echo $rs->Fields('firstname');
01149
01150 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
01151 $rs = &$db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ");
01152 print_r($rs->fields);echo "<br>";
01153 echo $rs->Fields('firstname');
01154 $db->debug = false;
01155
01156 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
01157
01158
01159 $sql = 'select * from ADOXYZ where 0=1';
01160 echo "<p>**Testing '$sql' (phplens compat 1)</p>";
01161 $rs = &$db->Execute($sql);
01162 if (!$rs) err( "<b>No recordset returned for '$sql'</b>");
01163 if (!$rs->FieldCount()) err( "<b>No fields returned for $sql</b>");
01164 if (!$rs->FetchField(1)) err( "<b>FetchField failed for $sql</b>");
01165
01166 $sql = 'select * from ADOXYZ order by 1';
01167 echo "<p>**Testing '$sql' (phplens compat 2)</p>";
01168 $rs = &$db->Execute($sql);
01169 if (!$rs) err( "<b>No recordset returned for '$sql'<br>".$db->ErrorMsg()."</b>");
01170
01171
01172 $sql = 'select * from ADOXYZ order by 1,1';
01173 echo "<p>**Testing '$sql' (phplens compat 3)</p>";
01174 $rs = &$db->Execute($sql);
01175 if (!$rs) err( "<b>No recordset returned for '$sql'<br>".$db->ErrorMsg()."</b>");
01176
01177
01178
01179 $rs1 = &$db->Execute("select id from ADOXYZ where id <= 2 order by 1");
01180 $rs2 = &$db->Execute("select id from ADOXYZ where id = 3 or id = 4 order by 1");
01181
01182 if ($rs1) $rs1->MoveLast();
01183 if ($rs2) $rs2->MoveLast();
01184
01185 if (empty($rs1) || empty($rs2) || $rs1->fields[0] != 2 || $rs2->fields[0] != 4) {
01186 $a = $rs1->fields[0];
01187 $b = $rs2->fields[0];
01188 print "<p><b>Error in multiple recordset test rs1=$a rs2=$b (should be rs1=2 rs2=4)</b></p>";
01189 } else
01190 print "<p>Testing multiple recordsets OK</p>";
01191
01192
01193 echo "<p> GenID test: ";
01194 for ($i=1; $i <= 10; $i++)
01195 echo "($i: ",$val = $db->GenID($db->databaseType.'abcseq6' ,5), ") ";
01196 if ($val == 0) Err("GenID not supported");
01197
01198 if ($val) {
01199 $db->DropSequence('abc_seq2');
01200 $db->CreateSequence('abc_seq2');
01201 $val = $db->GenID('abc_seq2');
01202 $db->DropSequence('abc_seq2');
01203 $db->CreateSequence('abc_seq2');
01204 $val = $db->GenID('abc_seq2');
01205 if ($val != 1) Err("Drop and Create Sequence not supported ($val)");
01206 }
01207 echo "<p>";
01208
01209 if (substr($db->dataProvider,0,3) != 'notused') {
01210 $sql = "select firstnames from adoxyz";
01211 print "<p>Testing execution of illegal statement: <i>$sql</i></p>";
01212 if ($db->Execute($sql) === false) {
01213 print "<p>This returns the following ErrorMsg(): <i>".$db->ErrorMsg()."</i> and ErrorNo(): ".$db->ErrorNo().'</p>';
01214 } else
01215 print "<p><b>Error in error handling -- Execute() should return false</b></p>";
01216 } else
01217 print "<p><b>ADO skipped error handling of bad select statement</b></p>";
01218
01219 print "<p>ASSOC TEST 2<br>";
01220 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
01221 $rs = $db->query('select * from adoxyz order by id');
01222 if ($ee = $db->ErrorMsg()) {
01223 Err("Error message=$ee");
01224 }
01225 if ($ee = $db->ErrorNo()) {
01226 Err("Error No = $ee");
01227 }
01228 print_r($rs->fields);
01229 for($i=0;$i<$rs->FieldCount();$i++)
01230 {
01231 $fld=$rs->FetchField($i);
01232 print "<br> Field name is ".$fld->name;
01233 print " ".$rs->Fields($fld->name);
01234 }
01235
01236
01237 print "<p>BOTH TEST 2<br>";
01238 if ($db->dataProvider == 'ado') {
01239 print "<b>ADODB_FETCH_BOTH not supported</b> for dataProvider=".$db->dataProvider."<br>";
01240 } else {
01241 $ADODB_FETCH_MODE = ADODB_FETCH_BOTH;
01242 $rs = $db->query('select * from adoxyz order by id');
01243 for($i=0;$i<$rs->FieldCount();$i++)
01244 {
01245 $fld=$rs->FetchField($i);
01246 print "<br> Field name is ".$fld->name;
01247 print " ".$rs->Fields($fld->name);
01248 }
01249 }
01250
01251 print "<p>NUM TEST 2<br>";
01252 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
01253 $rs = $db->query('select * from adoxyz order by id');
01254 for($i=0;$i<$rs->FieldCount();$i++)
01255 {
01256 $fld=$rs->FetchField($i);
01257 print "<br> Field name is ".$fld->name;
01258 print " ".$rs->Fields($fld->name);
01259 }
01260
01261 print "<p>ASSOC Test of SelectLimit<br>";
01262 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
01263 $rs = $db->selectlimit('select * from adoxyz order by id',3,4);
01264 $cnt = 0;
01265 while ($rs && !$rs->EOF) {
01266 $cnt += 1;
01267 if (!isset($rs->fields['firstname'])) {
01268 print "<br><b>ASSOC returned numeric field</b></p>";
01269 break;
01270 }
01271 $rs->MoveNext();
01272 }
01273 if ($cnt != 3) print "<br><b>Count should be 3, instead it was $cnt</b></p>";
01274
01275
01276 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
01277 if ($db->sysDate) {
01278 $saved = $db->debug;
01279 $db->debug = 1;
01280 $rs = $db->Execute("select {$db->sysDate} from adoxyz where id=1");
01281 if (ADORecordSet::UnixDate(date('Y-m-d')) != $rs->UnixDate($rs->fields[0])) {
01282 print "<p><b>Invalid date {$rs->fields[0]}</b></p>";
01283 } else
01284 print "<p>Passed \$sysDate test ({$rs->fields[0]})</p>";
01285
01286 print_r($rs->FetchField(0));
01287 print time();
01288 $db->debug=$saved;
01289 } else {
01290 print "<p><b>\$db->sysDate not defined</b></p>";
01291 }
01292
01293 print "<p>Test CSV</p>";
01294 include_once('../toexport.inc.php');
01295
01296 $rs = $db->SelectLimit('select id,firstname,lastname,created,\'He, he\' he,\'"\' q from adoxyz',10);
01297
01298 print "<pre>";
01299 print rs2csv($rs);
01300 print "</pre>";
01301
01302 $rs = $db->SelectLimit('select id,firstname,lastname,created,\'The "young man", he said\' from adoxyz',10);
01303
01304 if (PHP_VERSION < 5) {
01305 print "<pre>";
01306 rs2tabout($rs);
01307 print "</pre>";
01308 }
01309 print " CacheFlush ";
01310 $db->CacheFlush();
01311
01312 $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A');
01313 $sql = "SELECT $date from ADOXYZ";
01314 print "<p>Test SQLDate: ".htmlspecialchars($sql)."</p>";
01315 $rs = $db->SelectLimit($sql,1);
01316 $d = date('d-m-M-Y-').'Q'.(ceil(date('m')/3.0)).date(' h:i:s A');
01317 if (!$rs) Err("SQLDate query returned no recordset");
01318 else if ($d != $rs->fields[0]) Err("SQLDate 1 failed expected: <br>act:$d <br>sql:".$rs->fields[0]);
01319
01320 $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A',$db->DBDate("1974-02-25"));
01321 $sql = "SELECT $date from ADOXYZ";
01322 print "<p>Test SQLDate: ".htmlspecialchars($sql)."</p>";
01323 $rs = $db->SelectLimit($sql,1);
01324 $ts = ADOConnection::UnixDate('1974-02-25');
01325 $d = date('d-m-M-Y-',$ts).'Q'.(ceil(date('m',$ts)/3.0)).date(' h:i:s A',$ts);
01326 if (!$rs) {
01327 Err("SQLDate query returned no recordset");
01328 echo $db->ErrorMsg(),'<br>';
01329 } else if ($d != $rs->fields[0]) Err("SQLDate 2 failed expected: <br>act:$d <br>sql:".$rs->fields[0]);
01330
01331
01332 print "<p>Test Filter</p>";
01333 $db->debug = 1;
01334
01335 $rs = $db->SelectLimit('select * from ADOXYZ where id < 3 order by id');
01336
01337 $rs = RSFilter($rs,'do_strtolower');
01338 if (trim($rs->fields[1]) != 'caroline' && trim($rs->fields[2]) != 'miranda') {
01339 err('**** RSFilter failed');
01340 print_r($rs->fields);
01341 }
01342
01343 rs2html($rs);
01344
01345 $db->debug=1;
01346
01347
01348 print "<p>Test Replace</p>";
01349
01350 $ret = $db->Replace('adoxyz',
01351 array('id'=>1,'firstname'=>'Caroline','lastname'=>'Miranda'),
01352 array('id'),
01353 $autoq = true);
01354 if (!$ret) echo "<p>Error in replacing existing record</p>";
01355 else {
01356 $saved = $db->debug;
01357 $db->debug = 0;
01358 $savec = $ADODB_COUNTRECS;
01359 $ADODB_COUNTRECS = true;
01360 $rs = $db->Execute('select * FROM ADOXYZ where id=1');
01361 $db->debug = $saved;
01362 if ($rs->RecordCount() != 1) {
01363 $cnt = $rs->RecordCount();
01364 rs2html($rs);
01365 print "<b>Error - Replace failed, count=$cnt</b><p>";
01366 }
01367 $ADODB_COUNTRECS = $savec;
01368 }
01369 $ret = $db->Replace('adoxyz',
01370 array('id'=>1000,'firstname'=>'Harun','lastname'=>'Al-Rashid'),
01371 array('id','firstname'),
01372 $autoq = true);
01373 if ($ret != 2) print "<b>Replace failed: </b>";
01374 print "test A return value=$ret (2 expected) <p>";
01375
01376 $ret = $db->Replace('adoxyz',
01377 array('id'=>1000,'firstname'=>'Sherazade','lastname'=>'Al-Rashid'),
01378 'id',
01379 $autoq = true);
01380 if ($ret != 1)
01381 if ($db->dataProvider == 'ibase' && $ret == 2);
01382 else print "<b>Replace failed: </b>";
01383 print "test B return value=$ret (1 or if ibase then 2 expected) <p>";
01384
01385 print "<h3>rs2rs Test</h3>";
01386
01387 $rs = $db->Execute('select * from adoxyz where id>= 1 order by id');
01388 $rs = $db->_rs2rs($rs);
01389 $rs->valueX = 'X';
01390 $rs->MoveNext();
01391 $rs = $db->_rs2rs($rs);
01392 if (!isset($rs->valueX)) err("rs2rs does not preserve array recordsets");
01393 if (reset($rs->fields) != 1) err("rs2rs does not move to first row: id=".reset($rs->fields));
01394
01396 include_once('../pivottable.inc.php');
01397 print "<h3>Pivot Test</h3>";
01398 $db->debug=true;
01399 $sql = PivotTableSQL(
01400 $db, # adodb connection
01401 'adoxyz', # tables
01402 'firstname', # row fields
01403 'lastname', # column fields
01404 false, # join
01405 'ID', # sum
01406 'Sum ', # label for sum
01407 'sum', # aggregate function
01408 true
01409 );
01410 $rs = $db->Execute($sql);
01411 if ($rs) rs2html($rs);
01412 else Err("Pivot sql error");
01413
01414 $pear = true; //true;
01415 $db->debug=false;
01416
01417 if ($pear) {
01418 // PEAR TESTS BELOW
01419 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
01420
01421 include_once "PEAR.php";
01422 $rs = $db->query('select * from adoxyz where id>0 and id<10 order by id');
01423
01424 $i = 0;
01425 if ($rs && !$rs->EOF) {
01426 while ($arr = $rs->fetchRow()) {
01427 $i++;
01428 //print "$i ";
01429 if ($arr[0] != $i) {
01430 print_r($arr);
01431 print "<p><b>PEAR DB emulation error 1.</b></p>";
01432 $pear = false;
01433 break;
01434 }
01435 }
01436 $rs->Close();
01437 }
01438
01439
01440 if ($i != $db->GetOne('select count(*) from adoxyz where id>0 and id<10')) {
01441 print "<p><b>PEAR DB emulation error 1.1 EOF ($i)</b></p>";
01442 $pear = false;
01443 }
01444
01445 $rs = $db->limitQuery('select * from adoxyz where id>0 order by id',$i=3,$top=3);
01446 $i2 = $i;
01447 if ($rs && !$rs->EOF) {
01448
01449 while (!is_object($rs->fetchInto($arr))) {
01450 $i2++;
01451
01452 // print_r($arr);
01453 // print "$i ";print_r($arr);
01454 if ($arr[0] != $i2) {
01455 print "<p><b>PEAR DB emulation error 2.</b></p>";
01456 $pear = false;
01457 break;
01458 }
01459 }
01460 $rs->Close();
01461 }
01462 if ($i2 != $i+$top) {
01463 print "<p><b>PEAR DB emulation error 2.1 EOF (correct=$i+$top, actual=$i2)</b></p>";
01464 $pear = false;
01465 }
01466 }
01467 if ($pear) print "<p>PEAR DB emulation passed.</p>";
01468 flush();
01469
01470
01471 $rs = $db->SelectLimit("select ".$db->sysDate." from adoxyz",1);
01472 $date = $rs->fields[0];
01473 if (!$date) Err("Bad sysDate");
01474 else {
01475 $ds = $db->UserDate($date,"d m Y");
01476 if ($ds != date("d m Y")) Err("Bad UserDate: ".$ds.' expected='.date("d m Y"));
01477 else echo "Passed UserDate: $ds<p>";
01478 }
01479 $db->debug=1;
01480 if ($db->dataProvider == 'oci8')
01481 $rs = $db->SelectLimit("select to_char(".$db->sysTimeStamp.",'YYYY-MM-DD HH24:MI:SS') from adoxyz",1);
01482 else
01483 $rs = $db->SelectLimit("select ".$db->sysTimeStamp." from adoxyz",1);
01484 $date = $rs->fields[0];
01485 if (!$date) Err("Bad sysTimeStamp");
01486 else {
01487 $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y");
01488 if ($ds != date("H \\h\\r\\s-d m Y")) Err("Bad UserTimeStamp: ".$ds.", correct is ".date("H \\h\\r\\s-d m Y"));
01489 else echo "Passed UserTimeStamp: $ds<p>";
01490
01491 $date = 100;
01492 $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y");
01493 $ds2 = date("H \\h\\r\\s-d m Y",$date);
01494 if ($ds != $ds2) Err("Bad UserTimeStamp 2: $ds: $ds2");
01495 else echo "Passed UserTimeStamp 2: $ds<p>";
01496 }
01497 flush();
01498
01499 if ($db->hasTransactions) {
01500 //$db->debug=1;
01501 echo "<p>Testing StartTrans CompleteTrans</p>";
01502 $db->raiseErrorFn = false;
01503 $db->StartTrans();
01504 $rs = $db->Execute('select * from notable');
01505 $db->StartTrans();
01506 $db->BeginTrans();
01507 $db->Execute("update ADOXYZ set firstname='Carolx' where id=1");
01508 $db->CommitTrans();
01509 $db->CompleteTrans();
01510 $rez = $db->CompleteTrans();
01511 if ($rez !== false) {
01512 if (is_null($rez)) Err("Error: _transOK not modified");
01513 else Err("Error: CompleteTrans (1) should have failed");
01514 } else {
01515 $name = $db->GetOne("Select firstname from ADOXYZ where id=1");
01516 if ($name == "Carolx") Err("Error: CompleteTrans (2) should have failed");
01517 else echo "<p> -- Passed StartTrans test1 - rolling back</p>";
01518 }
01519
01520 $db->StartTrans();
01521 $db->BeginTrans();
01522 $db->Execute("update ADOXYZ set firstname='Carolx' where id=1");
01523 $db->RollbackTrans();
01524 $rez = $db->CompleteTrans();
01525 if ($rez !== true) Err("Error: CompleteTrans (1) should have succeeded");
01526 else {
01527 $name = $db->GetOne("Select firstname from ADOXYZ where id=1");
01528 if (trim($name) != "Carolx") Err("Error: CompleteTrans (2) should have succeeded, returned name=$name");
01529 else echo "<p> -- Passed StartTrans test2 - commiting</p>";
01530 }
01531 }
01532 flush();
01533 $saved = $db->debug;
01534 $db->debug=1;
01535 $cnt = _adodb_getcount($db, 'select * from ADOXYZ where firstname in (select firstname from ADOXYZ)');
01536 echo "<b>Count=</b> $cnt";
01537 $db->debug=$saved;
01538
01539 global $TESTERRS;
01540 $debugerr = true;
01541
01542 global $ADODB_LANG;$ADODB_LANG = 'fr';
01543 $db->debug = false;
01544 $TESTERRS = 0;
01545 $db->raiseErrorFn = 'adodb_test_err';
01546 global $ERRNO; // from adodb_test_err
01547 $db->Execute('select * from nowhere');
01548 $metae = $db->MetaError($ERRNO);
01549 if ($metae !== DB_ERROR_NOSUCHTABLE) print "<p><b>MetaError=".$metae." wrong</b>, should be ".DB_ERROR_NOSUCHTABLE."</p>";
01550 else print "<p>MetaError ok (".DB_ERROR_NOSUCHTABLE."): ".$db->MetaErrorMsg($metae)."</p>";
01551 if ($TESTERRS != 1) print "<b>raiseErrorFn select nowhere failed</b><br>";
01552 $rs = $db->Execute('select * from adoxyz');
01553 if ($debugerr) print " Move";
01554 $rs->Move(100);
01555 $rs->_queryID = false;
01556 if ($debugerr) print " MoveNext";
01557 $rs->MoveNext();
01558 if ($debugerr) print " $rs=false";
01559 $rs = false;
01560
01561 flush();
01562
01563 print "<p>SetFetchMode() tests</p>";
01564 $db->SetFetchMode(ADODB_FETCH_ASSOC);
01565 $rs = $db->SelectLimit('select firstname from adoxyz',1);
01566 if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC");
01567
01568 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
01569 $rs = $db->SelectLimit('select firstname from adoxyz',1);
01570 //var_dump($rs->fields);
01571 if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC");
01572
01573 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
01574 $db->SetFetchMode(ADODB_FETCH_NUM);
01575 $rs = $db->SelectLimit('select firstname from adoxyz',1);
01576 if (!isset($rs->fields[0])) Err("BAD FETCH NUM");
01577
01578 flush();
01579
01580 print "<p>Test MetaTables again with SetFetchMode()</p>";
01581 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
01582 $db->SetFetchMode(ADODB_FETCH_ASSOC);
01583 print_r($db->MetaTables());
01584 print "<p>";
01585
01587
01588 print "<p>Testing Bad Connection</p>";
01589 flush();
01590
01591 if (true || PHP_VERSION < 5) {
01592 if ($db->dataProvider == 'odbtp') $db->databaseType = 'odbtp';
01593 $conn = NewADOConnection($db->databaseType);
01594 $conn->raiseErrorFn = 'adodb_test_err';
01595 if (1) $conn->PConnect('abc','baduser','badpassword');
01596 if ($TESTERRS == 2) print "raiseErrorFn tests passed<br>";
01597 else print "<b>raiseErrorFn tests failed ($TESTERRS)</b><br>";
01598
01599 flush();
01600 }
01602
01603 global $nocountrecs;
01604
01605 if (isset($nocountrecs) && $ADODB_COUNTRECS) err("Error: \$ADODB_COUNTRECS is set");
01606 if (empty($nocountrecs) && $ADODB_COUNTRECS==false) err("Error: \$ADODB_COUNTRECS is not set");
01607
01608 flush();
01609 ?>
01610 </p>
01611 <table width=100% ><tr><td bgcolor=beige> </td></tr></table>
01612 </p></form>
01613 <?php
01614
01615 if ($rs1) $rs1->Close();
01616 if ($rs2) $rs2->Close();
01617 if ($rs) $rs->Close();
01618 $db->Close();
01619
01620 if ($db->transCnt != 0) Err("Error in transCnt=$db->transCnt (should be 0)");
01621
01622
01623 printf("<p>Total queries=%d; total cached=%d</p>",$EXECS+$CACHED, $CACHED);
01624 flush();
01625 }
01626
01627 function adodb_test_err($dbms, $fn, $errno, $errmsg, $p1=false, $p2=false)
01628 {
01629 global $TESTERRS,$ERRNO;
01630
01631 $ERRNO = $errno;
01632 $TESTERRS += 1;
01633 print "<i>** $dbms ($fn): errno=$errno errmsg=$errmsg ($p1,$p2)</i><br>";
01634 }
01635
01636 //--------------------------------------------------------------------------------------
01637
01638
01639 @set_time_limit(240); // increase timeout
01640
01641 include("../tohtml.inc.php");
01642 include("../adodb.inc.php");
01643 include("../rsfilter.inc.php");
01644
01645 /* White Space Check */
01646
01647 if (isset($_SERVER['argv'][1])) {
01648 //print_r($_SERVER['argv']);
01649 $_GET[$_SERVER['argv'][1]] = 1;
01650 }
01651
01652 if (@$_SERVER['COMPUTERNAME'] == 'TIGRESS') {
01653 CheckWS('mysqlt');
01654 CheckWS('postgres');
01655 CheckWS('oci8po');
01656
01657 CheckWS('firebird');
01658 CheckWS('sybase');
01659 if (!ini_get('safe_mode')) CheckWS('informix');
01660
01661 CheckWS('ado_mssql');
01662 CheckWS('ado_access');
01663 CheckWS('mssql');
01664
01665 CheckWS('vfp');
01666 CheckWS('sqlanywhere');
01667 CheckWS('db2');
01668 CheckWS('access');
01669 CheckWS('odbc_mssql');
01670 CheckWS('firebird15');
01671 //
01672 CheckWS('oracle');
01673 CheckWS('proxy');
01674 CheckWS('fbsql');
01675 print "White Space Check complete<p>";
01676 }
01677 if (sizeof($_GET) == 0) $testmysql = true;
01678
01679
01680 foreach($_GET as $k=>$v) {
01681 //global $$k;
01682 $$k = $v;
01683 }
01684 if (strpos(PHP_VERSION,'5') === 0) {
01685 //$testaccess=1;
01686 //$testmssql = 1;
01687 //$testsqlite=1;
01688 }
01689 ?>
01690 <html>
01691 <title>ADODB Testing</title>
01692 <body bgcolor=white>
01693 <H1>ADODB Test</H1>
01694
01695 This script tests the following databases: Interbase, Oracle, Visual FoxPro, Microsoft Access (ODBC and ADO), MySQL, MSSQL (ODBC, native, ADO).
01696 There is also support for Sybase, PostgreSQL.</p>
01697 For the latest version of ADODB, visit <a href=http://adodb.sourceforge.net/>adodb.sourceforge.net</a>.</p>
01698
01699 Test <a href=test4.php>GetInsertSQL/GetUpdateSQL</a>
01700 <a href=testsessions.php>Sessions</a>
01701 <a href=testpaging.php>Paging</a>
01702 <a href=test-perf.php>Perf Monitor</a><p>
01703 <?php
01704 include('./testdatabases.inc.php');
01705
01706 echo "<br>vers=",ADOConnection::Version();
01707
01708
01709 include_once('../adodb-time.inc.php');
01710 if (isset($_GET['time'])) adodb_date_test();
01711
01712 ?>
01713 <p><i>ADODB Database Library (c) 2000-2006 John Lim. All rights reserved. Released under BSD and LGPL, PHP <?php echo PHP_VERSION ?>.</i></p>
01714 </body>
01715 </html>