From 8df3db566a3a937b45ebf11adb90d265e6f5e2d4 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 17 Nov 2019 20:45:02 +0100 Subject: initial checking of customized version 1.0rc9 --- vendor/adodb/adodb-php/tests/test.php | 1781 +++++++++++++++++++++++++++++++++ 1 file changed, 1781 insertions(+) create mode 100644 vendor/adodb/adodb-php/tests/test.php (limited to 'vendor/adodb/adodb-php/tests/test.php') diff --git a/vendor/adodb/adodb-php/tests/test.php b/vendor/adodb/adodb-php/tests/test.php new file mode 100644 index 0000000..030e85c --- /dev/null +++ b/vendor/adodb/adodb-php/tests/test.php @@ -0,0 +1,1781 @@ +$msg
"; + flush(); +} + +function CheckWS($conn) +{ +global $ADODB_EXTENSION; + + include_once('../session/adodb-session.php'); + if (defined('CHECKWSFAIL')){ echo " TESTING $conn ";flush();} + $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) { + if (is_object($v)) $arr[$k] = adodb_pr($v,true); + else $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,$ADODB_COUNTRECS; + + //adodb_pr($db); + +?>
+

+
 
+

+Execute('select lastname,firstname,lastname,id from ADOXYZ'); + $arr = $rs->GetAssoc(); + echo "
";print_r($arr);
+	die();*/
+
+	if (!$db) die("testdb: database not inited");
+	GLOBAL $EXECS, $CACHED;
+
+	$EXECS = 0;
+	$CACHED = 0;
+	//$db->Execute("drop table adodb_logsql");
+	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();/* + $sql = +"SELECT t1.sid, t1.sid, t1.title, t1.hometext, t1.notes, t1.aid, t1.informant, +t2.url, t2.email, t1.catid, t3.title, t1.topic, t4.topicname, t4.topicimage, +t4.topictext, t1.score, t1.ratings, t1.counter, t1.comments, t1.acomm +FROM `nuke_stories` `t1`, `nuke_authors` `t2`, `nuke_stories_cat` `t3`, `nuke_topics` `t4` + WHERE ((t2.aid=t1.aid) AND (t3.catid=t1.catid) AND (t4.topicid=t1.topic) + AND ((t1.alanguage='german') OR (t1.alanguage='')) AND (t1.ihome='0')) + ORDER BY t1.time DESC"; + $db->SelectLimit($sql); + echo $db->ErrorMsg();*/ + } + $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"; + print "

Host: $db->host"; + print "
Database: $db->database"; + print "
PHP: $phpv $ext

"; + + flush(); + + print "Current timezone: " . date_default_timezone_get() . "

"; + + $arr = $db->ServerInfo(); + print_r($arr); + echo E_ALL,' ',E_STRICT, "
"; + $e = error_reporting(E_ALL | E_STRICT); + echo error_reporting(),'

'; + flush(); + #$db->debug=1; + $tt = $db->Time(); + if ($tt == 0) echo '
$db->Time failed'; + else echo "
db->Time: ".date('d-m-Y H:i:s',$tt); + echo '
'; + + echo "Date=",$db->UserDate('2002-04-07'),'
'; + print "date1 (1969-02-20) = ".$db->DBDate('1969-2-20'); + print "
date1 (1999-02-20) = ".$db->DBDate('1999-2-20'); + print "
date1.1 1999 injection attack= ".$db->DBDate("'1999', ' injection attack '"); + 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 "
ts2 (1999-02-20) = ".$db->DBTimeStamp("'1999-2-20', 'injection attack'"); + 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)."

"; + print "
ts4 =".($db->UnixTimeStamp("19700101000101")+8*3600); + print "
ts5 =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123")); + print "
ts6 =".$db->UserTimeStamp("20040110092123"); + print "
ts7 =".$db->DBTimeStamp("20040110092123"); + 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'); + 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 = 99; + # $e = error_reporting(E_ALL-E_WARNING); + $db->Execute($createtab); + # error_reporting($e); + } + } + #error_reporting(E_ALL); + echo "

Testing Metatypes

"; + $t = $db->MetaType('varchar'); + if ($t != 'C') Err("Bad Metatype for varchar"); + + $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, FetchField when EOF, and GetInsertSQL

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

"; + if ($rs->EOF && (($ox = $rs->FetchField(0)) && !empty($ox->name))) { + $record['id'] = 99; + $record['firstname'] = 'John'; + $sql = $db->GetInsertSQL($rs, $record); + if (strtoupper($sql) != strtoupper("INSERT INTO ADOXYZ ( id, firstname ) VALUES ( 99, 'John' )")) Err("GetInsertSQL does not work on empty table: $sql"); + } else { + Err("FetchField does not work on empty recordset, meaning GetInsertSQL will fail..."); + } + 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 (views)

"; + 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 (mask)

"; + 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=0; + $rez = $db->MetaColumns("NOSUCHTABLEHERE"); + if ($rez !== false) { + Err("MetaColumns error handling failed"); + var_dump($rez); + } + $db->debug=1; + $a = $db->MetaColumns('ADOXYZ'); + if ($a===false) print "MetaColumns not supported

"; + else { + print "

Columns of ADOXYZ:
"; + foreach($a as $v) {print_r($v); echo "
";} + echo "
"; + } + + print "

Testing MetaIndexes

"; + + $a = $db->MetaIndexes(('ADOXYZ'),true); + if ($a===false) print "MetaIndexes not supported

"; + else { + print "

Indexes of ADOXYZ:
"; + adodb_pr($a); + echo "
"; + } + 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 'vfp': + + if (0) { + // memo test + $rs = $db->Execute("select data from memo"); + rs2html($rs); + } + break; + + 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("No 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 + + +CREATE PROCEDURE ADODBTestSP +@a nvarchar(25) +AS +SELECT GETDATE() AS T, @a AS A +GO +*/ + print "

Testing Stored Procedures for mssql

"; + $saved = $db->debug; + $db->debug=true; + $assoc = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $cmd = $db->PrepareSP('ADODBTestSP'); + $ss = "You should see me in the output."; + $db->InParameter($cmd,$ss,'a'); + $rs = $db->Execute($cmd); + #var_dump($rs->fields); + echo $rs->fields['T']." --- ".$rs->fields['A']."---
"; + + $cat = 'Dairy Products'; + $yr = '1998'; + + $stmt = $db->PrepareSP('SalesByCategory'); + $db->InParameter($stmt,$cat,'CategoryName'); + $db->InParameter($stmt,$yr,'OrdYear'); + $rs = $db->Execute($stmt); + rs2html($rs); + + $cat = 'Grains/Cereals'; + $yr = 1998; + + $stmt = $db->PrepareSP('SalesByCategory'); + $db->InParameter($stmt,$cat,'CategoryName'); + $db->InParameter($stmt,$yr,'OrdYear'); + $rs = $db->Execute($stmt); + rs2html($rs); + + $ADODB_FETCH_MODE = $assoc; + + /* + Test out params - works in PHP 4.2.3 and 4.3.3 and 4.3.8 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->InParameter($stmt,$days,'days', 4, SQLINT4); + $db->OutParameter($stmt,$begin_date,'start', 20, SQLVARCHAR ); + $db->OutParameter($stmt,$end_date,'end', 20, SQLVARCHAR ); + $db->Execute($stmt); + if (empty($begin_date) or empty($end_date) or $begin_date == $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': + + if (0) { + $t = getmicrotime(); + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $arr = $db->GetArray('select * from abalone_tree'); + $arr = $db->GetArray('select * from abalone_tree'); + $arr = $db->GetArray('select * from abalone_tree'); + echo "

t = ",getmicrotime() - $t,"

"; + die(); + } + + # cleanup + $db->Execute("delete from photos where id=99 or id=1"); + $db->Execute("insert into photos (id) values(1)"); + $db->Execute("update photos set photo=null,descclob=null where id=1"); + + $saved = $db->debug; + $db->debug=true; + + + + /* + CREATE TABLE PHOTOS + ( + ID NUMBER(16) primary key, + PHOTO BLOB, + DESCRIPTION VARCHAR2(4000 BYTE), + DESCCLOB CLOB + ); + + INSERT INTO PHOTOS (ID) VALUES(1); + */ + $s = ''; + for ($i = 0; $i <= 500; $i++) { + $s .= '1234567890'; + } + + $sql = "INSERT INTO photos ( ID, photo) ". + "VALUES ( :id, empty_blob() )". + " RETURNING photo INTO :xx"; + + + $blob_data = $s; + $id = 99; + + $stmt = $db->PrepareSP($sql); + $db->InParameter($stmt, $id, 'id'); + $blob = $db->InParameter($stmt, $s, 'xx',-1, OCI_B_BLOB); + $db->StartTrans(); + $result = $db->Execute($stmt); + $db->CompleteTrans(); + + $s2= $db->GetOne("select photo from photos where id=99"); + echo "
---$s2"; + if ($s !== $s2) Err("insert blob does not match"); + + print "

Testing Blob: size=".strlen($s)."

"; + $ok = $db->Updateblob('photos','photo',$s,'id=1'); + if (!$ok) Err("Blob failed 1"); + else { + $s2= $db->GetOne("select photo from photos where id=1"); + if ($s !== $s2) Err("updateblob does not match"); + } + + print "

Testing Clob: size=".strlen($s)."

"; + $ok = $db->UpdateClob('photos','descclob',$s,'id=1'); + if (!$ok) Err("Clob failed 1"); + else { + $s2= $db->GetOne("select descclob from photos where id=1"); + if ($s !== $s2) Err("updateclob does not match"); + } + + + $s = ''; + $s2 = ''; + print "

Testing Foreign Keys

"; + $arr = $db->MetaForeignKeys('emp','scott'); + print_r($arr); + if (!$arr) Err("Bad MetaForeignKeys"); +/* +-- TEST PACKAGE +-- "Set scan off" turns off substitution variables. +Set scan off; + +CREATE OR REPLACE PACKAGE Adodb AS +TYPE TabType IS REF CURSOR RETURN TAB%ROWTYPE; +PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR); +PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) ; +PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR); +PROCEDURE data_in(input IN VARCHAR); +PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER); +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; + + PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) IS + BEGIN + OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames; + tablenames := 'TEST'; + END open_tab2; + +PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR) IS + BEGIN + output := 'Cinta Hati '||input; + END; + +PROCEDURE data_in(input IN VARCHAR) IS + ignore varchar(1000); + BEGIN + ignore := input; + END; + +PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER) AS +BEGIN +p2 := p1; +END; +END Adodb; +/ + +*/ + + print "

Testing Cursor Variables

"; + $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:zz,'A%'); END;",'zz'); + + if ($rs && !$rs->EOF) { + $v = $db->GetOne("SELECT count(*) FROM tab where tname like 'A%'"); + if ($v == $rs->RecordCount()) print "Test 1 RowCount: OK

"; + else Err("Test 1 RowCount ".$rs->RecordCount().", actual = $v"); + } else { + print "Error in using Cursor Variables 1

"; + } + if ($rs) $rs->Close(); + + print "

Testing Stored Procedures for oci8

"; + + $stmt = $db->PrepareSP("BEGIN adodb.data_out(:a1, :a2); END;"); + $a1 = 'Malaysia'; + //$a2 = ''; # a2 doesn't even need to be defined! + $db->InParameter($stmt,$a1,'a1'); + $db->OutParameter($stmt,$a2,'a2'); + $rs = $db->Execute($stmt); + if ($rs) { + if ($a2 !== 'Cinta Hati Malaysia') print "Stored Procedure Error: a2 = $a2

"; + else echo "OK: a2=$a2

"; + } else { + print "Error in using Stored Procedure IN/Out Variables

"; + } + + $tname = 'A%'; + + $stmt = $db->PrepareSP('select * from tab where tname like :tablename'); + $db->Parameter($stmt,$tname,'tablename'); + $rs = $db->Execute($stmt); + rs2html($rs); + + $stmt = $db->PrepareSP("begin adodb.data_in(:a1); end;"); + $db->InParameter($stmt,$a1,'a1'); + $db->Execute($stmt); + + $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

"; + +// $db->debug=1; +// $db->Execute('select * from table where val=? AND value=?', array('val'=>'http ://www.whatever.com/test?=21', 'value'=>'blabl')); + + + $sql = "insert into ADOXYZ (id,firstname,lastname) values (".$db->Param('0').",".$db->Param('1').",".$db->Param('2').")"; + $db->bulkBind = true; + $db->StartTrans(); + $db->debug=99; + $db->Execute($sql,$arr); + $db->CompleteTrans(); + $db->bulkBind = false; + $rs = $db->Execute('select * from ADOXYZ order by id'); + if (!$rs || $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($_GET['hide'])) $db->debug = true; + switch($db->databaseType){ + case 'mssqlpo': + case 'mssql': + $sqlt = "CREATE TABLE mytable ( + row1 INT IDENTITY(1,1) NOT NULL, + row2 varchar(16), + PRIMARY KEY (row1))"; + //$db->debug=1; + if (!$db->Execute("delete from mytable")) + $db->Execute($sqlt); + + $ok = $db->Execute("insert into mytable (row2) values ('test')"); + $ins_id=$db->Insert_ID(); + echo "Insert ID=";var_dump($ins_id); + if ($ins_id == 0) Err("Bad Insert_ID()"); + $ins_id2 = $db->GetOne("select row1 from mytable"); + if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2"); + + $arr = array(0=>'Caroline',1=>'Miranda'); + $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)"; + break; + case 'mysqli': + case 'mysqlt': + case 'mysql': + $sqlt = "CREATE TABLE `mytable` ( + `row1` int(11) NOT NULL auto_increment, + `row2` varchar(16) NOT NULL default '', + PRIMARY KEY (`row1`), + KEY `myindex` (`row1`,`row2`) +) "; + if (!$db->Execute("delete from mytable")) + $db->Execute($sqlt); + + $ok = $db->Execute("insert into mytable (row2) values ('test')"); + $ins_id=$db->Insert_ID(); + echo "Insert ID=";var_dump($ins_id); + if ($ins_id == 0) Err("Bad Insert_ID()"); + $ins_id2 = $db->GetOne("select row1 from mytable"); + if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2"); + + 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) values ($i*10+0,:first,:last,$time)"; + 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)"); + /*$ins_id=$db->Insert_ID(); + echo "Insert ID=";var_dump($ins_id);*/ + if ($db->databaseType == 'mysql') if ($ins_id == 0) Err('Bad 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) { + $db->debug=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

"; + } + + if ($db->dataProvider == 'oci8') $array = array('zid'=>1,'zdate'=>date('Y-m-d',time())); + else $array=array(1,date('Y-m-d',time())); + + + #$array = array(1,date('Y-m-d',time())); + $id = $db->GetOne("select id from ADOXYZ + where id=".$db->Param('zid')." and created>=".$db->Param('ZDATE')."", + $array); + if ($id != 1) Err("Bad bind; id=$id"); + else echo "
Bind date/integer 1 passed"; + + $array =array(1,$db->BindDate(time())); + $id = $db->GetOne("select id from ADOXYZ + where id=".$db->Param('0')." and created>=".$db->Param('1')."", + $array); + if ($id != 1) Err("Bad bind; id=$id"); + else echo "
Bind date/integer 2 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); + } + if ($db->databaseType !== 'odbc') { + $rs = $db->Execute("select id,firstname,lastname,created,".$db->random." from ADOXYZ order by id"); + if ($rs) { + if ($rs->RecordCount() != 50) { + print "

RecordCount returns ".$rs->RecordCount().", should be 50

"; + adodb_pr($rs->GetArray()); + $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($_GET['hide'])) rs2html($rs); + } + else print "

Error in Execute of SELECT with random

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

GetOne returns ok

"; + else print "

Fail: GetOne returns $val

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

GetRow returns ok

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

Fail: GetRow returns {$val2[0]}

"; + } + + print "

FetchObject/FetchNextObject Test

"; + $rs = $db->Execute('select * from ADOXYZ'); + if ($rs) { + 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; + } + } + } else { + print "

Failed rs

"; + die("

ADOXYZ table cannot be read - die()"); + } + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + print "

FetchObject/FetchNextObject Test 2

"; + #$db->debug=99; + $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...

"; + $rs = $db->CacheSelectLimit('select id, firstname from ADOXYZ order by id',2); + + if (ADODB_ASSOC_CASE == 2 || $db->dataProvider == 'oci8') { + $id = 'ID'; + $fname = 'FIRSTNAME'; + }else { + $id = 'id'; + $fname = 'firstname'; + } + + + 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[$fname]) != '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 ASSOC_CASE=".ADODB_ASSOC_CASE."

"; + $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[$fname]) != '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(ADODB_ASSOC_CASE_UPPER); + + if ($arr[strtoupper($id)] != 1) {Err("Error 1");print_r($arr);}; + if (trim($arr[strtoupper($fname)]) != '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(ADODB_ASSOC_CASE_LOWER); + 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"); + + + $col = $db->CacheGetCol('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; + + + echo "

Date Update Test

"; + $zdate = date('Y-m-d',time()+3600*24); + $zdate = $db->DBDate($zdate); + $db->Execute("update ADOXYZ set created=$zdate where id=1"); + $row = $db->GetRow("select created,firstname from ADOXYZ where id=1"); + print_r($row); echo "
"; + + + + print "

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

"; + $rs = $db->SelectLimit('select distinct * from ADOXYZ order by id',3); + + + if ($rs && !$rs->EOF) { + if (trim($rs->fields[1]) != 'Caroline') Err("Error 1 (exp Caroline), ".$rs->fields[1]); + $rs->MoveNext(); + + if (trim($rs->fields[1]) != 'John') Err("Error 2 (exp John), ".$rs->fields[1]); + $rs->MoveNext(); + if (trim($rs->fields[1]) != 'Mary') Err("Error 3 (exp Mary),".$rs->fields[1]); + $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 - No Mary, instead: ".$rs->fields[1]); + $rs->MoveNext(); + if (trim($rs->fields[1]) != 'George')Err("Error 2 - No George, instead: ".$rs->fields[1]); + $rs->MoveNext(); + if (trim($rs->fields[1]) != 'Mr. Alan') Err("Error 3 - No Mr. Alan, instead: ".$rs->fields[1]); + $rs->MoveNext(); + if (! $rs->EOF) Err("Error EOF"); + // rs2html($rs); + } + else Err("Failed SelectLimit Test 2 ". ($rs ? 'EOF':'no RS')); + + 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,".$db->sysTimeStamp." as d from ADOXYZ"; + $rs = $db->Execute($sql); + } else { + $sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ"; + $rs = $db->Execute($sql); + } + if ($rs) { + if (empty($_GET['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() "; + + + if ($db->dataProvider == 'mysql') { + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $arr = $db->GetAssoc("SELECT 'adodb', '0'"); + var_dump($arr); + die(); + } + + $savecrecs = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + //$arr = $db->GetArray("select lastname,firstname from ADOXYZ"); + //print_r($arr); + print "
"; + $rs = $db->Execute("select distinct lastname,firstname,created from ADOXYZ"); + + if ($rs) { + $arr = $rs->GetAssoc(); + //print_r($arr); + if (empty($arr['See']) || trim(reset($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 (empty($arr['See']) || trim($arr['See']) != 'Wai Hun') print $arr['See']."   ERROR
"; + else print " OK 2
"; + } + // Comment this out to test countrecs = false + $ADODB_COUNTRECS = $savecrecs; + $db->debug=1; + $query = $db->Prepare("select count(*) from ADOXYZ"); + $rs = $db->CacheExecute(10,$query); + if (reset($rs->fields) != 50) echo Err("$cnt wrong for Prepare/CacheGetOne"); + + 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 ' 1st line set to **** , Steven selected: '. $rs->GetMenu('menu','Steven','1st:****').'
'; + 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 GetMenu3()
"; + $rs = $db->Execute("select ".$db->Concat('firstname',"'-'",'id').",id, lastname from ADOXYZ order by lastname,id"); + if ($rs) print "Grouped Menu: ".$rs->GetMenu3('name'); + else Err('Grouped Menu GetMenu3()'); + 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(6,"select distinct firstname,lastname from ADOXYZ"); + if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu2('menu',('Oey'),false).'
'; + else print " Fail
"; + } + echo "

CacheExecute

"; + + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); + print_r($rs->fields); echo $rs->fetchMode;echo "
"; + echo $rs->Fields($fname); + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); + print_r($rs->fields);echo "
"; + echo $rs->Fields($fname); + $db->debug = false; + + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + // 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.'abcseq7' ,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); + + if (PHP_VERSION < 5) { + 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]); + + $dbdate = $db->DBDate("1974-02-25"); + if (substr($db->dataProvider, 0, 8) == 'postgres') { + $dbdate .= "::TIMESTAMP"; + } + + $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A', $dbdate); + $sql = "SELECT $date from ADOXYZ"; + print "

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

"; + $db->debug=1; + $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"); + echo $db->ErrorMsg(),'
'; + } else if ($d != reset($rs->fields)) { + Err("SQLDate 2 failed expected:
act:$d
sql:".$rs->fields[0].'
'.$db->ErrorMsg()); + } + + + 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 where id>= 1 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: id=".reset($rs->fields)); + + ///////////////////////////////////////////////////////////// + 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 + 'Sum ', # label for sum + 'sum', # aggregate function + true + ); + $rs = $db->Execute($sql); + if ($rs) rs2html($rs); + else Err("Pivot sql error"); + + $pear = false; //true; + $db->debug=false; + + if ($pear) { + // PEAR TESTS BELOW + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + include_once "PEAR.php"; + $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.

"; + flush(); + + + $rs = $db->SelectLimit("select ".$db->sysDate." from ADOXYZ",1); + $date = $rs->fields[0]; + if (!$date) Err("Bad sysDate"); + else { + $ds = $db->UserDate($date,"d m Y"); + if ($ds != date("d m Y")) Err("Bad UserDate: ".$ds.' expected='.date("d m Y")); + else echo "Passed UserDate: $ds

"; + } + $db->debug=1; + if ($db->dataProvider == 'oci8') + $rs = $db->SelectLimit("select to_char(".$db->sysTimeStamp.",'YYYY-MM-DD HH24:MI:SS') from ADOXYZ",1); + else + $rs = $db->SelectLimit("select ".$db->sysTimeStamp." from ADOXYZ",1); + $date = $rs->fields[0]; + if (!$date) Err("Bad sysTimeStamp"); + else { + $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y"); + if ($ds != date("H \\h\\r\\s-d m Y")) Err("Bad UserTimeStamp: ".$ds.", correct is ".date("H \\h\\r\\s-d m Y")); + else echo "Passed UserTimeStamp: $ds

"; + + $date = 100; + $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y"); + $ds2 = date("H \\h\\r\\s-d m Y",$date); + if ($ds != $ds2) Err("Bad UserTimeStamp 2: $ds: $ds2"); + else echo "Passed UserTimeStamp 2: $ds

"; + } + flush(); + + if ($db->hasTransactions) { + $db->debug=1; + echo "

Testing StartTrans CompleteTrans

"; + $db->raiseErrorFn = false; + + $db->SetTransactionMode('SERIALIZABLE'); + $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(); + $db->SetTransactionMode(''); + $db->debug=0; + 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

"; + } + } + flush(); + $saved = $db->debug; + $db->debug=1; + $cnt = _adodb_getcount($db, 'select * from ADOXYZ where firstname in (select firstname from ADOXYZ)'); + echo "Count= $cnt"; + $db->debug=$saved; + + 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; + + flush(); + + print "

SetFetchMode() tests

"; + $db->SetFetchMode(ADODB_FETCH_ASSOC); + $rs = $db->SelectLimit('select firstname from ADOXYZ',1); + 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"); + + flush(); + + print "

Test MetaTables again with SetFetchMode()

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

"; + + //////////////////////////////////////////////////////////////////// + + print "

Testing Bad Connection

"; + flush(); + + if (true || PHP_VERSION < 5) { + if ($db->dataProvider == 'odbtp') $db->databaseType = 'odbtp'; + $conn = NewADOConnection($db->databaseType); + $conn->raiseErrorFn = 'adodb_test_err'; + if (1) $conn->PConnect('abc','baduser','badpassword'); + if ($TESTERRS == 2) print "raiseErrorFn tests passed
"; + else print "raiseErrorFn tests failed ($TESTERRS)
"; + + flush(); + } + //////////////////////////////////////////////////////////////////// + + 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"); + + flush(); +?> +

+
 
+

+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); + flush(); +} + +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 (isset($_SERVER['argv'][1])) { + //print_r($_SERVER['argv']); + $_GET[$_SERVER['argv'][1]] = 1; +} + +if (@$_SERVER['COMPUTERNAME'] == 'TIGRESS') { + CheckWS('mysqlt'); + CheckWS('postgres'); + CheckWS('oci8po'); + + CheckWS('firebird'); + CheckWS('sybase'); + if (!ini_get('safe_mode')) CheckWS('informix'); + + CheckWS('ado_mssql'); + CheckWS('ado_access'); + CheckWS('mssql'); + + CheckWS('vfp'); + CheckWS('sqlanywhere'); + CheckWS('db2'); + CheckWS('access'); + CheckWS('odbc_mssql'); + CheckWS('firebird15'); + // + CheckWS('oracle'); + CheckWS('proxy'); + CheckWS('fbsql'); + print "White Space Check complete

"; +} +if (sizeof($_GET) == 0) $testmysql = true; + + +foreach($_GET as $k=>$v) { + // XSS protection (see Github issue #274) - only set variables for + // expected get parameters used in testdatabases.inc.php + if(preg_match('/^(test|no)\w+$/', $k)) { + $$k = $v; + } +} + +?> + +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 adodb.org.

+ +Test GetInsertSQL/GetUpdateSQL   + Sessions   + Paging   + Perf Monitor

+vers=",ADOConnection::Version(); + + + +?> +

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

+ + -- cgit v1.2.3-54-g00ecf