]> granicus.if.org Git - php/commitdiff
- Initial release
authorTimm Friebe <thekid@php.net>
Sat, 24 Jan 2004 02:18:13 +0000 (02:18 +0000)
committerTimm Friebe <thekid@php.net>
Sat, 24 Jan 2004 02:18:13 +0000 (02:18 +0000)
ext/sybase_ct/tests/bug22403.phpt [new file with mode: 0644]
ext/sybase_ct/tests/bug6339.phpt [new file with mode: 0644]
ext/sybase_ct/tests/skipif.inc [new file with mode: 0644]
ext/sybase_ct/tests/test.inc [new file with mode: 0644]
ext/sybase_ct/tests/test_connect.phpt [new file with mode: 0644]
ext/sybase_ct/tests/test_msghandler.phpt [new file with mode: 0644]
ext/sybase_ct/tests/test_types.phpt [new file with mode: 0644]

diff --git a/ext/sybase_ct/tests/bug22403.phpt b/ext/sybase_ct/tests/bug22403.phpt
new file mode 100644 (file)
index 0000000..c9a2186
--- /dev/null
@@ -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)
diff --git a/ext/sybase_ct/tests/bug6339.phpt b/ext/sybase_ct/tests/bug6339.phpt
new file mode 100644 (file)
index 0000000..3b0a072
--- /dev/null
@@ -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 (file)
index 0000000..8c07f7e
--- /dev/null
@@ -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');
+?>
diff --git a/ext/sybase_ct/tests/test.inc b/ext/sybase_ct/tests/test.inc
new file mode 100644 (file)
index 0000000..1a57bcb
--- /dev/null
@@ -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)));
+  }
+  // }}}
+?>
diff --git a/ext/sybase_ct/tests/test_connect.phpt b/ext/sybase_ct/tests/test_connect.phpt
new file mode 100644 (file)
index 0000000..e1e3eea
--- /dev/null
@@ -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_msghandler.phpt b/ext/sybase_ct/tests/test_msghandler.phpt
new file mode 100644 (file)
index 0000000..ca0b63f
--- /dev/null
@@ -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)
diff --git a/ext/sybase_ct/tests/test_types.phpt b/ext/sybase_ct/tests/test_types.phpt
new file mode 100644 (file)
index 0000000..4175728
--- /dev/null
@@ -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"
+  }
+}