$msg
"; flush(); } function CheckWS($conn) { global $ADODB_EXTENSION; include_once('../adodb-session.php'); $saved = $ADODB_EXTENSION; $db = ADONewConnection($conn); $ADODB_EXTENSION = $saved; if (headers_sent()) { print "

White space detected in adodb-$conn.inc.php or include file...

"; die(); } } function do_strtolower(&$arr) { foreach($arr as $k => $v) { $arr[$k] = strtolower($v); } } function CountExecs($db, $sql, $inputarray) { global $EXECS; $EXECS++; } function CountCachedExecs($db, $secs2cache, $sql, $inputarray) { global $CACHED; $CACHED++; } // the table creation code is specific to the database, so we allow the user // to define their own table creation stuff function testdb(&$db,$createtab="create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)") { GLOBAL $ADODB_vers,$ADODB_CACHE_DIR,$ADODB_FETCH_MODE, $HTTP_GET_VARS,$ADODB_COUNTRECS; ?>

 

Execute('select lastname,firstname,lastname,id from adoxyz'); $arr = $rs->GetAssoc(); echo "
";print_r($arr);
	die();*/
	
	GLOBAL $EXECS, $CACHED;
	
	$EXECS = 0;
	$CACHED = 0;
	if ((rand()%3) == 0) @$db->Execute("delete from adodb_logsql");
	$db->debug=1;
	
	$db->fnExecute = 'CountExecs';
	$db->fnCacheExecute = 'CountCachedExecs';
	
	if (empty($_GET['nolog'])) {
		echo "

SQL Logging enabled

"; $db->LogSQL(); } $ADODB_CACHE_DIR = dirname(TempNam('/tmp','testadodb')); $db->debug = false; //print $db->UnixTimeStamp('2003-7-22 23:00:00'); $phpv = phpversion(); if (defined('ADODB_EXTENSION')) $ext = '   Extension '.ADODB_EXTENSION.' installed'; else $ext = ''; print "

ADODB Version: $ADODB_vers Host: $db->host   Database: $db->database   PHP: $phpv $ext

"; flush(); $arr = $db->ServerInfo(); print_r($arr); echo "
"; $e = error_reporting(E_ALL-E_WARNING); flush(); print "date1 (1969-02-20) = ".$db->DBDate('1969-2-20'); print "
date1 (1999-02-20) = ".$db->DBDate('1999-2-20'); print "
date2 (1970-1-2) = ".$db->DBDate(24*3600)."

"; print "ts1 (1999-02-20 13:40:50) = ".$db->DBTimeStamp('1999-2-20 1:40:50 pm'); print "
ts1.1 (1999-02-20 13:40:00) = ".$db->DBTimeStamp('1999-2-20 13:40'); print "
ts2 (1999-02-20) = ".$db->DBTimeStamp('1999-2-20'); print "
ts3 (1970-1-2 +/- timezone) = ".$db->DBTimeStamp(24*3600); print "
Fractional TS (1999-2-20 13:40:50.91): ".$db->DBTimeStamp($db->UnixTimeStamp('1999-2-20 13:40:50.91+1')); $dd = $db->UnixDate('1999-02-20'); print "
unixdate 1999-02-20 = ".date('Y-m-d',$dd)."

"; flush(); // mssql too slow in failing bad connection if (false && $db->databaseType != 'mssql') { print "

Testing bad connection. Ignore following error msgs:
"; $db2 = ADONewConnection(); $rez = $db2->Connect("bad connection"); $err = $db2->ErrorMsg(); print "Error='$err'

"; if ($rez) print "Cannot check if connection failed. The Connect() function returned true.

"; } error_reporting($e); flush(); //$ADODB_COUNTRECS=false; $rs=$db->Execute('select * from adoxyz order by id'); //print_r($rs); //OCIFetchStatement($rs->_queryID,$rez,0,-1);//,OCI_ASSOC | OCI_FETCHSTATEMENT_BY_ROW); //print_r($rez); //die(); if($rs === false) $create = true; else $rs->Close(); //if ($db->databaseType !='vfp') $db->Execute("drop table ADOXYZ"); if ($create) { if (false && $db->databaseType == 'ibase') { print "Please create the following table for testing:

$createtab

"; return; } else { $db->debug = 1; $e = error_reporting(E_ALL-E_WARNING); $db->Execute($createtab); error_reporting($e); } } $rs = &$db->Execute("delete from ADOXYZ"); // some ODBC drivers will fail the drop so we delete if ($rs) { if(! $rs->EOF) print "Error: RecordSet returned by Execute('delete...') should show EOF

"; $rs->Close(); } else print "err=".$db->ErrorMsg(); print "

Test select on empty table

"; $rs = &$db->Execute("select * from ADOXYZ where id=9999"); if ($rs && !$rs->EOF) print "Error: RecordSet returned by Execute(select...') on empty table should show EOF

"; if ($rs) $rs->Close(); flush(); //$db->debug=true; print "

Testing Commit: "; $time = $db->DBDate(time()); if (!$db->BeginTrans()) { print 'Transactions not supported

'; if ($db->hasTransactions) Err("hasTransactions should be false"); } else { /* COMMIT */ if (!$db->hasTransactions) Err("hasTransactions should be true"); if ($db->transCnt != 1) Err("Invalid transCnt = $db->transCnt (should be 1)"); $rs = $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (99,'Should Not','Exist (Commit)',$time)"); if ($rs && $db->CommitTrans()) { $rs->Close(); $rs = &$db->Execute("select * from ADOXYZ where id=99"); if ($rs === false || $rs->EOF) { print 'Data not saved

'; $rs = &$db->Execute("select * from ADOXYZ where id=99"); print_r($rs); die(); } else print 'OK

'; if ($rs) $rs->Close(); } else { if (!$rs) { print "Insert failed

"; $db->RollbackTrans(); } else print "Commit failed

"; } if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)"); /* ROLLBACK */ if (!$db->BeginTrans()) print "

Error in BeginTrans()

"; print "

Testing Rollback: "; $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (100,'Should Not','Exist (Rollback)',$time)"); if ($db->RollbackTrans()) { $rs = $db->Execute("select * from ADOXYZ where id=100"); if ($rs && !$rs->EOF) print 'Fail: Data should rollback

'; else print 'OK

'; if ($rs) $rs->Close(); } else print "Commit failed

"; $rs = &$db->Execute('delete from ADOXYZ where id>50'); if ($rs) $rs->Close(); if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)"); } if (1) { print "

Testing MetaDatabases()

"; print_r( $db->MetaDatabases()); print "

Testing MetaTables() and MetaColumns()

"; $a = $db->MetaTables(); if ($a===false) print "MetaTables not supported

"; else { print "Array of tables and views: "; foreach($a as $v) print " ($v) "; print '

'; } $a = $db->MetaTables('VIEW'); if ($a===false) print "MetaTables not supported

"; else { print "Array of views: "; foreach($a as $v) print " ($v) "; print '

'; } $a = $db->MetaTables(false,false,'aDo%'); if ($a===false) print "MetaTables not supported

"; else { print "Array of ado%: "; foreach($a as $v) print " ($v) "; print '

'; } $a = $db->MetaTables('TABLE'); if ($a===false) print "MetaTables not supported

"; else { print "Array of tables: "; foreach($a as $v) print " ($v) "; print '

'; } $db->debug=1; $a = $db->MetaColumns('ADOXYZ'); if ($a===false) print "MetaColumns not supported

"; else { print "

Columns of ADOXYZ: "; foreach($a as $v) print " ($v->name $v->type $v->max_length) "; } print "

Testing MetaPrimaryKeys

"; $a = $db->MetaPrimaryKeys('ADOXYZ'); var_dump($a); } $rs = &$db->Execute('delete from ADOXYZ'); if ($rs) $rs->Close(); $db->debug = false; switch ($db->databaseType) { case 'postgres7': case 'postgres64': case 'postgres': case 'ibase': print "

Encode=".$db->BlobEncode("abc\0d\"' ef")."

";//' print "

Testing Foreign Keys

"; $arr = $db->MetaForeignKeys('adoxyz',false,true); print_r($arr); if (!$arr) Err("Bad MetaForeignKeys"); break; case 'odbc_mssql': case 'mssqlpo': print "

Testing Foreign Keys

"; $arr = $db->MetaForeignKeys('Orders',false,true); print_r($arr); if (!$arr) Err("Bad MetaForeignKeys"); if ($db->databaseType == 'odbc_mssql') break; case 'mssql': /* ASSUME Northwind available... CREATE PROCEDURE SalesByCategory @CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998' AS IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998' BEGIN SELECT @OrdYear = '1998' END SELECT ProductName, TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0) FROM [Order Details] OD, Orders O, Products P, Categories C WHERE OD.OrderID = O.OrderID AND OD.ProductID = P.ProductID AND P.CategoryID = C.CategoryID AND C.CategoryName = @CategoryName AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear GROUP BY ProductName ORDER BY ProductName GO */ print "

Testing Stored Procedures for mssql

"; $saved = $db->debug; $db->debug=true; $cat = 'Dairy Products'; $yr = '1998'; $stmt = $db->PrepareSP('SalesByCategory'); $db->Parameter($stmt,$cat,'CategoryName'); $db->Parameter($stmt,$yr,'OrdYear'); $rs = $db->Execute($stmt); rs2html($rs); $cat = 'Grains/Cereals'; $yr = 1998; $stmt = $db->PrepareSP('SalesByCategory'); $db->Parameter($stmt,$cat,'CategoryName'); $db->Parameter($stmt,$yr,'OrdYear'); $rs = $db->Execute($stmt); rs2html($rs); /* Test out params - works in 4.2.3 but not 4.3.0???: CREATE PROCEDURE at_date_interval @days INTEGER, @start VARCHAR(20) OUT, @end VARCHAR(20) OUT AS BEGIN set @start = CONVERT(VARCHAR(20), getdate(), 101) set @end =CONVERT(VARCHAR(20), dateadd(day, @days, getdate()), 101 ) END GO */ $db->debug=1; $stmt = $db->PrepareSP('at_date_interval'); $days = 10; $begin_date = ''; $end_date = ''; $db->Parameter($stmt,$days,'days', false, 4, SQLINT4); $db->Parameter($stmt,$begin_date,'start', 1, 20, SQLVARCHAR ); $db->Parameter($stmt,$end_date,'end', 1, 20, SQLVARCHAR ); $db->Execute($stmt); if (empty($begin_date) or empty($end_date)) { Err("MSSQL SP Test for OUT Failed"); print "begin=$begin_date end=$end_date

"; } else print "(Today +10days) = (begin=$begin_date end=$end_date)

"; $db->debug = $saved; break; case 'oci8': case 'oci8po': $saved = $db->debug; $db->debug=true; print "

Testing Foreign Keys

"; $arr = $db->MetaForeignKeys('emp'); print_r($arr); if (!$arr) Err("Bad MetaForeignKeys"); print "

Testing Cursor Variables

"; /* -- TEST PACKAGE CREATE OR REPLACE PACKAGE adodb AS TYPE TabType IS REF CURSOR RETURN tab%ROWTYPE; PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames in varchar); END adodb; / CREATE OR REPLACE PACKAGE BODY adodb AS PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames in varchar) IS BEGIN OPEN tabcursor FOR SELECT * FROM tab where tname like tablenames; END open_tab; END adodb; / */ $stmt = $db->Prepare("BEGIN adodb.open_tab(:RS,'A%'); END;"); $db->Parameter($stmt, $cur, 'RS', false, -1, OCI_B_CURSOR); $rs = $db->Execute($stmt); if ($rs && !$rs->EOF) { print "Test 1 RowCount: ".$rs->RecordCount()."

"; } else { print "Error in using Cursor Variables 1

"; } $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:RS2,:TAB); END;",'RS2',array('TAB'=>'A%')); if ($rs && !$rs->EOF) { print "Test 2 RowCount: ".$rs->RecordCount()."

"; } else { print "Error in using Cursor Variables 2

"; } print "

Testing Stored Procedures for oci8

"; $tname = 'A%'; $stmt = $db->PrepareSP('select * from tab where tname like :tablename'); $db->Parameter($stmt,$tname,'tablename'); $rs = $db->Execute($stmt); rs2html($rs); $db->debug = $saved; break; default: break; } $arr = array( array(1,'Caroline','Miranda'), array(2,'John','Lim'), array(3,'Wai Hun','See') ); $db->debug=1; print "

Testing Bulk Insert of 3 rows

"; $sql = "insert into ADOXYZ (id,firstname,lastname) values (?,?,?)"; $db->StartTrans(); $db->Execute($sql,$arr); $db->CompleteTrans(); $rs = $db->Execute('select * from ADOXYZ order by id'); if ($rs->RecordCount() != 3) Err("Bad bulk insert"); rs2html($rs); $db->Execute('delete from ADOXYZ'); print "

Inserting 50 rows

"; for ($i = 0; $i < 5; $i++) { $time = $db->DBDate(time()); if (empty($HTTP_GET_VARS['hide'])) $db->debug = true; switch($db->databaseType){ default: $arr = array(0=>'Caroline',1=>'Miranda'); $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)"; break; case 'oci8': case 'oci805': $arr = array('first'=>'Caroline','last'=>'Miranda'); $amt = rand() % 100; $sql = "insert into ADOXYZ (id,firstname,lastname,created,amount) values ($i*10+0,:first,:last,$time,$amt)"; break; } if ($i & 1) { $sql = $db->Prepare($sql); } $rs = $db->Execute($sql,$arr); if ($rs === false) Err( 'Error inserting with parameters'); else $rs->Close(); $db->debug = false; $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+1,'John','Lim',$time)"); echo "Insert ID=";var_dump($db->Insert_ID()); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+2,'Mary','Lamb',$time )"); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+3,'George','Washington',$time )"); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+4,'Mr. Alan','Tam',$time )"); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+5,'Alan',".$db->quote("Turing'ton").",$time )"); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created)values ($i*10+6,'Serena','Williams',$time )"); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+7,'Yat Sun','Sun',$time )"); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+8,'Wai Hun','See',$time )"); $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+9,'Steven','Oey',$time )"); } // for if (1) { $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $cnt = $db->GetOne("select count(*) from ADOXYZ"); $rs = $db->Execute('update ADOXYZ set id=id+1'); if (!is_object($rs)) { print_r($rs); err("Update should return object"); } if (!$rs) err("Update generated error"); $nrows = $db->Affected_Rows(); if ($nrows === false) print "

Affected_Rows() not supported

"; else if ($nrows != $cnt) print "

Affected_Rows() Error: $nrows returned (should be 50)

"; else print "

Affected_Rows() passed

"; } $db->debug = false; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; ////////////////////////////////////////////////////////////////////////////////////////// $rs = $db->Execute("select * from ADOXYZ where firstname = 'not known'"); if (!$rs || !$rs->EOF) print "

Error on empty recordset

"; else if ($rs->RecordCount() != 0) { print "

Error on RecordCount. Should be 0. Was ".$rs->RecordCount()."

"; print_r($rs->fields); } $rs = &$db->Execute("select id,firstname,lastname,created from ADOXYZ order by id"); if ($rs) { if ($rs->RecordCount() != 50) { print "

RecordCount returns ".$rs->RecordCount()."

"; $poc = $rs->PO_RecordCount('ADOXYZ'); if ($poc == 50) print "

    PO_RecordCount passed

"; else print "

PO_RecordCount returns wrong value: $poc

"; } else print "

RecordCount() passed

"; if (isset($rs->fields['firstname'])) print '

The fields columns can be indexed by column name.

'; else { Err( '

The fields columns cannot be indexed by column name.

'); print_r($rs->fields); } if (empty($HTTP_GET_VARS['hide'])) rs2html($rs); } else print "Error in Execute of SELECT

"; $val = $db->GetOne("select count(*) from ADOXYZ"); if ($val == 50) print "

GetOne returns ok

"; else print "

Fail: GetOne returns $val

"; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $val = $db->GetRow("select count(*) from ADOXYZ"); if ($val[0] == 50 and sizeof($val) == 1) print "

GetRow returns ok

"; else { print_r($val); print "

Fail: GetRow returns {$val[0]}

"; } print "

FetchObject/FetchNextObject Test

"; $rs = &$db->Execute('select * from ADOXYZ'); if (empty($rs->connection)) print "Connection object missing from recordset
"; while ($o = $rs->FetchNextObject()) { // calls FetchObject internally if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) { print_r($o); print "

Firstname is not string

"; break; } } $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; print "

FetchObject/FetchNextObject Test 2

"; $rs = &$db->Execute('select * from ADOXYZ'); if (empty($rs->connection)) print "Connection object missing from recordset
"; print_r($rs->fields); while ($o = $rs->FetchNextObject()) { // calls FetchObject internally if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) { print_r($o); print "

Firstname is not string

"; break; } } $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $savefetch = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; print "

CacheSelectLimit Test

"; $db->debug=1; $rs = $db->CacheSelectLimit(' select id, firstname from ADOXYZ order by id',2); if ($rs && !$rs->EOF) { if (isset($rs->fields[0])) { Err("ASSOC has numeric fields"); print_r($rs->fields); } if ($rs->fields['id'] != 1) {Err("Error"); print_r($rs->fields);}; if (trim($rs->fields['firstname']) != 'Caroline') {print Err("Error 2"); print_r($rs->fields);}; $rs->MoveNext(); if ($rs->fields['id'] != 2) {Err("Error 3"); print_r($rs->fields);}; $rs->MoveNext(); if (!$rs->EOF) { Err("Error EOF"); print_r($rs); } } print "

FETCH_MODE = ASSOC: Should get 1, Caroline

"; $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',2); if ($rs && !$rs->EOF) { if ($rs->fields['id'] != 1) {Err("Error 1"); print_r($rs->fields);}; if (trim($rs->fields['firstname']) != 'Caroline') {Err("Error 2"); print_r($rs->fields);}; $rs->MoveNext(); if ($rs->fields['id'] != 2) {Err("Error 3"); print_r($rs->fields);}; $rs->MoveNext(); if (!$rs->EOF) Err("Error EOF"); else if (is_array($rs->fields) || $rs->fields) { Err("Error: ## fields should be set to false on EOF"); print_r($rs->fields); } } $ADODB_FETCH_MODE = ADODB_FETCH_NUM; print "

FETCH_MODE = NUM: Should get 1, Caroline

"; $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',1); if ($rs && !$rs->EOF) { if (isset($rs->fields['id'])) Err("FETCH_NUM has ASSOC fields"); if ($rs->fields[0] != 1) {Err("Error 1"); print_r($rs->fields);}; if (trim($rs->fields[1]) != 'Caroline') {Err("Error 2");print_r($rs->fields);}; $rs->MoveNext(); if (!$rs->EOF) Err("Error EOF"); } $ADODB_FETCH_MODE = $savefetch; $db->debug = false; print "

GetRowAssoc Upper: Should get 1, Caroline

"; $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',1); if ($rs && !$rs->EOF) { $arr = &$rs->GetRowAssoc(); if ($arr['ID'] != 1) {Err("Error 1");print_r($arr);}; if (trim($arr['FIRSTNAME']) != 'Caroline') {Err("Error 2"); print_r($arr);}; $rs->MoveNext(); if (!$rs->EOF) Err("Error EOF"); } print "

GetRowAssoc Lower: Should get 1, Caroline

"; $rs = &$db->SelectLimit('select id,firstname from ADOXYZ order by id',1); if ($rs && !$rs->EOF) { $arr = &$rs->GetRowAssoc(false); if ($arr['id'] != 1) {Err("Error 1"); print_r($arr);}; if (trim($arr['firstname']) != 'Caroline') {Err("Error 2"); print_r($arr);}; } print "

GetCol Test

"; $col = $db->GetCol('select distinct firstname from adoxyz order by 1'); if (!is_array($col)) Err("Col size is wrong"); if (trim($col[0]) != 'Alan' or trim($col[9]) != 'Yat Sun') Err("Col elements wrong"); $db->debug = true; print "

SelectLimit Distinct Test 1: Should see Caroline, John and Mary

"; $rs = &$db->SelectLimit('select distinct * from ADOXYZ order by id',3); $db->debug=false; if ($rs && !$rs->EOF) { if (trim($rs->fields[1]) != 'Caroline') Err("Error 1"); $rs->MoveNext(); if (trim($rs->fields[1]) != 'John') Err("Error 2"); $rs->MoveNext(); if (trim($rs->fields[1]) != 'Mary') Err("Error 3"); $rs->MoveNext(); if (! $rs->EOF) Err("Error EOF"); //rs2html($rs); } else Err("Failed SelectLimit Test 1"); print "

SelectLimit Test 2: Should see Mary, George and Mr. Alan

"; $rs = &$db->SelectLimit('select * from ADOXYZ order by id',3,2); if ($rs && !$rs->EOF) { if (trim($rs->fields[1]) != 'Mary') Err("Error 1"); $rs->MoveNext(); if (trim($rs->fields[1]) != 'George')Err("Error 2"); $rs->MoveNext(); if (trim($rs->fields[1]) != 'Mr. Alan') Err("Error 3"); $rs->MoveNext(); if (! $rs->EOF) Err("Error EOF"); // rs2html($rs); } else Err("Failed SelectLimit Test 2"); print "

SelectLimit Test 3: Should see Wai Hun and Steven

"; $db->debug=1; global $A; $A=1; $rs = &$db->SelectLimit('select * from ADOXYZ order by id',-1,48); $A=0; if ($rs && !$rs->EOF) { if (empty($rs->connection)) print "Connection object missing from recordset
"; if (trim($rs->fields[1]) != 'Wai Hun') Err("Error 1 ".$rs->fields[1]); $rs->MoveNext(); if (trim($rs->fields[1]) != 'Steven') Err("Error 2 ".$rs->fields[1]); $rs->MoveNext(); if (! $rs->EOF) { Err("Error EOF"); } //rs2html($rs); } else Err("Failed SelectLimit Test 3"); $db->debug = false; $rs = &$db->Execute("select * from ADOXYZ order by id"); print "

Testing Move()

"; if (!$rs)Err( "Failed Move SELECT"); else { if (!$rs->Move(2)) { if (!$rs->canSeek) print "

$db->databaseType: Move(), MoveFirst() nor MoveLast() not supported.

"; else print '

RecordSet->canSeek property should be set to false

'; } else { $rs->MoveFirst(); if (trim($rs->Fields("firstname")) != 'Caroline') { print "

$db->databaseType: MoveFirst failed -- probably cannot scroll backwards

"; } else print "MoveFirst() OK
"; // Move(3) tests error handling -- MoveFirst should not move cursor $rs->Move(3); if (trim($rs->Fields("firstname")) != 'George') { print '

'.$rs->Fields("id")."$db->databaseType: Move(3) failed

"; } else print "Move(3) OK
"; $rs->Move(7); if (trim($rs->Fields("firstname")) != 'Yat Sun') { print '

'.$rs->Fields("id")."$db->databaseType: Move(7) failed

"; print_r($rs); } else print "Move(7) OK
"; if ($rs->EOF) Err("Move(7) is EOF already"); $rs->MoveLast(); if (trim($rs->Fields("firstname")) != 'Steven'){ print '

'.$rs->Fields("id")."$db->databaseType: MoveLast() failed

"; print_r($rs); }else print "MoveLast() OK
"; $rs->MoveNext(); if (!$rs->EOF) err("Bad MoveNext"); if ($rs->canSeek) { $rs->Move(3); if (trim($rs->Fields("firstname")) != 'George') { print '

'.$rs->Fields("id")."$db->databaseType: Move(3) after MoveLast failed

"; } else print "Move(3) after MoveLast() OK
"; } print "

Empty Move Test"; $rs = $db->Execute("select * from ADOXYZ where id > 0 and id < 0"); $rs->MoveFirst(); if (!$rs->EOF || $rs->fields) Err("Error in empty move first"); } } $rs = $db->Execute('select * from ADOXYZ where id = 2'); if ($rs->EOF || !is_array($rs->fields)) Err("Error in select"); $rs->MoveNext(); if (!$rs->EOF) Err("Error in EOF (xx) "); // $db->debug=true; print "

Testing ADODB_FETCH_ASSOC and concat: concat firstname and lastname

"; $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; if ($db->dataProvider == 'postgres') { $sql = "select ".$db->Concat('cast(firstname as varchar)',$db->qstr(' '),'lastname')." as fullname,id from ADOXYZ"; $rs = &$db->Execute($sql); } else { $sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id from ADOXYZ"; $rs = &$db->Execute($sql); } if ($rs) { if (empty($HTTP_GET_VARS['hide'])) rs2html($rs); } else { Err( "Failed Concat:".$sql); } $ADODB_FETCH_MODE = $save; print "
Testing GetArray() "; //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rs = &$db->Execute("select * from ADOXYZ order by id"); if ($rs) { $arr = &$rs->GetArray(10); if (sizeof($arr) != 10 || trim($arr[1][1]) != 'John' || trim($arr[1][2]) != 'Lim') print $arr[1][1].' '.$arr[1][2]."   ERROR
"; else print " OK
"; } $arr = $db->GetArray("select x from ADOXYZ"); $e = $db->ErrorMsg(); $e2 = $db->ErrorNo(); echo "Testing error handling, should see illegal column 'x' error=$e ($e2)
"; if (!$e || !$e2) Err("Error handling did not work"); print "Testing FetchNextObject for 1 object "; $rs = &$db->Execute("select distinct lastname,firstname from ADOXYZ where firstname='Caroline'"); $fcnt = 0; if ($rs) while ($o = $rs->FetchNextObject()) { $fcnt += 1; } if ($fcnt == 1) print " OK
"; else print "FAILED
"; $stmt = $db->Prepare("select * from ADOXYZ where id < 3"); $rs = $db->Execute($stmt); if (!$rs) Err("Prepare failed"); else { $arr = $rs->GetArray(); if (!$arr) Err("Prepare failed 2"); if (sizeof($arr) != 2) Err("Prepare failed 3"); } print "Testing GetAssoc() "; $savecrecs = $ADODB_COUNTRECS; $ADODB_COUNTRECS = false; $rs = &$db->Execute("select distinct lastname,firstname from ADOXYZ"); if ($rs) { $arr = $rs->GetAssoc(); //print_r($arr); if (trim($arr['See']) != 'Wai Hun') print $arr['See']."   ERROR
"; else print " OK 1"; } $arr = &$db->GetAssoc("select distinct lastname,firstname from ADOXYZ"); if ($arr) { //print_r($arr); if (trim($arr['See']) != 'Wai Hun') print $arr['See']."   ERROR
"; else print " OK 2
"; } // Comment this out to test countrecs = false $ADODB_COUNTRECS = $savecrecs; for ($loop=0; $loop < 1; $loop++) { print "Testing GetMenu() and CacheExecute
"; $db->debug = true; $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu('menu','Steven').'
'; else print " Fail
"; $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu('menu','Steven',false).'
'; else print " Fail
"; $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); if ($rs) print ' Multiple, Alan selected: '. $rs->GetMenu('menu','Alan',false,true).'
'; else print " Fail
"; print '


'; $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); if ($rs) { print ' Multiple, Alan and George selected: '. $rs->GetMenu('menu',array('Alan','George'),false,true); if (empty($rs->connection)) print "Connection object missing from recordset
"; } else print " Fail
"; print '


'; print "Testing GetMenu2()
"; $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu2('menu',('Oey')).'
'; else print " Fail
"; $rs = &$db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu2('menu',('Oey'),false).'
'; else print " Fail
"; } $db->debug = false; // phplens $sql = 'select * from ADOXYZ where 0=1'; echo "

**Testing '$sql' (phplens compat 1)

"; $rs = &$db->Execute($sql); if (!$rs) err( "No recordset returned for '$sql'"); if (!$rs->FieldCount()) err( "No fields returned for $sql"); if (!$rs->FetchField(1)) err( "FetchField failed for $sql"); $sql = 'select * from ADOXYZ order by 1'; echo "

**Testing '$sql' (phplens compat 2)

"; $rs = &$db->Execute($sql); if (!$rs) err( "No recordset returned for '$sql'
".$db->ErrorMsg()."
"); $sql = 'select * from ADOXYZ order by 1,1'; echo "

**Testing '$sql' (phplens compat 3)

"; $rs = &$db->Execute($sql); if (!$rs) err( "No recordset returned for '$sql'
".$db->ErrorMsg()."
"); // Move $rs1 = &$db->Execute("select id from ADOXYZ where id <= 2 order by 1"); $rs2 = &$db->Execute("select id from ADOXYZ where id = 3 or id = 4 order by 1"); if ($rs1) $rs1->MoveLast(); if ($rs2) $rs2->MoveLast(); if (empty($rs1) || empty($rs2) || $rs1->fields[0] != 2 || $rs2->fields[0] != 4) { $a = $rs1->fields[0]; $b = $rs2->fields[0]; print "

Error in multiple recordset test rs1=$a rs2=$b (should be rs1=2 rs2=4)

"; } else print "

Testing multiple recordsets OK

"; echo "

GenID test: "; for ($i=1; $i <= 10; $i++) echo "($i: ",$val = $db->GenID($db->databaseType.'abcseq6' ,5), ") "; if ($val == 0) Err("GenID not supported"); if ($val) { $db->DropSequence('abc_seq2'); $db->CreateSequence('abc_seq2'); $val = $db->GenID('abc_seq2'); $db->DropSequence('abc_seq2'); $db->CreateSequence('abc_seq2'); $val = $db->GenID('abc_seq2'); if ($val != 1) Err("Drop and Create Sequence not supported ($val)"); } echo "

"; if (substr($db->dataProvider,0,3) != 'notused') { // used to crash ado $sql = "select firstnames from adoxyz"; print "

Testing execution of illegal statement: $sql

"; if ($db->Execute($sql) === false) { print "

This returns the following ErrorMsg(): ".$db->ErrorMsg()." and ErrorNo(): ".$db->ErrorNo().'

'; } else print "

Error in error handling -- Execute() should return false

"; } else print "

ADO skipped error handling of bad select statement

"; print "

ASSOC TEST 2
"; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rs = $db->query('select * from adoxyz order by id'); if ($ee = $db->ErrorMsg()) { Err("Error message=$ee"); } if ($ee = $db->ErrorNo()) { Err("Error No = $ee"); } print_r($rs->fields); for($i=0;$i<$rs->FieldCount();$i++) { $fld=$rs->FetchField($i); print "
Field name is ".$fld->name; print " ".$rs->Fields($fld->name); } print "

BOTH TEST 2
"; if ($db->dataProvider == 'ado') { print "ADODB_FETCH_BOTH not supported for dataProvider=".$db->dataProvider."
"; } else { $ADODB_FETCH_MODE = ADODB_FETCH_BOTH; $rs = $db->query('select * from adoxyz order by id'); for($i=0;$i<$rs->FieldCount();$i++) { $fld=$rs->FetchField($i); print "
Field name is ".$fld->name; print " ".$rs->Fields($fld->name); } } print "

NUM TEST 2
"; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $rs = $db->query('select * from adoxyz order by id'); for($i=0;$i<$rs->FieldCount();$i++) { $fld=$rs->FetchField($i); print "
Field name is ".$fld->name; print " ".$rs->Fields($fld->name); } print "

ASSOC Test of SelectLimit
"; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rs = $db->selectlimit('select * from adoxyz order by id',3,4); $cnt = 0; while ($rs && !$rs->EOF) { $cnt += 1; if (!isset($rs->fields['firstname'])) { print "
ASSOC returned numeric field

"; break; } $rs->MoveNext(); } if ($cnt != 3) print "
Count should be 3, instead it was $cnt

"; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($db->sysDate) { $saved = $db->debug; $db->debug = 1; $rs = $db->Execute("select {$db->sysDate} from adoxyz where id=1"); if (ADORecordSet::UnixDate(date('Y-m-d')) != $rs->UnixDate($rs->fields[0])) { print "

Invalid date {$rs->fields[0]}

"; } else print "

Passed \$sysDate test ({$rs->fields[0]})

"; print_r($rs->FetchField(0)); print time(); $db->debug=$saved; } else { print "

\$db->sysDate not defined

"; } print "

Test CSV

"; include_once('../toexport.inc.php'); //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rs = $db->SelectLimit('select id,firstname,lastname,created,\'He, he\' he,\'"\' q from adoxyz',10); print "
";
	print rs2csv($rs);
	print "
"; $rs = $db->SelectLimit('select id,firstname,lastname,created,\'The "young man", he said\' from adoxyz',10); print "
";
	rs2tabout($rs);
	print "
"; //print " CacheFlush "; //$db->CacheFlush(); $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A'); $sql = "SELECT $date from ADOXYZ"; print "

Test SQLDate: ".htmlspecialchars($sql)."

"; $rs = $db->SelectLimit($sql,1); $d = date('d-m-M-Y-').'Q'.(ceil(date('m')/3.0)).date(' h:i:s A'); if (!$rs) Err("SQLDate query returned no recordset"); else if ($d != $rs->fields[0]) Err("SQLDate 1 failed expected:
act:$d
sql:".$rs->fields[0]); $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A',$db->DBDate("1974-02-25")); $sql = "SELECT $date from ADOXYZ"; print "

Test SQLDate: ".htmlspecialchars($sql)."

"; $rs = $db->SelectLimit($sql,1); $ts = ADOConnection::UnixDate('1974-02-25'); $d = date('d-m-M-Y-',$ts).'Q'.(ceil(date('m',$ts)/3.0)).date(' h:i:s A',$ts); if (!$rs) Err("SQLDate query returned no recordset"); else if ($d != $rs->fields[0]) Err("SQLDate 2 failed expected:
act:$d
sql:".$rs->fields[0]); print "

Test Filter

"; $db->debug = 1; $rs = $db->SelectLimit('select * from ADOXYZ where id < 3 order by id'); $rs = RSFilter($rs,'do_strtolower'); if (trim($rs->fields[1]) != 'caroline' && trim($rs->fields[2]) != 'miranda') { err('**** RSFilter failed'); print_r($rs->fields); } rs2html($rs); $db->debug=1; print "

Test Replace

"; $ret = $db->Replace('adoxyz', array('id'=>1,'firstname'=>'Caroline','lastname'=>'Miranda'), array('id'), $autoq = true); if (!$ret) echo "

Error in replacing existing record

"; else { $saved = $db->debug; $db->debug = 0; $savec = $ADODB_COUNTRECS; $ADODB_COUNTRECS = true; $rs = $db->Execute('select * FROM ADOXYZ where id=1'); $db->debug = $saved; if ($rs->RecordCount() != 1) { $cnt = $rs->RecordCount(); rs2html($rs); print "Error - Replace failed, count=$cnt

"; } $ADODB_COUNTRECS = $savec; } $ret = $db->Replace('adoxyz', array('id'=>1000,'firstname'=>'Harun','lastname'=>'Al-Rashid'), array('id','firstname'), $autoq = true); if ($ret != 2) print "Replace failed: "; print "test A return value=$ret (2 expected)

"; $ret = $db->Replace('adoxyz', array('id'=>1000,'firstname'=>'Sherazade','lastname'=>'Al-Rashid'), 'id', $autoq = true); if ($ret != 1) if ($db->dataProvider == 'ibase' && $ret == 2); else print "Replace failed: "; print "test B return value=$ret (1 or if ibase then 2 expected)

"; print "

rs2rs Test

"; $rs = $db->Execute('select * from adoxyz order by id'); $rs = $db->_rs2rs($rs); $rs->valueX = 'X'; $rs->MoveNext(); $rs = $db->_rs2rs($rs); if (!isset($rs->valueX)) err("rs2rs does not preserve array recordsets"); if (reset($rs->fields) != 1) err("rs2rs does not move to first row"); ///////////////////////////////////////////////////////////// include_once('../pivottable.inc.php'); print "

Pivot Test

"; $db->debug=true; $sql = PivotTableSQL( $db, # adodb connection 'adoxyz', # tables 'firstname', # row fields 'lastname', # column fields false, # join 'ID' # sum ); $rs = $db->Execute($sql); if ($rs) rs2html($rs); else Err("Pivot sql error"); $db->debug=false; include_once "PEAR.php"; // PEAR TESTS BELOW $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $pear = true; $rs = $db->query('select * from adoxyz where id>0 and id<10 order by id'); $i = 0; if ($rs && !$rs->EOF) { while ($arr = $rs->fetchRow()) { $i++; //print "$i "; if ($arr[0] != $i) { print_r($arr); print "

PEAR DB emulation error 1.

"; $pear = false; break; } } $rs->Close(); } if ($i != $db->GetOne('select count(*) from adoxyz where id>0 and id<10')) { print "

PEAR DB emulation error 1.1 EOF ($i)

"; $pear = false; } $rs = $db->limitQuery('select * from adoxyz where id>0 order by id',$i=3,$top=3); $i2 = $i; if ($rs && !$rs->EOF) { while (!is_object($rs->fetchInto($arr))) { $i2++; // print_r($arr); // print "$i ";print_r($arr); if ($arr[0] != $i2) { print "

PEAR DB emulation error 2.

"; $pear = false; break; } } $rs->Close(); } if ($i2 != $i+$top) { print "

PEAR DB emulation error 2.1 EOF (correct=$i+$top, actual=$i2)

"; $pear = false; } if ($pear) print "

PEAR DB emulation passed.

"; if ($db->hasTransactions) { //$db->debug=1; echo "

Testing StartTrans CompleteTrans

"; $db->raiseErrorFn = false; $db->StartTrans(); $rs = $db->Execute('select * from notable'); $db->StartTrans(); $db->BeginTrans(); $db->Execute("update ADOXYZ set firstname='Carolx' where id=1"); $db->CommitTrans(); $db->CompleteTrans(); $rez = $db->CompleteTrans(); if ($rez !== false) { if (is_null($rez)) Err("Error: _transOK not modified"); else Err("Error: CompleteTrans (1) should have failed"); } else { $name = $db->GetOne("Select firstname from ADOXYZ where id=1"); if ($name == "Carolx") Err("Error: CompleteTrans (2) should have failed"); else echo "

-- Passed StartTrans test1 - rolling back

"; } $db->StartTrans(); $db->BeginTrans(); $db->Execute("update ADOXYZ set firstname='Carolx' where id=1"); $db->RollbackTrans(); $rez = $db->CompleteTrans(); if ($rez !== true) Err("Error: CompleteTrans (1) should have succeeded"); else { $name = $db->GetOne("Select firstname from ADOXYZ where id=1"); if (trim($name) != "Carolx") Err("Error: CompleteTrans (2) should have succeeded, returned name=$name"); else echo "

-- Passed StartTrans test2 - commiting

"; } } global $TESTERRS; $debugerr = true; global $ADODB_LANG;$ADODB_LANG = 'fr'; $db->debug = false; $TESTERRS = 0; $db->raiseErrorFn = 'adodb_test_err'; global $ERRNO; // from adodb_test_err $db->Execute('select * from nowhere'); $metae = $db->MetaError($ERRNO); if ($metae !== DB_ERROR_NOSUCHTABLE) print "

MetaError=".$metae." wrong, should be ".DB_ERROR_NOSUCHTABLE."

"; else print "

MetaError ok (".DB_ERROR_NOSUCHTABLE."): ".$db->MetaErrorMsg($metae)."

"; if ($TESTERRS != 1) print "raiseErrorFn select nowhere failed
"; $rs = $db->Execute('select * from adoxyz'); if ($debugerr) print " Move"; $rs->Move(100); $rs->_queryID = false; if ($debugerr) print " MoveNext"; $rs->MoveNext(); if ($debugerr) print " $rs=false"; $rs = false; print "

SetFetchMode() tests

"; $db->SetFetchMode(ADODB_FETCH_ASSOC); $rs = $db->SelectLimit('select firstname from adoxyz',1); // var_dump($rs->fields); if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC"); $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $rs = $db->SelectLimit('select firstname from adoxyz',1); //var_dump($rs->fields); if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC"); $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $db->SetFetchMode(ADODB_FETCH_NUM); $rs = $db->SelectLimit('select firstname from adoxyz',1); if (!isset($rs->fields[0])) Err("BAD FETCH NUM"); print "

Test MetaTables again with SetFetchMode()

"; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $db->SetFetchMode(ADODB_FETCH_ASSOC); print_r($db->MetaTables()); print "

"; //////////////////////////////////////////////////////////////////// $conn = NewADOConnection($db->databaseType); $conn->raiseErrorFn = 'adodb_test_err'; @$conn->Connect('abc'); if ($TESTERRS == 2) print "raiseErrorFn tests passed
"; else print "raiseErrorFn tests failed ($TESTERRS)
"; //////////////////////////////////////////////////////////////////// global $nocountrecs; if (isset($nocountrecs) && $ADODB_COUNTRECS) err("Error: \$ADODB_COUNTRECS is set"); if (empty($nocountrecs) && $ADODB_COUNTRECS==false) err("Error: \$ADODB_COUNTRECS is not set"); ?>

 

Close(); if ($rs2) $rs2->Close(); if ($rs) $rs->Close(); $db->Close(); if ($db->transCnt != 0) Err("Error in transCnt=$db->transCnt (should be 0)"); printf("

Total queries=%d; total cached=%d

",$EXECS+$CACHED, $CACHED); } function adodb_test_err($dbms, $fn, $errno, $errmsg, $p1=false, $p2=false) { global $TESTERRS,$ERRNO; $ERRNO = $errno; $TESTERRS += 1; print "** $dbms ($fn): errno=$errno   errmsg=$errmsg ($p1,$p2)
"; } //-------------------------------------------------------------------------------------- set_time_limit(240); // increase timeout include("../tohtml.inc.php"); include("../adodb.inc.php"); include("../rsfilter.inc.php"); /* White Space Check */ if (@$HTTP_SERVER_VARS['COMPUTERNAME'] == 'TIGRESS') { CheckWS('mysqlt'); CheckWS('postgres'); CheckWS('oci8po'); CheckWS('firebird'); CheckWS('sybase'); CheckWS('informix'); CheckWS('ado_mssql'); CheckWS('ado_access'); CheckWS('mssql'); // CheckWS('vfp'); CheckWS('sqlanywhere'); CheckWS('db2'); CheckWS('access'); CheckWS('odbc_mssql'); // CheckWS('oracle'); CheckWS('proxy'); CheckWS('fbsql'); print "White Space Check complete

"; } if (sizeof($HTTP_GET_VARS) == 0) $testmysql = true; foreach($HTTP_GET_VARS as $k=>$v) { //global $$k; $$k = $v; } if (strpos(PHP_VERSION,'5') === 0) { //$testaccess=1; //$testmssql = 1; //$testsqlite=1; } ?> ADODB Testing

ADODB Test

This script tests the following databases: Interbase, Oracle, Visual FoxPro, Microsoft Access (ODBC and ADO), MySQL, MSSQL (ODBC, native, ADO). There is also support for Sybase, PostgreSQL.

For the latest version of ADODB, visit php.weblogs.com.

Test GetInsertSQL/GetUpdateSQL   Sessions   Paging   Perf Monitor

ADODB Database Library (c) 2000-2003 John Lim. All rights reserved. Released under BSD and LGPL.