--TEST--
DB_driver::tableInfo
--INI--
error_reporting = 2047
--SKIPIF--
$quirks array, which has the following format:
*
*
* 'driver' => array(
* 'clob' => DBMS's column type for creating CLOB fields
* 'date' => DBMS's column type for creating DATE fields
* 'dateliteral' => The SQL keyword necessary for defining dates
* 'finds_table' => Can this DBMS determine table names from queries?
* 'size_from_table' => Does this DBMS know the column size via table name?
* 'handles_results' => Can the DBMS get info from query results?
* 'commands' => array(
* Extra commands to be passed to PHP's eval() function
* )
* 0 => array(
* // Info expected to be reported for phptest_fk.a
* // (INTEGER NOT NULL) (UNIQUE KEY with d)
* 'type' => Column type reported by the DBMS
* 'len' => Column size reported by the DBMS
* 'flags' => Flags reported by the DBMS
* )
* 1 => array() Info expected to be reported for phptest_fk.fk
* (INTEGER NOT NULL) (PRIMARY KEY)
* 2 => array() Info expected to be reported for phptest_fk.c
* (CLOB/CHAR/VARCHAR NULL)
* 3 => array() Info expected to be reported for phptest_fk.d
* (DATE NOT NULL) (UNIQUE KEY with a)
* 4 => array() Info expected to be reported for phptest_fk.e
* (CHAR(2) DEFAULT ' e' NOT NULL)
* 5 => array() Info expected to be reported for phptest_fk.f
* (DECIMAL(2,1) NULL)
* 9 => array() Info expected to be reported for phptest.d
* (VARCHAR(20) NULL)
* )
*
*
* @category Database
* @package DB
* @version $Id: 16tableinfo.phpt 306605 2010-12-24 06:22:59Z aharvey $
* @author Daniel Convissor
* @see DB_common::tableInfo()
*/
error_reporting(E_ALL);
chdir(dirname(__FILE__));
require_once dirname(__FILE__) . '/skipif.inc';
$tableInfo = $dbh->tableInfo('ajkdslfajoijkadie');
if (DB::isError($tableInfo) && $tableInfo->code == DB_ERROR_NOT_CAPABLE) {
die("skip $tableInfo->message");
}
?>
--FILE--
getMessage() == "DB Error: can't distinguish duplicate field names") {
print "NOTICE: $dbh->phptype can't distinguish duplicate field names";
return;
}
if ($o->getCode() == DB_ERROR_NOT_CAPABLE &&
!$quirks[$dbh->phptype . ':' . $dbh->dbsyntax]['handles_results'])
{
return;
}
$dbh->setErrorHandling(PEAR_ERROR_RETURN);
drop_table($dbh, 'phptest');
drop_table($dbh, 'phptest_fk');
die($o->toString());
}
/**
* Loop through an array returned from tableInfo(), compare the actual
* contents to the expected contents. If the actual results match the
* expectations, say so. If not, say so and show the information.
*
* @param array $array the array to be examined
* @param string $expected the expected contents of the array
* @param string $field field index number of $quriks and table
* @param boolean $query true if array is from a query or false if array
* is tableInfo()
* @return void
*/
function examineArrayData($array, $expected, $field = false, $query = true) {
global $dbh, $quirks;
$quirk_key = $dbh->phptype . ':' . $dbh->dbsyntax;
if (DB::isError($array) && $array->getCode() == DB_ERROR_NOT_CAPABLE) {
print "matched expected result\n";
return;
}
if (!is_array($array)) {
print "This DMBS didn't produce proper results\n";
return;
}
if (is_int($field)) {
$array = $array[$field];
}
$actual = '';
foreach ($array as $key => $value) {
if ($field !== false &&
isset($quirks[$quirk_key][$field][$key]))
{
if ($key == 'flags' && $value == '' && $query &&
!$quirks[$quirk_key]['finds_table'])
{
$actual .= "$key ... matched expected value\n";
} else {
if ($quirks[$quirk_key][$field][$key] == $value) {
$actual .= "$key ... matched expected value\n";
} else {
if ($value == 0
&& !$quirks[$quirk_key]['size_from_table'])
{
$actual .= "$key ... matched expected value\n";
} else {
$actual .= "$key ... was '$value' but we expected ";
$actual .= "'{$quirks[$quirk_key][$field][$key]}'\n";
}
}
}
} else {
if ($key == 'table') {
if ($field <= 5) {
if ($value == 'phptest_fk') {
$actual .= "$key ... matched expected value\n";
} else {
if ($value == '' && $query &&
!$quirks[$quirk_key]['finds_table'])
{
$actual .= "$key ... matched expected value\n";
} else {
$actual .= "$key ... was '$value' but we expected 'phptest_fk'\n";
}
}
} else {
if ($value == 'phptest') {
$actual .= "$key ... matched expected value\n";
} else {
if ($value == '' && $query &&
!$quirks[$quirk_key]['finds_table'])
{
$actual .= "$key ... matched expected value\n";
} else {
$actual .= "$key ... was '$value' but we expected 'phptest_fk'\n";
}
}
}
} else {
$actual .= "$key => $value\n";
}
}
}
if ($actual == $expected) {
print "matched expected result\n";
} else {
print "DIDN'T match expected values...\n";
print "~~~~~~~~\nExpected:\n$expected\n";
print "~~~~\nActual:\n$actual\n~~~~~~~~\n\n";
}
}
/**
* Loop through an array of table info data and return the results.
*
* @param array $array the array to be examined
* @return string
*/
function returnArrayData($array) {
global $dbh, $quirks;
$quirk_key = $dbh->phptype . ':' . $dbh->dbsyntax;
if (!$quirks[$quirk_key]['handles_results']) {
return "\n";
}
$out = '';
foreach ($array as $key => $value) {
$out .= "$key => $value\n";
}
return $out;
}
$dbh->setErrorHandling(PEAR_ERROR_CALLBACK, 'pe');
$quirks = array(
'fbsql:fbsql' => array(
'clob' => 'CHAR(29)',
'date' => 'DATE',
'dateliteral' => ' DATE ',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'INTEGER',
'len' => 0,
'flags' => '',
),
1 => array(
'type' => 'INTEGER',
'len' => 0,
'flags' => 'not_null',
),
2 => array(
'type' => 'CHARACTER',
'len' => 29,
'flags' => '',
),
3 => array(
'type' => 'DATE',
'len' => 0,
'flags' => '',
),
4 => array(
'type' => 'CHARACTER',
'len' => 2,
'flags' => '',
),
5 => array(
'type' => 'DECIMAL',
'len' => 0,
'flags' => '',
),
9 => array(
'type' => 'CHARACTER',
'len' => 20,
'flags' => '',
),
),
'ibase:ibase' => array(
'clob' => 'VARCHAR(50)',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'INTEGER',
'len' => 4,
'flags' => 'unique_key not_null',
),
1 => array(
'type' => 'INTEGER',
'len' => 4,
'flags' => 'primary_key not_null',
),
2 => array(
'type' => 'VARCHAR',
'len' => 50,
'flags' => '',
),
3 => array(
'type' => 'DATE',
'len' => 4,
'flags' => 'unique_key not_null',
),
4 => array(
'type' => 'CHAR',
'len' => 2,
'flags' => 'not_null default',
),
5 => array(
'type' => 'NUMERIC(9,1)',
'len' => 4,
'flags' => '',
),
9 => array(
'type' => 'VARCHAR',
'len' => 20,
'flags' => '',
),
),
'ibase:firebird' => array(
'clob' => 'VARCHAR(50)',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'INTEGER',
'len' => 4,
'flags' => 'unique_key not_null',
),
1 => array(
'type' => 'INTEGER',
'len' => 4,
'flags' => 'primary_key not_null',
),
2 => array(
'type' => 'VARCHAR',
'len' => 50,
'flags' => '',
),
3 => array(
'type' => 'DATE',
'len' => 4,
'flags' => 'unique_key not_null',
),
4 => array(
'type' => 'CHAR',
'len' => 2,
'flags' => 'not_null default',
),
5 => array(
'type' => 'NUMERIC(9,1)',
'len' => 4,
'flags' => '',
),
9 => array(
'type' => 'VARCHAR',
'len' => 20,
'flags' => '',
),
),
'ifx:ifx' => array(
'clob' => 'CHAR(29)',
'date' => 'CHAR(10)',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'SQLINT',
'len' => 4,
'flags' => 'not_null',
),
1 => array(
'type' => 'SQLINT',
'len' => 4,
'flags' => 'not_null',
),
2 => array(
'type' => 'SQLCHAR',
'len' => 29,
'flags' => '',
),
3 => array(
'type' => 'SQLCHAR',
'len' => 10,
'flags' => 'not_null',
),
4 => array(
'type' => 'SQLCHAR',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'SQLDECIMAL',
'len' => 513,
'flags' => '',
),
9 => array(
'type' => 'SQLCHAR',
'len' => 20,
'flags' => '',
),
),
'msql:msql' => array(
'clob' => 'TEXT(255)',
'date' => 'CHAR(10)',
'dateliteral' => '',
'finds_table' => true,
'size_from_table' => true,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'int',
'len' => 4,
'flags' => 'not_null',
),
1 => array(
'type' => 'int',
'len' => 4,
// for some reason, the unique property always contains 0
// 'flags' => 'unique_key not_null',
'flags' => 'not_null',
),
2 => array(
'type' => 'text',
'len' => 255,
'flags' => '',
),
3 => array(
'type' => 'char',
'len' => 10,
'flags' => 'not_null',
),
4 => array(
'type' => 'char',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'real',
'len' => 8,
'flags' => '',
),
9 => array(
'type' => 'char',
'len' => 20,
'flags' => '',
),
),
'mssql:mssql' => array(
'clob' => 'TEXT',
'date' => 'SMALLDATETIME',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
'ini_set("mssql.datetimeconvert", "Off");',
'$dbh->query("SET DATEFORMAT ymd");',
),
0 => array(
'type' => 'int',
'len' => 4,
'flags' => 'multiple_key unique_key not_null',
),
1 => array(
'type' => 'int',
'len' => 4,
'flags' => 'primary_key not_null',
),
2 => array(
'type' => 'text',
'len' => 4096,
'flags' => '',
),
3 => array(
'type' => 'datetime',
'len' => 4,
'flags' => 'multiple_key unique_key not_null',
),
4 => array(
'type' => 'char',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'real',
'len' => 8,
'flags' => '',
),
9 => array(
'type' => 'char',
'len' => 20,
'flags' => '',
),
),
'mysql:mysql' => array(
'clob' => 'TEXT',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => true,
'size_from_table' => true,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'int',
'len' => 11,
'flags' => 'not_null multiple_key',
),
1 => array(
'type' => 'int',
'len' => 11,
'flags' => 'not_null primary_key',
),
2 => array(
'type' => 'blob',
'len' => 65535,
'flags' => 'blob',
),
3 => array(
'type' => 'date',
'len' => 10,
'flags' => 'not_null multiple_key binary',
),
4 => array(
'type' => 'string',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'real',
'len' => 4,
'flags' => '',
),
9 => array(
'type' => 'string',
'len' => 20,
'flags' => '',
),
),
'mysqli:mysqli' => array(
'clob' => 'TEXT',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => true,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'int',
'len' => 11,
'flags' => 'not_null multiple_key',
),
1 => array(
'type' => 'int',
'len' => 11,
'flags' => 'not_null primary_key',
),
2 => array(
'type' => 'blob',
'len' => 65535,
'flags' => 'blob',
),
3 => array(
'type' => 'date',
'len' => 10,
'flags' => 'not_null multiple_key binary',
),
4 => array(
'type' => 'string',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'real',
'len' => 4,
'flags' => '',
),
9 => array(
'type' => 'string',
'len' => 20,
'flags' => '',
),
),
'oci8:oci8' => array(
'clob' => 'CLOB',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
'$dbh->query("ALTER SESSION SET NLS_DATE_FORMAT = \'YYYY-MM-DD\'");',
),
0 => array(
'type' => 'NUMBER',
'len' => 22,
'flags' => 'not_null',
),
1 => array(
'type' => 'NUMBER',
'len' => 22,
'flags' => 'not_null',
),
2 => array(
'type' => 'CLOB',
'len' => 4000,
'flags' => '',
),
3 => array(
'type' => 'DATE',
'len' => 7,
'flags' => 'not_null',
),
4 => array(
'type' => 'CHAR',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'NUMBER',
'len' => 22,
'flags' => '',
),
9 => array(
'type' => 'VARCHAR',
'len' => 20,
'flags' => '',
),
),
'odbc:access' => array(
'clob' => 'TEXT',
'date' => 'DATETIME',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'INTEGER',
'len' => 10,
'flags' => 'not_null',
),
1 => array(
'type' => 'INTEGER',
'len' => 10,
'flags' => 'not_null',
),
2 => array(
'type' => 'LONGCHAR',
'len' => 255,
'flags' => '',
),
3 => array(
'type' => 'DATETIME',
'len' => 19,
'flags' => 'not_null',
),
4 => array(
'type' => 'VARCHAR',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'DECIMAL',
'len' => 15,
'flags' => '',
),
9 => array(
'type' => 'VARCHAR',
'len' => 20,
'flags' => '',
),
),
'odbc:db2' => array(
'clob' => 'CLOB',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
),
0 => array(
'type' => 'INTEGER',
'len' => 10,
'flags' => 'not_null',
),
1 => array(
'type' => 'INTEGER',
'len' => 10,
'flags' => 'not_null',
),
2 => array(
'type' => 'CLOB',
'len' => 1048576,
'flags' => '',
),
3 => array(
'type' => 'DATE',
'len' => 10,
'flags' => 'not_null',
),
4 => array(
'type' => 'CHAR',
'len' => 2,
'flags' => 'not_null',
),
5 => array(
'type' => 'DECIMAL',
'len' => 2,
'flags' => '',
),
9 => array(
'type' => 'VARCHAR',
'len' => 20,
'flags' => '',
),
),
'pgsql:pgsql' => array(
'clob' => 'TEXT',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
'$dbh->query("SET DATESTYLE = ISO");',
),
0 => array(
'type' => 'int4',
'len' => 4,
'flags' => 'not_null unique_key multiple_key',
),
1 => array(
'type' => 'int4',
'len' => 4,
'flags' => 'not_null primary_key',
),
2 => array(
'type' => 'text',
'len' => -1,
'flags' => '',
),
3 => array(
'type' => 'date',
'len' => 4,
'flags' => 'not_null unique_key multiple_key',
),
4 => array(
'type' => 'bpchar',
'len' => -1,
'flags' => 'not_null default_%20e',
),
5 => array(
'type' => 'numeric',
'len' => -1,
'flags' => '',
),
9 => array(
'type' => 'varchar',
'len' => -1,
'flags' => '',
),
),
'sqlite:sqlite' => array(
'clob' => 'CLOB',
'date' => 'DATE',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => false,
'commands' => array(
),
0 => array(
'type' => 'INTEGER',
'len' => 0,
'flags' => 'not_null',
),
1 => array(
'type' => 'INTEGER',
'len' => 0,
'flags' => 'primary_key auto_increment not_null',
),
2 => array(
'type' => 'CLOB',
'len' => 0,
'flags' => '',
),
3 => array(
'type' => 'DATE',
'len' => 0,
'flags' => 'not_null',
),
4 => array(
'type' => 'CHAR',
'len' => 2,
'flags' => 'not_null default_%20e',
),
5 => array(
'type' => 'DECIMAL',
'len' => 2,
'flags' => '',
),
9 => array(
'type' => 'VARCHAR',
'len' => 20,
'flags' => '',
),
),
'sybase:sybase' => array(
'clob' => 'TEXT',
'date' => 'SMALLDATETIME',
'dateliteral' => '',
'finds_table' => false,
'size_from_table' => false,
'handles_results' => true,
'commands' => array(
'$dbh->query("SET DATEFORMAT ymd");',
),
0 => array(
'type' => 'int',
'len' => 11,
'flags' => 'multiple_key unique_key',
),
1 => array(
'type' => 'int',
'len' => 11,
'flags' => 'unique_key',
),
2 => array(
'type' => 'string',
'len' => 64512,
'flags' => '',
),
3 => array(
'type' => 'datetime',
'len' => 29,
'flags' => 'multiple_key unique_key',
),
4 => array(
'type' => 'string',
'len' => 2,
'flags' => '',
),
5 => array(
'type' => 'real',
'len' => 4,
'flags' => '',
),
9 => array(
'type' => 'string',
'len' => 20,
'flags' => '',
),
),
);
$quirk_key = $dbh->phptype . ':' . $dbh->dbsyntax;
if (!isset($quirks[$quirk_key])) {
die("This test does not yet support $quirk_key");
}
if (count($quirks[$quirk_key]['commands'])) {
foreach ($quirks[$quirk_key]['commands'] as $value) {
eval($value);
}
}
$dbh->query('DELETE FROM phptest');
$dbh->query("INSERT INTO phptest VALUES (1, 'one', 'One', '2001-02-16')");
$dbh->query("INSERT INTO phptest VALUES (2, 'two', 'Two', '2001-02-15')");
$dbh->query("INSERT INTO phptest VALUES (3, 'three', 'Three', '2001-02-14')");
$dbh->setErrorHandling(PEAR_ERROR_RETURN);
drop_table($dbh, 'phptest_fk');
$dbh->setErrorHandling(PEAR_ERROR_CALLBACK, 'pe');
if ($quirk_key == 'odbc:access') {
$default_e = '';
$decimal = 'NUMERIC';
} elseif ($quirk_key == 'msql:msql') {
$default_e = '';
$decimal = 'REAL';
} else {
$default_e = "DEFAULT ' e'";
$decimal = 'DECIMAL(2,1)';
}
if ($quirk_key == 'mssql:mssql') {
/* We need to reset the expected length of phptest_fk.c to match
* @@TEXTSIZE, since the default value seems to vary based on the version
* of SQL Server we're talking to and its configuration. */
$textsize = $dbh->getOne('SELECT @@TEXTSIZE');
if (DB::isError($textsize)) {
echo 'Error retrieving @@TEXTSIZE: '.$textsize->getMessage()."\n";
} else {
$quirks[$quirk_key][2]['len'] = (integer) $textsize;
}
}
// $null is set in mktable.inc
switch ($dbh->phptype) {
case 'msql':
$dbh->query("
CREATE TABLE phptest_fk (
a INTEGER NOT NULL,
fk INTEGER NOT NULL,
cc {$quirks[$quirk_key]['clob']} $null,
d {$quirks[$quirk_key]['date']} NOT NULL,
e CHAR(2) $default_e NOT NULL,
f $decimal $null
)
");
$dbh->query('CREATE UNIQUE INDEX fkpk ON phptest_fk (fk)');
$dbh->query('CREATE UNIQUE INDEX fkuk ON phptest_fk (a, d)');
break;
default:
$dbh->query("
CREATE TABLE phptest_fk (
a INTEGER NOT NULL,
fk INTEGER NOT NULL,
cc {$quirks[$quirk_key]['clob']} $null,
d {$quirks[$quirk_key]['date']} NOT NULL,
e CHAR(2) $default_e NOT NULL,
f $decimal $null,
PRIMARY KEY (fk),
UNIQUE (a, d)
)
");
}
$dbh->query("CREATE INDEX thedidx ON phptest_fk (d)");
$dbh->query("INSERT INTO phptest_fk VALUES (10, 1, 'One',"
. $quirks[$quirk_key]['dateliteral'] . "'2001-02-16', 'c1', 1.1)");
$dbh->query("INSERT INTO phptest_fk VALUES (20, 2, 'Two',"
. $quirks[$quirk_key]['dateliteral'] . "'2001-02-15', 'c2', 2.2)");
$dbh->query("INSERT INTO phptest_fk VALUES (30, 3, 'Three',"
. $quirks[$quirk_key]['dateliteral'] . "'2001-02-14', 'c3', 3.3)");
function &runQuery() {
global $dbh, $resultobj;
$quirk_key = $dbh->phptype . ':' . $dbh->dbsyntax;
switch ($quirk_key) {
case 'odbc:db2':
// can't extract blob's this way so make a fake column
$query = "SELECT phptest_fk.a, phptest_fk.fk, 'tempxyz' AS cc,"
. ' phptest_fk.d, phptest_fk.e, phptest_fk.f,'
. ' phptest.a, phptest.b, phptest.cc, phptest.d'
. ' FROM phptest_fk, phptest'
. ' WHERE phptest.a = phptest_fk.fk';
break;
case 'msql:msql':
$query = 'SELECT phptest_fk.a, phptest_fk.fk, phptest_fk.cc,'
. ' phptest_fk.d, phptest_fk.e, phptest_fk.f,'
. ' phptest.a, phptest.b, phptest.cc, phptest.d'
. ' FROM phptest_fk, phptest'
. ' WHERE phptest.a = phptest_fk.fk';
break;
default:
$query = 'SELECT phptest_fk.a, phptest_fk.fk, phptest_fk.cc,'
. ' phptest_fk.d, phptest_fk.e, phptest_fk.f,'
. ' phptest.a, phptest.b, phptest.cc, phptest.d'
. ' FROM phptest_fk, phptest'
. ' WHERE phptest.a = phptest_fk.fk';
}
$resultobj =& $dbh->query($query);
return $resultobj;
}
$expected01 = 'table ... matched expected value
name => a
type ... matched expected value
len ... matched expected value
flags ... matched expected value
';
$expected02 = 'table ... matched expected value
name => fk
type ... matched expected value
len ... matched expected value
flags ... matched expected value
';
$expected03 = 'table ... matched expected value
name => cc
type ... matched expected value
len ... matched expected value
flags ... matched expected value
';
$expected04 = 'table ... matched expected value
name => d
type ... matched expected value
len ... matched expected value
flags ... matched expected value
';
$expected05 = 'table ... matched expected value
name => e
type ... matched expected value
len ... matched expected value
flags ... matched expected value
';
$expected06 = 'table ... matched expected value
name => f
type ... matched expected value
len ... matched expected value
flags ... matched expected value
';
$expected10 = 'table ... matched expected value
name => d
type ... matched expected value
len ... matched expected value
flags ... matched expected value
';
print "\n==========================================\n";
print "Passing result OBJECT to method in DB_.\n";
print "Output = default.\n";
print "------------------------------------------\n";
$resultobj =& runQuery();
// This numRows call provides a regression test for bug #4388.
$resultobj->numRows();
$array = $dbh->tableInfo($resultobj);
print "\ncolumn 0:\n";
examineArrayData($array, $expected01, 0);
print "\ncolumn 9:\n";
examineArrayData($array, $expected10, 9);
print "\n==========================================\n";
print "Passing result ID to method in DB_.\n";
print "Output = DB_TABLEINFO_ORDER.\n";
print "------------------------------------------\n";
$resultobj =& runQuery();
$array = $dbh->tableInfo($resultobj->result, DB_TABLEINFO_ORDER);
print "\ncolumn 0:\n";
examineArrayData($array, $expected01, 0);
print "\ncolumn 3:\n";
examineArrayData($array, $expected04, 3);
print "\nnum_fields: ";
if ($quirks[$quirk_key]['handles_results'] && $array['num_fields'] == 10) {
print "matched expected result\n";
} elseif (DB::isError($array) && $array->getCode() == DB_ERROR_NOT_CAPABLE) {
print "matched expected result\n";
} else {
print "This DMBS didn't produce proper results\n";
}
print "\norder:\n";
if ($quirks[$quirk_key]['handles_results'] && is_array($array['order'])) {
$expected = 'a => 6
b => 7
cc => 8
d => 9
e => 4
f => 5
fk => 1
';
ksort($array['order']);
examineArrayData($array['order'], $expected);
} elseif (DB::isError($array) && $array->getCode() == DB_ERROR_NOT_CAPABLE) {
print "matched expected result\n";
} else {
print "This DMBS didn't produce proper results\n";
}
print "\n==========================================\n";
print "Passing DB_TABLEINFO_ORDERTABLE to method in DB_result.\n";
print "Output = DB_TABLEINFO_ORDERTABLE.\n";
print "------------------------------------------\n";
$resultobj =& runQuery();
$array = $resultobj->tableInfo(DB_TABLEINFO_ORDERTABLE);
// Free this to keep interbase happy.
$resultobj->free();
print "\ncolumn 0:\n";
examineArrayData($array, $expected01, 0);
print "\ncolumn 3:\n";
examineArrayData($array, $expected04, 3);
print "\nnum_fields: ";
if ($quirks[$quirk_key]['handles_results'] && $array['num_fields'] == 10) {
print "matched expected result\n";
} elseif (DB::isError($array) && $array->getCode() == DB_ERROR_NOT_CAPABLE) {
print "matched expected result\n";
} else {
print "This DMBS didn't produce proper results\n";
}
print 'ordertable[phptest]: ';
$expected = 'a => 6
b => 7
cc => 8
d => 9
';
if ($quirks[$quirk_key]['handles_results']
&& isset($array['ordertable']['phptest'])) {
$actual = returnArrayData($array['ordertable']['phptest']);
} else {
$actual = '';
}
if ($actual == $expected) {
print "matched expected result\n";
} else {
if (($quirks[$quirk_key]['finds_table'] === false
|| DB::isError($array) && $array->getCode() == DB_ERROR_NOT_CAPABLE)
&& $actual == '') {
print "matched expected result\n";
} else {
print "DIDN'T match expected values...\n";
print "~~~~~~~~\nExpected:\n$expected\n";
print "~~~~\nActual:\n$actual\n~~~~~~~~\n\n";
}
}
print 'ordertable[phptest_fk]: ';
$expected = 'a => 0
fk => 1
cc => 2
d => 3
e => 4
f => 5
';
if ($quirks[$quirk_key]['handles_results']
&& isset($array['ordertable']['phptest_fk'])) {
$actual = returnArrayData($array['ordertable']['phptest_fk']);
} else {
$actual = '';
}
if ($actual == $expected) {
print "matched expected result\n";
} else {
if (($quirks[$quirk_key]['finds_table'] === false
|| DB::isError($array) && $array->getCode() == DB_ERROR_NOT_CAPABLE)
&& $actual == '') {
print "matched expected result\n";
} else {
print "DIDN'T match expected values...\n";
print "~~~~~~~~\nExpected:\n$expected\n";
print "~~~~\nActual:\n$actual\n~~~~~~~~\n\n";
}
}
print "\n==========================================\n";
print "Passing TABLE NAME 'phptest_fk' to method in DB_.\n";
print "Output = default.\n";
print "------------------------------------------\n";
$array = $dbh->tableInfo('phptest_fk');
print "\ncolumn 0:\n";
examineArrayData($array, $expected01, 0, false);
print "\ncolumn 1:\n";
examineArrayData($array, $expected02, 1, false);
print "\ncolumn 2:\n";
examineArrayData($array, $expected03, 2, false);
print "\ncolumn 3:\n";
examineArrayData($array, $expected04, 3, false);
print "\ncolumn 4:\n";
examineArrayData($array, $expected05, 4, false);
print "\ncolumn 5:\n";
examineArrayData($array, $expected06, 5, false);
print "\n==========================================\n";
print "Passing TABLE NAME 'phptest_fk' to method in DB_.\n";
print "Output = DB_TABLEINFO_FULL.\n";
print "------------------------------------------\n";
$array = $dbh->tableInfo('phptest_fk', DB_TABLEINFO_FULL);
print "\ncolumn 0:\n";
examineArrayData($array, $expected01, 0, false);
print "\norder:\n";
$expect ='a => 0
fk => 1
cc => 2
d => 3
e => 4
f => 5
';
examineArrayData($array['order'], $expect, false, false);
print "\nordertable[phptest_fk]:\n";
$expect ='a => 0
fk => 1
cc => 2
d => 3
e => 4
f => 5
';
examineArrayData($array['ordertable']['phptest_fk'], $expect);
print "\n==========================================\n";
print "Passing TABLE NAME 'phptest_fk' to method in DB_ AGAIN.\n";
print "Output = DB_TABLEINFO_FULL, lowercasing turned off.\n";
print "------------------------------------------\n";
$dbh->setOption('portability', DB_PORTABILITY_ALL ^ DB_PORTABILITY_LOWERCASE);
$array = $dbh->tableInfo('phptest_fk', DB_TABLEINFO_FULL);
// testing non-lowercasing above to ensure program doesn't die.
// lowercase the names here to ensure test uniformity.
$array[0]['table'] = strtolower($array[0]['table']);
$array[0]['name'] = strtolower($array[0]['name']);
print "\ncolumn 0:\n";
examineArrayData($array, 0, false);
$dbh->setErrorHandling(PEAR_ERROR_RETURN);
drop_table($dbh, 'phptest');
drop_table($dbh, 'phptest_fk');
?>
--EXPECT--
==========================================
Passing result OBJECT to method in DB_.
Output = default.
------------------------------------------
column 0:
matched expected result
column 9:
matched expected result
==========================================
Passing result ID to method in DB_.
Output = DB_TABLEINFO_ORDER.
------------------------------------------
column 0:
matched expected result
column 3:
matched expected result
num_fields: matched expected result
order:
matched expected result
==========================================
Passing DB_TABLEINFO_ORDERTABLE to method in DB_result.
Output = DB_TABLEINFO_ORDERTABLE.
------------------------------------------
column 0:
matched expected result
column 3:
matched expected result
num_fields: matched expected result
ordertable[phptest]: matched expected result
ordertable[phptest_fk]: matched expected result
==========================================
Passing TABLE NAME 'phptest_fk' to method in DB_.
Output = default.
------------------------------------------
column 0:
matched expected result
column 1:
matched expected result
column 2:
matched expected result
column 3:
matched expected result
column 4:
matched expected result
column 5:
matched expected result
==========================================
Passing TABLE NAME 'phptest_fk' to method in DB_.
Output = DB_TABLEINFO_FULL.
------------------------------------------
column 0:
matched expected result
order:
matched expected result
ordertable[phptest_fk]:
matched expected result
==========================================
Passing TABLE NAME 'phptest_fk' to method in DB_ AGAIN.
Output = DB_TABLEINFO_FULL, lowercasing turned off.
------------------------------------------
column 0:
matched expected result