uw                                       Thu, 26 Aug 2010 13:35:20 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=302800

Log:
Test for http://bugs.mysql.com/bug.php?id=49406, Binding params doesn't work 
when selecting a date inside a CASE-WHEN

Changed paths:
    A   php/php-src/branches/PHP_5_3/ext/mysqli/tests/bug_mysql_49406.phpt
    A   php/php-src/trunk/ext/mysqli/tests/bug_mysql_49406.phpt

Added: php/php-src/branches/PHP_5_3/ext/mysqli/tests/bug_mysql_49406.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/tests/bug_mysql_49406.phpt          
                (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/bug_mysql_49406.phpt  
2010-08-26 13:35:20 UTC (rev 302800)
@@ -0,0 +1,107 @@
+--TEST--
+MySQL Bug #49406 (Binding params doesn't work when selecting a date inside a 
CASE-WHEN, http://bugs.mysql.com/bug.php?id=49406)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+       require_once("connect.inc");
+
+       if (!($link = my_mysqli_connect($host, $user, $passwd, $db, $port, 
$socket)))
+               printf("[001] Cannot connect to the server using host=%s, 
user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
+                       $host, $user, $db, $port, $socket);
+
+       $query = "SELECT CASE  WHEN 0 THEN CAST('2009-12-03' AS DATE)  ELSE 
CAST('2009-12-03' AS DATE) END";
+
+       if (!$res = $link->query($query))
+               printf("[002] [%d] %s\n", $link->errno, $link->error);
+
+       if (!$row = $res->fetch_row())
+               printf("[003] No result, [%d] %s\n", $link->errno, 
$link->error);
+
+       $res->free();
+
+       if ($row[0] != '2009-12-03') {
+               printf("[004] Expecting '2009-12-03' got '%s'\n", $row[0]);
+       }
+
+       if (!$stmt = $link->prepare($query))
+               printf("[005] [%d] %s\n", $link->errno, $link->error);
+
+       if (!$stmt->execute() || !$stmt->store_result())
+               printf("[006] [%d] %s\n", $stmt->errno, $stmt->error);
+
+
+       $datatypes = array(
+               MYSQLI_TYPE_TINY => "TINY",
+               MYSQLI_TYPE_SHORT => "SHORT",
+               MYSQLI_TYPE_LONG => "LONG",
+               MYSQLI_TYPE_FLOAT => "FLOAT",
+               MYSQLI_TYPE_DOUBLE => "DOUBLE",
+               MYSQLI_TYPE_TIMESTAMP => "TIMESTAMP",
+               MYSQLI_TYPE_LONGLONG => "LONGLONG",
+               MYSQLI_TYPE_INT24 => "INT24",
+               MYSQLI_TYPE_DATE => "DATE",
+               MYSQLI_TYPE_TIME => "TIME",
+               MYSQLI_TYPE_DATETIME => "DATETIME",
+               MYSQLI_TYPE_YEAR => "YEAR",
+               MYSQLI_TYPE_ENUM => "ENUM",
+               MYSQLI_TYPE_SET => "SET",
+               MYSQLI_TYPE_TINY_BLOB => "TINYBLOB",
+               MYSQLI_TYPE_MEDIUM_BLOB => "MEDIUMBLOB",
+               MYSQLI_TYPE_LONG_BLOB => "LONGBLOB",
+               MYSQLI_TYPE_BLOB => "BLOB",
+               MYSQLI_TYPE_VAR_STRING => "VAR_STRING",
+               MYSQLI_TYPE_STRING => "STRING",
+               MYSQLI_TYPE_NULL => "NULL",
+               MYSQLI_TYPE_NEWDATE => "NEWDATE",
+               MYSQLI_TYPE_INTERVAL => "INTERVAL",
+               MYSQLI_TYPE_GEOMETRY => "GEOMETRY",
+       );
+
+       $meta_res = $stmt->result_metadata();
+       for ($field_idx = 0; $field_idx < $meta_res->field_count; $field_idx++) 
{
+               $field = $meta_res->fetch_field();
+               printf("Field        : %d\n", $field_idx);
+               printf("Name         : %s\n", $field->name);
+               printf("Orgname      : %s\n", $field->orgname);
+               printf("Table        : %s\n", $field->table);
+               printf("Orgtable     : %s\n", $field->orgtable);
+               printf("Maxlength    : %d\n", $field->max_length);
+               printf("Length       : %d\n", $field->length);
+               printf("Charsetnr    : %d\n", $field->charsetnr);
+               printf("Flags        : %d\n", $field->flags);
+               printf("Type         : %d (%s)\n", $field->type, 
(isset($datatypes[$field->type])) ? $datatypes[$field->type] : 'unknown');
+               printf("Decimals     : %d\n", $field->decimals);
+       }
+
+       $row_stmt = null;
+       if (!$stmt->bind_result($row_stmt) || !$stmt->fetch())
+               printf("[007] [%d] %s\n", $stmt->errno, $stmt->error);
+
+       if ($row[0] != $row_stmt) {
+               printf("[008] PS and non-PS results differ, dumping data\n");
+               var_dump($row[0]);
+               var_dump($row_stmt);
+       }
+
+       $stmt->close();
+       $link->close();
+
+       echo "done";
+?>
+--EXPECTF--
+Field        : %s
+Name         : %s
+Orgname      :%s
+Table        :%s
+Orgtable     :%s
+Maxlength    : %d
+Length       : %d
+Charsetnr    : %d
+Flags        : %d
+Type         : %d (%s)
+Decimals     : %d
+done
\ No newline at end of file

Added: php/php-src/trunk/ext/mysqli/tests/bug_mysql_49406.phpt
===================================================================
--- php/php-src/trunk/ext/mysqli/tests/bug_mysql_49406.phpt                     
        (rev 0)
+++ php/php-src/trunk/ext/mysqli/tests/bug_mysql_49406.phpt     2010-08-26 
13:35:20 UTC (rev 302800)
@@ -0,0 +1,107 @@
+--TEST--
+MySQL Bug #49406 (Binding params doesn't work when selecting a date inside a 
CASE-WHEN, http://bugs.mysql.com/bug.php?id=49406)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+       require_once("connect.inc");
+
+       if (!($link = my_mysqli_connect($host, $user, $passwd, $db, $port, 
$socket)))
+               printf("[001] Cannot connect to the server using host=%s, 
user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
+                       $host, $user, $db, $port, $socket);
+
+       $query = "SELECT CASE  WHEN 0 THEN CAST('2009-12-03' AS DATE)  ELSE 
CAST('2009-12-03' AS DATE) END";
+
+       if (!$res = $link->query($query))
+               printf("[002] [%d] %s\n", $link->errno, $link->error);
+
+       if (!$row = $res->fetch_row())
+               printf("[003] No result, [%d] %s\n", $link->errno, 
$link->error);
+
+       $res->free();
+
+       if ($row[0] != '2009-12-03') {
+               printf("[004] Expecting '2009-12-03' got '%s'\n", $row[0]);
+       }
+
+       if (!$stmt = $link->prepare($query))
+               printf("[005] [%d] %s\n", $link->errno, $link->error);
+
+       if (!$stmt->execute() || !$stmt->store_result())
+               printf("[006] [%d] %s\n", $stmt->errno, $stmt->error);
+
+
+       $datatypes = array(
+               MYSQLI_TYPE_TINY => "TINY",
+               MYSQLI_TYPE_SHORT => "SHORT",
+               MYSQLI_TYPE_LONG => "LONG",
+               MYSQLI_TYPE_FLOAT => "FLOAT",
+               MYSQLI_TYPE_DOUBLE => "DOUBLE",
+               MYSQLI_TYPE_TIMESTAMP => "TIMESTAMP",
+               MYSQLI_TYPE_LONGLONG => "LONGLONG",
+               MYSQLI_TYPE_INT24 => "INT24",
+               MYSQLI_TYPE_DATE => "DATE",
+               MYSQLI_TYPE_TIME => "TIME",
+               MYSQLI_TYPE_DATETIME => "DATETIME",
+               MYSQLI_TYPE_YEAR => "YEAR",
+               MYSQLI_TYPE_ENUM => "ENUM",
+               MYSQLI_TYPE_SET => "SET",
+               MYSQLI_TYPE_TINY_BLOB => "TINYBLOB",
+               MYSQLI_TYPE_MEDIUM_BLOB => "MEDIUMBLOB",
+               MYSQLI_TYPE_LONG_BLOB => "LONGBLOB",
+               MYSQLI_TYPE_BLOB => "BLOB",
+               MYSQLI_TYPE_VAR_STRING => "VAR_STRING",
+               MYSQLI_TYPE_STRING => "STRING",
+               MYSQLI_TYPE_NULL => "NULL",
+               MYSQLI_TYPE_NEWDATE => "NEWDATE",
+               MYSQLI_TYPE_INTERVAL => "INTERVAL",
+               MYSQLI_TYPE_GEOMETRY => "GEOMETRY",
+       );
+
+       $meta_res = $stmt->result_metadata();
+       for ($field_idx = 0; $field_idx < $meta_res->field_count; $field_idx++) 
{
+               $field = $meta_res->fetch_field();
+               printf("Field        : %d\n", $field_idx);
+               printf("Name         : %s\n", $field->name);
+               printf("Orgname      : %s\n", $field->orgname);
+               printf("Table        : %s\n", $field->table);
+               printf("Orgtable     : %s\n", $field->orgtable);
+               printf("Maxlength    : %d\n", $field->max_length);
+               printf("Length       : %d\n", $field->length);
+               printf("Charsetnr    : %d\n", $field->charsetnr);
+               printf("Flags        : %d\n", $field->flags);
+               printf("Type         : %d (%s)\n", $field->type, 
(isset($datatypes[$field->type])) ? $datatypes[$field->type] : 'unknown');
+               printf("Decimals     : %d\n", $field->decimals);
+       }
+
+       $row_stmt = null;
+       if (!$stmt->bind_result($row_stmt) || !$stmt->fetch())
+               printf("[007] [%d] %s\n", $stmt->errno, $stmt->error);
+
+       if ($row[0] != $row_stmt) {
+               printf("[008] PS and non-PS results differ, dumping data\n");
+               var_dump($row[0]);
+               var_dump($row_stmt);
+       }
+
+       $stmt->close();
+       $link->close();
+
+       echo "done";
+?>
+--EXPECTF--
+Field        : %s
+Name         : %s
+Orgname      :%s
+Table        :%s
+Orgtable     :%s
+Maxlength    : %d
+Length       : %d
+Charsetnr    : %d
+Flags        : %d
+Type         : %d (%s)
+Decimals     : %d
+done
\ No newline at end of file

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to