diff options
| author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
|---|---|---|
| committer | <> | 2013-04-03 16:25:08 +0000 |
| commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
| tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/sybase_ct/tests | |
| download | php2-master.tar.gz | |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/sybase_ct/tests')
27 files changed, 1490 insertions, 0 deletions
diff --git a/ext/sybase_ct/tests/bug22403.phpt b/ext/sybase_ct/tests/bug22403.phpt new file mode 100644 index 0000000..20d5248 --- /dev/null +++ b/ext/sybase_ct/tests/bug22403.phpt @@ -0,0 +1,88 @@ +--TEST-- +Sybase-CT bug #22403 (crash when executing a stored procedure without parameters) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + sybase_set_message_handler('sybase_msg_handler'); + error_reporting(error_reporting() & !E_NOTICE); // Suppress notices + + // Check if stored procedure already exists + $sp_name= 'phpt_bug22403'; + var_dump(sybase_select_db(TEMPDB, $db)); + if (!sybase_select_single($db, 'select object_id("'.$sp_name.'")')) { + echo "Stored procedure {$sp_name} not found, creating\n"; + var_dump(sybase_query(' + create proc '.$sp_name.' (@param int) + as + begin + select @param + select @param + 1 + return @param + end + ')); + } else { + echo "Stored procedure {$sp_name} found, using\n"; + var_dump(TRUE); + } + + // These don't work + var_dump(sybase_select_ex($db, 'exec '.$sp_name)); + var_dump(sybase_select_ex($db, 'exec '.$sp_name.' "foo"')); + var_dump(sybase_select_ex($db, 'exec does_not_exist')); + + // These do + var_dump(sybase_select_ex($db, 'exec '.$sp_name.' NULL')); + var_dump(sybase_select_ex($db, 'exec '.$sp_name.' 1')); + + // Clean up after ourselves + var_dump(sybase_query('drop proc '.$sp_name)); + + sybase_close($db); +?> +--EXPECTF-- +bool(true) +Stored procedure %s +bool(true) +>>> Query: exec %s +*** Caught Sybase Server Message #201 [Severity 16, state 2] at line 0 + %s +<<< Return: boolean +bool(false) +>>> Query: exec %s "foo" +*** Caught Sybase Server Message #257 [Severity 16, state 1] at line 0 + %s +<<< Return: boolean +bool(false) +>>> Query: exec does_not_exist +*** Caught Sybase Server Message #2812 [Severity 16, state %d] at line 1 + %s +<<< Return: boolean +bool(false) +>>> Query: exec %s NULL +<<< Return: resource +array(1) { + [0]=> + array(1) { + ["computed"]=> + NULL + } +} +>>> Query: exec %s 1 +<<< Return: resource +array(1) { + [0]=> + array(1) { + ["computed"]=> + int(1) + } +} +bool(true) diff --git a/ext/sybase_ct/tests/bug26407.phpt b/ext/sybase_ct/tests/bug26407.phpt new file mode 100644 index 0000000..35bf6df --- /dev/null +++ b/ext/sybase_ct/tests/bug26407.phpt @@ -0,0 +1,91 @@ +--TEST-- +Sybase-CT bug #26407 (Result set fetching broken around transactions) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + + // Create temporary table + $table= 'phpt_bug26407'; + var_dump(sybase_query('create table #'.$table.' ( the_big_answer int )', $db)); + + // I + var_dump(sybase_select_ex($db, ' + begin transaction + -- anything producing a result set here will fail; + -- however, print or update statements will work + select "foo" + commit + -- anything afterwards will fail, too + ')); + + // II + var_dump(sybase_select_ex($db, ' + begin transaction + -- no result returned... + update #'.$table.' set the_big_answer=42 + commit + ')); + + // III + var_dump(sybase_select_ex($db, ' + select "foo" + begin transaction + -- do anything, even return a result set + commit + select "bar" + ')); + + sybase_close($db); +?> +--EXPECTF-- +bool(true) +>>> Query: + begin transaction + -- anything producing a result set here will fail; + -- however, print or update statements will work + select "foo" + commit + -- anything afterwards will fail, too + +<<< Return: resource +array(1) { + [0]=> + array(1) { + ["computed"]=> + string(3) "foo" + } +} +>>> Query: + begin transaction + -- no result returned... + update #phpt_bug26407 set the_big_answer=42 + commit + +<<< Return: boolean +bool(true) +>>> Query: + select "foo" + begin transaction + -- do anything, even return a result set + commit + select "bar" + + +Notice: sybase_query(): Sybase: Unexpected results, cancelling current in %stest.inc on line %d +<<< Return: resource +array(1) { + [0]=> + array(1) { + ["computed"]=> + string(3) "foo" + } +} diff --git a/ext/sybase_ct/tests/bug27843.phpt b/ext/sybase_ct/tests/bug27843.phpt new file mode 100644 index 0000000..861d1f9 --- /dev/null +++ b/ext/sybase_ct/tests/bug27843.phpt @@ -0,0 +1,54 @@ +--TEST-- +Sybase-CT bug #27843 (notices when query is a stored procedure) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + + // Check if stored procedure already exists + $sp_name= 'phpt_bug27843'; + var_dump(sybase_select_db(TEMPDB, $db)); + if (!sybase_select_single($db, 'select object_id("'.$sp_name.'")')) { + echo "Stored procedure {$sp_name} not found, creating\n"; + var_dump(sybase_query(' + create proc '.$sp_name.' + as + begin + select 1 + end + ')); + } else { + echo "Stored procedure {$sp_name} found, using\n"; + var_dump(TRUE); + } + + // Execute stored procedure + var_dump(sybase_select_ex($db, 'exec '.$sp_name)); + + // Clean up after ourselves + var_dump(sybase_query('drop proc '.$sp_name, $db)); + + sybase_close($db); +?> +--EXPECTF-- +bool(true) +Stored procedure %s +bool(true) +>>> Query: exec phpt_bug27843 +<<< Return: resource +array(1) { + [0]=> + array(1) { + ["computed"]=> + int(1) + } +} +bool(true) diff --git a/ext/sybase_ct/tests/bug28354.phpt b/ext/sybase_ct/tests/bug28354.phpt new file mode 100644 index 0000000..018f7bd --- /dev/null +++ b/ext/sybase_ct/tests/bug28354.phpt @@ -0,0 +1,46 @@ +--TEST-- +Sybase-CT bug #28354 (sybase_free_result crash) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + sybase_set_message_handler('sybase_msg_handler'); + error_reporting(error_reporting() & !E_NOTICE); // Suppress notices + + // Check if stored procedure already exists + $sp_name= 'phpt_bug28354'; + var_dump(sybase_select_db(TEMPDB, $db)); + if (!sybase_select_single($db, 'select object_id("'.$sp_name.'")')) { + echo "Stored procedure {$sp_name} not found, creating\n"; + var_dump(sybase_query(' + create proc '.$sp_name.' as begin + select @@version + end + ')); + } else { + echo "Stored procedure {$sp_name} found, using\n"; + var_dump(TRUE); + } + + $r= sybase_query('exec '.$sp_name, $db); + $i= 0; + while ($row= sybase_fetch_row($r)) { + var_dump($i++, $row[0]); + } + sybase_free_result($r); + sybase_close($db); +?> +--EXPECTF-- +bool(true) +Stored procedure %s +bool(true) +int(0) +string(%d) "%s" diff --git a/ext/sybase_ct/tests/bug29064.phpt b/ext/sybase_ct/tests/bug29064.phpt new file mode 100644 index 0000000..df13d28 --- /dev/null +++ b/ext/sybase_ct/tests/bug29064.phpt @@ -0,0 +1,143 @@ +--TEST-- +Sybase-CT bug #29064 (Exact numeric/decimal/money datatypes lose precision) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + + // Create a temporary table and fill it with test values + var_dump(sybase_query(' + create table #test ( + test_decimal decimal(38, 6) null, + test_numeric numeric(38, 12) null, + test_money money null, + test_bigint decimal(38, 0) null, + test_int int null, + test_smallmoney smallmoney null, + test_smallint smallint null, + test_tinyint tinyint null, + test_real float null, + test_double float null + ) + ', $db)); + var_dump(sybase_query(' + insert into #test ( + test_decimal, + test_numeric, + test_money, + test_bigint, + test_int, + test_smallmoney, + test_smallint, + test_tinyint, + test_real, + test_double + ) values ( + 12345678901234567890123456789012.123456, + 12345678901234567890123456.123456789012, + 123456789012345.1234, + 12345678901234567890123456789012345678, + 1234567890, + 123456.1234, + 12345, + 123, + 123456789.12345679, + 123456789.12345679 + ) + ', $db)); + var_dump(sybase_query(' + insert into #test ( + test_decimal, + test_numeric, + test_money, + test_bigint, + test_int, + test_smallmoney, + test_smallint, + test_tinyint, + test_real, + test_double + ) values ( + -12345678901234567890123456789012.123456, + -12345678901234567890123456.123456789012, + -123456789012345.1234, + -12345678901234567890123456789012345678, + -1234567890, + -123456.1234, + -12345, + 255, + -123456789.12345679, + -123456789.12345679 + ) + ', $db)); + + // Select the data + var_dump(sybase_select_ex($db, 'select * from #test')); + + // Clean up and close connection + var_dump(sybase_query('drop table #test', $db)); + sybase_close($db); +?> +--EXPECTF-- +bool(true) +bool(true) +bool(true) +>>> Query: select * from #test +<<< Return: resource +array(2) { + [0]=> + array(10) { + ["test_decimal"]=> + string(39) "12345678901234567890123456789012.123456" + ["test_numeric"]=> + string(39) "12345678901234567890123456.123456789012" + ["test_money"]=> + string(18) "123456789012345.12" + ["test_bigint"]=> + string(38) "12345678901234567890123456789012345678" + ["test_int"]=> + int(1234567890) + ["test_smallmoney"]=> + float(123456.12) + ["test_smallint"]=> + int(12345) + ["test_tinyint"]=> + int(123) + ["test_real"]=> + string(18) "123456789.12345679" + ["test_double"]=> + string(18) "123456789.12345679" + } + [1]=> + array(10) { + ["test_decimal"]=> + string(40) "-12345678901234567890123456789012.123456" + ["test_numeric"]=> + string(40) "-12345678901234567890123456.123456789012" + ["test_money"]=> + string(19) "-123456789012345.12" + ["test_bigint"]=> + string(39) "-12345678901234567890123456789012345678" + ["test_int"]=> + int(-1234567890) + ["test_smallmoney"]=> + float(-123456.12) + ["test_smallint"]=> + int(-12345) + ["test_tinyint"]=> + int(255) + ["test_real"]=> + string(19) "-123456789.12345679" + ["test_double"]=> + string(19) "-123456789.12345679" + } +} +bool(true) diff --git a/ext/sybase_ct/tests/bug30312-withfree.phpt b/ext/sybase_ct/tests/bug30312-withfree.phpt new file mode 100644 index 0000000..0017865 --- /dev/null +++ b/ext/sybase_ct/tests/bug30312-withfree.phpt @@ -0,0 +1,34 @@ +--TEST-- +Sybase-CT bug #30312 (sybase_unbuffered_query calls, with free) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + error_reporting(error_reporting() & !E_NOTICE); // Suppress notices + + $db= sybase_connect_ex(); + + $query= sybase_unbuffered_query('select datepart(yy, getdate())'); + $array= sybase_fetch_row($query); + var_dump($array[0]); + sybase_free_result($query); + + $query= sybase_unbuffered_query('select datepart(mm, getdate()), datepart(dd, getdate())'); + $array= sybase_fetch_row($query); + var_dump($array); + sybase_free_result($query); +?> +--EXPECTF-- +int(%d) +array(2) { + [0]=> + int(%d) + [1]=> + int(%d) +} diff --git a/ext/sybase_ct/tests/bug30312.phpt b/ext/sybase_ct/tests/bug30312.phpt new file mode 100644 index 0000000..273b579 --- /dev/null +++ b/ext/sybase_ct/tests/bug30312.phpt @@ -0,0 +1,27 @@ +--TEST-- +Sybase-CT bug #30312 (sybase_unbuffered_query calls) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + error_reporting(error_reporting() & !E_NOTICE); // Suppress notices + + $db= sybase_connect_ex(); + + $query= sybase_unbuffered_query('select datepart(yy, getdate())'); + $array= sybase_fetch_array($query); + var_dump($array[0]); + + $query= sybase_unbuffered_query('select datepart(yy, getdate())'); + $array= sybase_fetch_array($query); + var_dump($array[0]); +?> +--EXPECTF-- +int(%d) +int(%d) diff --git a/ext/sybase_ct/tests/bug43578.phpt b/ext/sybase_ct/tests/bug43578.phpt new file mode 100644 index 0000000..e840402 --- /dev/null +++ b/ext/sybase_ct/tests/bug43578.phpt @@ -0,0 +1,65 @@ +--TEST-- +Sybase-CT bug #43578 (Incurred fault #6 - if returned textfield ist empty) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + + // Create a temporary table and fill it with test values + var_dump(sybase_query(' + create table #Resource ( + Resource_ID int, + DC_Rights text null + ) + ', $db)); + var_dump(sybase_query('insert into #Resource values (123, NULL)', $db)); + var_dump(sybase_query('insert into #Resource values (124, "")', $db)); + + // Select non-existant + var_dump(sybase_select_ex($db, 'select DC_Rights from #Resource where Resource_ID = 122')); + + // Select null + var_dump(sybase_select_ex($db, 'select DC_Rights from #Resource where Resource_ID = 123')); + + // Select empty + var_dump(sybase_select_ex($db, 'select DC_Rights from #Resource where Resource_ID = 124')); + + // Clean up and close connection + var_dump(sybase_query('drop table #Resource', $db)); + sybase_close($db); +?> +--EXPECTF-- +bool(true) +bool(true) +bool(true) +>>> Query: select DC_Rights from #Resource where Resource_ID = 122 +<<< Return: resource +array(0) { +} +>>> Query: select DC_Rights from #Resource where Resource_ID = 123 +<<< Return: resource +array(1) { + [0]=> + array(1) { + ["DC_Rights"]=> + NULL + } +} +>>> Query: select DC_Rights from #Resource where Resource_ID = 124 +<<< Return: resource +array(1) { + [0]=> + array(1) { + ["DC_Rights"]=> + string(1) " " + } +} +bool(true) diff --git a/ext/sybase_ct/tests/bug6339.phpt b/ext/sybase_ct/tests/bug6339.phpt new file mode 100644 index 0000000..3b0a072 --- /dev/null +++ b/ext/sybase_ct/tests/bug6339.phpt @@ -0,0 +1,24 @@ +--TEST-- +Sybase-CT bug #6339 (invalid Sybase-link resource) +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + // Suppress "Changed database context" warnings + sybase_min_server_severity(11); + sybase_connect(HOST, USER, PASSWORD); + var_dump(sybase_fetch_row(sybase_query('select 1'))); + sybase_close(); +?> +--EXPECTF-- +array(1) { + [0]=> + int(1) +} diff --git a/ext/sybase_ct/tests/skipif.inc b/ext/sybase_ct/tests/skipif.inc new file mode 100644 index 0000000..55bf53a --- /dev/null +++ b/ext/sybase_ct/tests/skipif.inc @@ -0,0 +1,13 @@ +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require 'test.inc'; + + if (!extension_loaded('sybase_ct')) die('skip Sybase-CT extension not loaded'); + + sybase_min_server_severity(11); + if (!@sybase_connect(HOST, USER, PASSWORD)) die('skip Unable to connect'); +?> diff --git a/ext/sybase_ct/tests/test.inc b/ext/sybase_ct/tests/test.inc new file mode 100644 index 0000000..8dd2f7f --- /dev/null +++ b/ext/sybase_ct/tests/test.inc @@ -0,0 +1,86 @@ +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + // Change if needed + define('HOST', getenv('PHP_SYBASE_HOST')); + define('USER', getenv('PHP_SYBASE_USER')); + define('PASSWORD', getenv('PHP_SYBASE_PASS')); + define('TEMPDB', 'tempdb'); + + // {{{ bool sybase_msg_handler(int msgnumber, int severity, int state, int line, string text) + // Handles server messages + function sybase_msg_handler($msgnumber, $severity, $state, $line, $text) { + printf( + "*** Caught Sybase Server Message #%d [Severity %d, state %d] at line %d\n '%s'\n", + $msgnumber, + $severity, + $state, + $line, + chop($text) + ); + } + // }}} + + // {{{ public class sybase + class sybase { + + // {{{ public static bool static_handler(int msgnumber, int severity, int state, int line, string text) + // Handles server messages + static function static_handler($msgnumber, $severity, $state, $line, $text) { + return sybase_msg_handler($msgnumber, $severity, $state, $line, $text); + } + // }}} + + // {{{ public bool static_handler(int msgnumber, int severity, int state, int line, string text) + // Handles server messages + function handler($msgnumber, $severity, $state, $line, $text) { + return sybase_msg_handler($msgnumber, $severity, $state, $line, $text); + } + // }}} + } + // }}} + + // {{{ void sybase_set_messagehandler_ex(string handler) + // Sets the sybase message handler and dumps the result + function sybase_set_messagehandler_ex($handler) { + var_dump(sybase_set_message_handler($handler)); + } + + // {{{ resource sybase_connect_ex(string charset= NULL, string appname= NULL, bool new= FALSE) + // Connect to the sybase server using the defines HOST, USER and PASSWORD + function sybase_connect_ex($charset= NULL, $appname= NULL, $new= FALSE) { + sybase_min_server_severity(11); // Suppress "changed database context" + if (!($db= sybase_connect(HOST, USER, PASSWORD, $charset ? $charset : 'iso_1', $appname, $new))) { + die('Connect to '.USER.'@'.HOST.' failed (using password: '.(PASSWORD ? 'yes' : 'no').')'); + } + return $db; + } + // }}} + + // {{{ void sybase_select_ex(resource dbh, string query) + // Returns all fetched rows from an SQL query + function sybase_select_ex($dbh, $query) { + printf(">>> Query: %s\n", $query); + $h= sybase_query($query, $dbh); + printf("<<< Return: %s\n", gettype($h)); + flush(); + if (!is_resource($h)) return $h; + + $return= array(); + while ($row= sybase_fetch_assoc($h)) { + $return[]= $row; + } + return $return; + } + + // {{{ mixed sybase_select_single(resource dbh, string query) + // Fires an SQL query and returns the first value from the first row + function sybase_select_single($dbh, $query) { + $a = sybase_fetch_row(sybase_query($query, $dbh)); + return array_shift($a); + } + // }}} +?> diff --git a/ext/sybase_ct/tests/test_appname.phpt b/ext/sybase_ct/tests/test_appname.phpt new file mode 100644 index 0000000..71f5c32 --- /dev/null +++ b/ext/sybase_ct/tests/test_appname.phpt @@ -0,0 +1,55 @@ +--TEST-- +Sybase-CT application name +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + // {{{ bool compare_string(string expect, string actual) + // Compares expect to a trimmed version of actual + function compare_string($expect, $actual) { + $trimmed= rtrim($actual, ' '); + return (0 == strncmp($expect, $trimmed, strlen($trimmed))); + } + // }}} + + $program_name= 'phpt_test'; + $hostname= 'php.net'; + ini_set('sybct.hostname', $hostname); + + $db= sybase_connect_ex(NULL, $program_name); + $r= sybase_select_ex($db, ' + select + hostname, + program_name + from + master..sysprocesses + where + program_name = "'.$program_name.'"' + ); + + var_dump( + compare_string($program_name, $r[0]['program_name']), + compare_string($hostname, $r[0]['hostname']) + ); + + sybase_close($db); +?> +--EXPECTF-- +>>> Query: + select + hostname, + program_name + from + master..sysprocesses + where + program_name = "phpt_test" +<<< Return: resource +bool(true) +bool(true) diff --git a/ext/sybase_ct/tests/test_close.phpt b/ext/sybase_ct/tests/test_close.phpt new file mode 100644 index 0000000..e2c3ebc --- /dev/null +++ b/ext/sybase_ct/tests/test_close.phpt @@ -0,0 +1,25 @@ +--TEST-- +Sybase-CT close +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + var_dump($db); + sybase_close($db); + var_dump($db); + var_dump(sybase_query('select getdate()', $db)); +?> +--EXPECTF-- +resource(%d) of type (sybase-ct link) +resource(%d) of type (Unknown) + +Warning: sybase_query(): %d is not a valid Sybase-Link resource in %s on line %d +bool(false) diff --git a/ext/sybase_ct/tests/test_close_default.phpt b/ext/sybase_ct/tests/test_close_default.phpt new file mode 100644 index 0000000..a726a47 --- /dev/null +++ b/ext/sybase_ct/tests/test_close_default.phpt @@ -0,0 +1,21 @@ +--TEST-- +Sybase-CT close default connection +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + sybase_connect_ex(); + sybase_close(); + var_dump(sybase_query('select getdate()')); +?> +--EXPECTF-- + +Warning: sybase_query(): Sybase: No connection in %s on line %d +bool(false) diff --git a/ext/sybase_ct/tests/test_close_notopen.phpt b/ext/sybase_ct/tests/test_close_notopen.phpt new file mode 100644 index 0000000..13b4571 --- /dev/null +++ b/ext/sybase_ct/tests/test_close_notopen.phpt @@ -0,0 +1,18 @@ +--TEST-- +Sybase-CT close not open +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + sybase_close(); +?> +--EXPECTF-- + +Warning: sybase_close(): Sybase: No connection to close in %s on line %d diff --git a/ext/sybase_ct/tests/test_connect.phpt b/ext/sybase_ct/tests/test_connect.phpt new file mode 100644 index 0000000..e1e3eea --- /dev/null +++ b/ext/sybase_ct/tests/test_connect.phpt @@ -0,0 +1,19 @@ +--TEST-- +Sybase-CT connectivity +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + var_dump($db); + sybase_close($db); +?> +--EXPECTF-- +resource(%d) of type (sybase-ct link) diff --git a/ext/sybase_ct/tests/test_connection_caching.phpt b/ext/sybase_ct/tests/test_connection_caching.phpt new file mode 100644 index 0000000..d59aede --- /dev/null +++ b/ext/sybase_ct/tests/test_connection_caching.phpt @@ -0,0 +1,26 @@ +--TEST-- +Sybase-CT connection caching +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db1= sybase_connect_ex(); + $db2= sybase_connect_ex(); + $db3= sybase_connect_ex(NULL, NULL, $new= TRUE); + var_dump($db1, $db2, $db3, (string)$db1 == (string)$db2, (string)$db2 == (string)$db3); + sybase_close($db1); + +?> +--EXPECTF-- +resource(%d) of type (sybase-ct link) +resource(%d) of type (sybase-ct link) +resource(%d) of type (sybase-ct link) +bool(true) +bool(false) diff --git a/ext/sybase_ct/tests/test_connectionbased_msghandler.phpt b/ext/sybase_ct/tests/test_connectionbased_msghandler.phpt new file mode 100644 index 0000000..72e6b3a --- /dev/null +++ b/ext/sybase_ct/tests/test_connectionbased_msghandler.phpt @@ -0,0 +1,27 @@ +--TEST-- +Sybase-CT connection-based server message handler +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + var_dump($db); + var_dump(sybase_set_message_handler('sybase_msg_handler', $db)); + var_dump(sybase_select_ex($db, 'select getdate(NULL)')); + sybase_close($db); +?> +--EXPECTF-- +resource(%d) of type (sybase-ct link) +bool(true) +>>> Query: select getdate(NULL) +*** Caught Sybase Server Message #%d [Severity %d, state %d] at line %d + %s +<<< Return: boolean +bool(false) diff --git a/ext/sybase_ct/tests/test_fetch_object.phpt b/ext/sybase_ct/tests/test_fetch_object.phpt new file mode 100644 index 0000000..c23658f --- /dev/null +++ b/ext/sybase_ct/tests/test_fetch_object.phpt @@ -0,0 +1,74 @@ +--TEST-- +Sybase-CT sybase_fetch_object +--SKIPIF-- +<?php + require('skipif.inc'); +?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + // {{{ class article + class article { } + // }}} + + // {{{ resource fetch_object(resource db, [mixed arg= NULL]) + // Fetches a resultset and returns it as an object + function fetch_object($db, $arg= NULL) { + return sybase_fetch_object(sybase_query('select + 1 as "id", + "Hello" as "caption", + "timm" as "author", + getdate() as "lastchange" + ', $db), $arg); + } + // }}} + + $db= sybase_connect_ex(); + + // Test with stdClass + var_export(fetch_object($db)); echo "\n"; + + // Test with userland class + var_export(fetch_object($db, 'article')); echo "\n"; + + // Test with object + var_export(fetch_object($db, new article())); echo "\n"; + + // Test with non-existant class + var_export(fetch_object($db, '***')); echo "\n"; + + sybase_close($db); +?> +--EXPECTF-- +stdClass::__set_state(array( + 'id' => 1, + 'caption' => 'Hello', + 'author' => 'timm', + 'lastchange' => '%s', +)) +article::__set_state(array( + 'id' => 1, + 'caption' => 'Hello', + 'author' => 'timm', + 'lastchange' => '%s', +)) +article::__set_state(array( + 'id' => 1, + 'caption' => 'Hello', + 'author' => 'timm', + 'lastchange' => '%s', +)) + +Notice: sybase_fetch_object(): Sybase: Class *** has not been declared in %stest_fetch_object.php on line %d +stdClass::__set_state(array( + 'id' => 1, + 'caption' => 'Hello', + 'author' => 'timm', + 'lastchange' => '%s', +)) diff --git a/ext/sybase_ct/tests/test_fields.phpt b/ext/sybase_ct/tests/test_fields.phpt new file mode 100644 index 0000000..46e932b --- /dev/null +++ b/ext/sybase_ct/tests/test_fields.phpt @@ -0,0 +1,76 @@ +--TEST-- +Sybase-CT sybase_field_* functions +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + + // Issue a query + $q= sybase_unbuffered_query('select + 1 as "id", + "Hello" as "caption", + "timm" as "author", + getdate() as "lastchange" + ', $db, FALSE); + var_dump($q); + + var_dump(sybase_num_fields($q)); + + // Go through each field, dumping it + while ($field= sybase_fetch_field($q)) { + var_export($field); echo "\n"; + } + + // Seek to the second field and fetch it + var_dump(sybase_field_seek($q, 1)); + var_export(sybase_fetch_field($q)); echo "\n"; + + sybase_close($db); +?> +--EXPECTF-- +resource(%d) of type (sybase-ct result) +int(4) +stdClass::__set_state(array( + 'name' => 'id', + 'max_length' => 11, + 'column_source' => '', + 'numeric' => 1, + 'type' => 'int', +)) +stdClass::__set_state(array( + 'name' => 'caption', + 'max_length' => 5, + 'column_source' => '', + 'numeric' => 0, + 'type' => 'string', +)) +stdClass::__set_state(array( + 'name' => 'author', + 'max_length' => 4, + 'column_source' => '', + 'numeric' => 0, + 'type' => 'string', +)) +stdClass::__set_state(array( + 'name' => 'lastchange', + 'max_length' => 29, + 'column_source' => '', + 'numeric' => 0, + 'type' => 'datetime', +)) +bool(true) +stdClass::__set_state(array( + 'name' => 'caption', + 'max_length' => 5, + 'column_source' => '', + 'numeric' => 0, + 'type' => 'string', +)) diff --git a/ext/sybase_ct/tests/test_long.phpt b/ext/sybase_ct/tests/test_long.phpt new file mode 100644 index 0000000..de59bb9 --- /dev/null +++ b/ext/sybase_ct/tests/test_long.phpt @@ -0,0 +1,80 @@ +--TEST-- +Sybase-CT select LONG_MAX / LONG_MIN +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + define('LONG_MAX', is_int(2147483648) ? 9223372036854775807 : 2147483647); + define('LONG_MIN', -LONG_MAX - 1); + + $db= sybase_connect_ex(); + var_dump(sybase_select_db(TEMPDB, $db)); + + // Create table and insert some values + var_dump(sybase_query('create table test_long (value numeric(20, 0))')); + var_dump(sybase_query('insert test_long values ('.(LONG_MAX - 1).')')); + var_dump(sybase_query('insert test_long values ('.(LONG_MAX).')')); + var_dump(sybase_query('insert test_long values ('.(LONG_MAX + 1).')')); + var_dump(sybase_query('insert test_long values ('.(LONG_MIN + 1).')')); + var_dump(sybase_query('insert test_long values ('.(LONG_MIN).')')); + var_dump(sybase_query('insert test_long values ('.(LONG_MIN - 1).')')); + + // Select values + var_dump(sybase_select_ex($db, 'select value from test_long')); + + // Drop table + var_dump(sybase_query('drop table test_long')); + + sybase_close($db); +?> +--EXPECTF-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +>>> Query: select value from test_long +<<< Return: resource +array(6) { + [0]=> + array(1) { + ["value"]=> + int(%s) + } + [1]=> + array(1) { + ["value"]=> + int(%s) + } + [2]=> + array(1) { + ["value"]=> + float(%s) + } + [3]=> + array(1) { + ["value"]=> + int(-%s) + } + [4]=> + array(1) { + ["value"]=> + int(-%s) + } + [5]=> + array(1) { + ["value"]=> + float(-%s) + } +} +bool(true) diff --git a/ext/sybase_ct/tests/test_msghandler.phpt b/ext/sybase_ct/tests/test_msghandler.phpt new file mode 100644 index 0000000..afe97cb --- /dev/null +++ b/ext/sybase_ct/tests/test_msghandler.phpt @@ -0,0 +1,43 @@ +--TEST-- +Sybase-CT server message handler +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + + echo 'Nonexistant: '; sybase_set_messagehandler_ex('function_does_not_exist'); + echo 'Static method: '; sybase_set_messagehandler_ex(array('sybase', 'static_handler')); + echo 'Instance method: '; sybase_set_messagehandler_ex(array(new sybase(), 'handler')); + echo 'Lambda function: '; sybase_set_messagehandler_ex(create_function('', 'return FALSE;')); + echo 'Unset: '; sybase_set_messagehandler_ex(NULL); + echo 'Incorrect type: '; sybase_set_messagehandler_ex(1); + echo 'Function: '; sybase_set_messagehandler_ex('sybase_msg_handler'); + + var_dump(sybase_select_ex($db, 'select getdate(NULL)')); + sybase_close($db); +?> +--EXPECTF-- +Nonexistant: +Warning: sybase_set_message_handler() expects parameter 1 to be a valid callback, function 'function_does_not_exist' not found or invalid function name in %stest.inc on line %d +NULL +Static method: bool(true) +Instance method: bool(true) +Lambda function: bool(true) +Unset: bool(true) +Incorrect type: +Warning: sybase_set_message_handler() expects parameter 1 to be a valid callback, no array or string given in %stest.inc on line %d +NULL +Function: bool(true) +>>> Query: select getdate(NULL) +*** Caught Sybase Server Message #%d [Severity %d, state %d] at line %d + %s +<<< Return: boolean +bool(false) diff --git a/ext/sybase_ct/tests/test_msghandler_handled.phpt b/ext/sybase_ct/tests/test_msghandler_handled.phpt new file mode 100644 index 0000000..5952c3b --- /dev/null +++ b/ext/sybase_ct/tests/test_msghandler_handled.phpt @@ -0,0 +1,69 @@ +--TEST-- +Sybase-CT server message handler +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + // {{{ bool sybase_msg_handler(int msgnumber, int severity, int state, int line, string text) + // Handles server messages + function user_message_handler($msgnumber, $severity, $state, $line, $text) { + switch ($msgnumber) { + case 0: // print message + printf("!!! %s\n", trim($text)); + return; + + case 174: // The function 'GETDATE' requires 0 arguments. + case 11021: // Function GETDATE invoked with wrong number or type of argument(s) + printf("*** Caught '%s'\n", trim($text)); + return; + } + printf("Cannot handle message #%d\n", $msgnumber); + return FALSE; // Indicate we can't handle this + } + // }}} + + sybase_set_messagehandler_ex('user_message_handler'); + $db= sybase_connect_ex(); + sybase_min_server_severity(0); + + // These are handled + var_dump(sybase_select_ex($db, 'select getdate(NULL)')); + var_dump(sybase_select_ex($db, 'print "Hi"')); + + // These aren't + var_dump(sybase_select_ex($db, 'use NULL')); + var_dump(sybase_select_ex($db, 'select convert(datetime, "notadate")')); + + sybase_close($db); +?> +--EXPECTF-- +bool(true) +>>> Query: select getdate(NULL) +*** Caught '%s' +<<< Return: boolean +bool(false) +>>> Query: print "Hi" +!!! Hi +<<< Return: boolean +bool(true) +>>> Query: use NULL +Cannot handle message #156 + +Warning: sybase_query(): Sybase: Server message: Incorrect syntax near the keyword 'NULL'. + (severity 15, procedure N/A) in %s on line %d +<<< Return: boolean +bool(false) +>>> Query: select convert(datetime, "notadate") +Cannot handle message #249 + +Warning: sybase_query(): Sybase: Server message: Syntax error during explicit conversion of VARCHAR value 'notadate' to a DATETIME field. + (severity 16, procedure N/A) in %s on line %d +<<< Return: boolean +bool(false) diff --git a/ext/sybase_ct/tests/test_query_nostore.phpt b/ext/sybase_ct/tests/test_query_nostore.phpt new file mode 100644 index 0000000..9d717ec --- /dev/null +++ b/ext/sybase_ct/tests/test_query_nostore.phpt @@ -0,0 +1,98 @@ +--TEST-- +Sybase-CT query without storing +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + + // Create test table and insert some data + var_dump(sybase_query(' + create table #test ( + id numeric(10, 0) primary key not null, + caption varchar(255) not null, + author varchar(50) not null, + link varchar(255) null, + lastchange datetime default getdate() null + ) + ', $db)); + var_dump(sybase_query('insert into #test ( + id, caption, author + ) values ( + 1, "Hello", "timm" + ) + ', $db)); + var_dump(sybase_query('insert into #test ( + id, caption, author, link + ) values ( + 2, "World", "thekid", "http://thekid.de/" + ) + ', $db)); + var_dump(sybase_query('insert into #test ( + id, caption, author + ) values ( + 3, "PHP", "friebe" + ) + ', $db)); + + // Fetch data + $q= sybase_unbuffered_query('select * from #test order by id', $db, FALSE); + var_dump($q); + while ($row= sybase_fetch_assoc($q)) { + var_dump($row); + } + + // Clean up and close connection + var_dump(sybase_query('drop table #test')); + sybase_close($db); +?> +--EXPECTF-- +bool(true) +bool(true) +bool(true) +bool(true) +resource(%d) of type (sybase-ct result) +array(5) { + ["id"]=> + int(1) + ["caption"]=> + string(5) "Hello" + ["author"]=> + string(4) "timm" + ["link"]=> + NULL + ["lastchange"]=> + string(%d) "%s" +} +array(5) { + ["id"]=> + int(2) + ["caption"]=> + string(5) "World" + ["author"]=> + string(6) "thekid" + ["link"]=> + string(17) "http://thekid.de/" + ["lastchange"]=> + string(%d) "%s" +} +array(5) { + ["id"]=> + int(3) + ["caption"]=> + string(3) "PHP" + ["author"]=> + string(6) "friebe" + ["link"]=> + NULL + ["lastchange"]=> + string(%d) "%s" +} +bool(true) diff --git a/ext/sybase_ct/tests/test_types.phpt b/ext/sybase_ct/tests/test_types.phpt new file mode 100644 index 0000000..735c02d --- /dev/null +++ b/ext/sybase_ct/tests/test_types.phpt @@ -0,0 +1,87 @@ +--TEST-- +Sybase-CT select and types +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + define('LONG_MAX', is_int(2147483648) ? 9223372036854775807 : 2147483647); + define('LONG_MIN', -LONG_MAX - 1); + + $db= sybase_connect_ex(); + var_dump(sybase_select_ex($db, 'select + 1 as "integer", + '.(LONG_MIN).' as "integer_min", + '.(LONG_MIN - 1).' as "integer_min_exceed", + '.(LONG_MAX).' as "integer_max", + '.(LONG_MAX + 1).' as "integer_max_exceed", + 1.0 as "float", + 12345678901234567890123456789012.123456 as "large_float", + $22.36 as "money", + "Binford" as "string", + convert(datetime, "2004-01-23") as "date", + NULL as "null", + convert(bit, 1) as "bit", + convert(smalldatetime, "2004-01-23") as "smalldate", + convert(char(10), "char") as "char10" + ')); + + sybase_close($db); +?> +--EXPECTF-- +>>> Query: select + 1 as "integer", + -%s as "integer_min", + -%s as "integer_min_exceed", + %s as "integer_max", + %s as "integer_max_exceed", + 1.0 as "float", + 12345678901234567890123456789012.123456 as "large_float", + $22.36 as "money", + "Binford" as "string", + convert(datetime, "2004-01-23") as "date", + NULL as "null", + convert(bit, 1) as "bit", + convert(smalldatetime, "2004-01-23") as "smalldate", + convert(char(10), "char") as "char10" + +<<< Return: resource +array(1) { + [0]=> + array(%d) { + ["integer"]=> + int(1) + ["integer_min"]=> + int(-%s) + ["integer_min_exceed"]=> + float(-%s) + ["integer_max"]=> + int(%s) + ["integer_max_exceed"]=> + float(%s) + ["float"]=> + float(1) + ["large_float"]=> + string(39) "12345678901234567890123456789012.123456" + ["money"]=> + float(22.36) + ["string"]=> + string(7) "Binford" + ["date"]=> + string(19) "Jan 23 2004 12:00AM" + ["null"]=> + NULL + ["bit"]=> + int(1) + ["smalldate"]=> + string(19) "Jan 23 2004 12:00AM" + ["char10"]=> + string(10) "char " + } +} diff --git a/ext/sybase_ct/tests/test_unbuffered_no_full_fetch.phpt b/ext/sybase_ct/tests/test_unbuffered_no_full_fetch.phpt new file mode 100644 index 0000000..5faf8fe --- /dev/null +++ b/ext/sybase_ct/tests/test_unbuffered_no_full_fetch.phpt @@ -0,0 +1,44 @@ +--TEST-- +Sybase-CT unbuffered query without full fetching +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + var_dump($db); + + // Fetch #1 + $q= sybase_unbuffered_query('select name from master..systypes', $db); + var_dump($q, key(sybase_fetch_assoc($q))); + + // Fetch #2 - without having fetched all rows from previous query + $q= sybase_unbuffered_query('select name from master..systypes', $db); + var_dump($q, key(sybase_fetch_assoc($q))); + + // Fetch #3 - free first, without having fetched all rows from previous query + sybase_free_result($q); + $q= sybase_unbuffered_query('select name from master..systypes', $db); + var_dump($q, key(sybase_fetch_assoc($q))); + + // Close - without having fetched all rows from previous query + sybase_close($db); + echo 'CLOSED'; +?> +--EXPECTF-- +resource(%d) of type (sybase-ct link) +resource(%d) of type (sybase-ct result) +string(4) "name" + +Notice: sybase_unbuffered_query(): Sybase: Called without first fetching all rows from a previous unbuffered query in %s on line %d +resource(%d) of type (sybase-ct result) +string(4) "name" +resource(%d) of type (sybase-ct result) +string(4) "name" +CLOSED diff --git a/ext/sybase_ct/tests/test_unbuffered_query.phpt b/ext/sybase_ct/tests/test_unbuffered_query.phpt new file mode 100644 index 0000000..b2be2f2 --- /dev/null +++ b/ext/sybase_ct/tests/test_unbuffered_query.phpt @@ -0,0 +1,57 @@ +--TEST-- +Sybase-CT unbuffered query +--SKIPIF-- +<?php require('skipif.inc'); ?> +--FILE-- +<?php +/* This file is part of PHP test framework for ext/sybase_ct + * + * $Id$ + */ + + require('test.inc'); + + $db= sybase_connect_ex(); + var_dump($db); + + // Test #1: num_rows + $q= sybase_unbuffered_query('select name from master..systypes', $db); + var_dump($q); + $i= 0; + while ($r= sybase_fetch_assoc($q)) { + $i++; + } + var_dump($i, sybase_num_rows($q), $i == sybase_num_rows($q), $q); + sybase_free_result($q); + var_dump($q); + + // Test #2: after sybase_free_result, this should be an invalid resource + var_dump(FALSE == sybase_num_rows($q)); + + // Test #3: Seeking + $q= sybase_unbuffered_query('select name from master..systypes', $db); + var_dump($q); + $j= 0; + sybase_data_seek($q, 4); + while ($r= sybase_fetch_assoc($q)) { + $j++; + } + var_dump($i, $j, $i - $j); + + sybase_close($db); +?> +--EXPECTF-- +resource(%d) of type (sybase-ct link) +resource(%d) of type (sybase-ct result) +int(%d) +int(%d) +bool(true) +resource(%d) of type (sybase-ct result) +resource(%d) of type (Unknown) + +Warning: sybase_num_rows(): %d is not a valid Sybase result resource in %stest_unbuffered_query.php on line %d +bool(true) +resource(%d) of type (sybase-ct result) +int(%d) +int(%d) +int(4) |
