7 changed files with 338 additions and 0 deletions
-
88ext/sybase_ct/tests/bug22403.phpt
-
24ext/sybase_ct/tests/bug6339.phpt
-
8ext/sybase_ct/tests/skipif.inc
-
84ext/sybase_ct/tests/test.inc
-
19ext/sybase_ct/tests/test_connect.phpt
-
39ext/sybase_ct/tests/test_msghandler.phpt
-
76ext/sybase_ct/tests/test_types.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= basename(__FILE__, '.php'); |
||||
|
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 4] 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) |
||||
@ -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) |
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
<?php |
||||
|
/* This file is part of PHP test framework for ext/sybase_ct |
||||
|
* |
||||
|
* $Id$ |
||||
|
*/ |
||||
|
|
||||
|
if (!extension_loaded('sybase_ct')) die('Sybase-CT extension not loaded'); |
||||
|
?> |
||||
@ -0,0 +1,84 @@ |
|||||
|
<?php |
||||
|
/* This file is part of PHP test framework for ext/sybase_ct |
||||
|
* |
||||
|
* $Id$ |
||||
|
*/ |
||||
|
|
||||
|
// Change if needed |
||||
|
define('HOST', 'php3'); |
||||
|
define('USER', 'news'); |
||||
|
define('PASSWORD', 'stuemper'); |
||||
|
|
||||
|
// {{{ 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 |
||||
|
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) |
||||
|
// Connect to the sybase server using the defines HOST, USER and PASSWORD |
||||
|
function sybase_connect_ex($charset= NULL, $appname= NULL) { |
||||
|
sybase_min_server_severity(11); // Suppress "changed database context" |
||||
|
if (!($db= sybase_connect(HOST, USER, PASSWORD, $charset, $appname))) { |
||||
|
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) { |
||||
|
return array_shift(sybase_fetch_row(sybase_query($query, $dbh))); |
||||
|
} |
||||
|
// }}} |
||||
|
?> |
||||
@ -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) |
||||
@ -0,0 +1,39 @@ |
|||||
|
--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 '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(): First argumented is expected to be a valid callback, 'function_does_not_exist' was given in %s/test.inc on line %d |
||||
|
bool(false) |
||||
|
Static method: bool(true) |
||||
|
Instance method: bool(true) |
||||
|
Lambda function: bool(true) |
||||
|
Unset: bool(true) |
||||
|
Function: bool(true) |
||||
|
>>> Query: select getdate(NULL) |
||||
|
*** Caught Sybase Server Message #%d [Severity %d, state %d] at line %d |
||||
|
%s |
||||
|
<<< Return: boolean |
||||
|
bool(false) |
||||
@ -0,0 +1,76 @@ |
|||||
|
--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'); |
||||
|
|
||||
|
$db= sybase_connect_ex(); |
||||
|
var_dump(sybase_select_ex($db, 'select |
||||
|
1 as "integer", |
||||
|
-2147483647 as "integer_min", |
||||
|
-2147483648 as "integer_min_exceed", |
||||
|
2147483647 as "integer_max", |
||||
|
2147483648 as "integer_max_exceed", |
||||
|
1.0 as "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" |
||||
|
')); |
||||
|
|
||||
|
sybase_close($db); |
||||
|
?> |
||||
|
--EXPECTF-- |
||||
|
>>> Query: select |
||||
|
1 as "integer", |
||||
|
-2147483647 as "integer_min", |
||||
|
-2147483648 as "integer_min_exceed", |
||||
|
2147483647 as "integer_max", |
||||
|
2147483648 as "integer_max_exceed", |
||||
|
1.0 as "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" |
||||
|
|
||||
|
<<< Return: resource |
||||
|
array(1) { |
||||
|
[0]=> |
||||
|
array(%d) { |
||||
|
["integer"]=> |
||||
|
int(1) |
||||
|
["integer_min"]=> |
||||
|
int(-2147483647) |
||||
|
["integer_min_exceed"]=> |
||||
|
float(-2147483648) |
||||
|
["integer_max"]=> |
||||
|
int(2147483647) |
||||
|
["integer_max_exceed"]=> |
||||
|
float(2147483648) |
||||
|
["float"]=> |
||||
|
float(1) |
||||
|
["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" |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue