--TEST--
MySQL PDOStatement->columnCount()
--SKIPIF--
<?php
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR 'skipif.inc');
require_once(
dirname(__FILE__) . DIRECTORY_SEPARATOR 'mysql_pdo_test.inc');
MySQLPDOTest::skip();
$db MySQLPDOTest::factory();
?>
--FILE--
<?php
    
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR 'mysql_pdo_test.inc');
    
$db MySQLPDOTest::factory();
    
MySQLPDOTest::createTestTable($db);

    
// The only purpose of this is to check if emulated and native PS
  // return the same. If it works for one, it should work for all.
    // Internal data structures should be the same in both cases.
    
printf("Testing emulated PS...\n");
    try {
        
$db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY1);
        if (
!= $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
            
printf("[002] Unable to turn on emulated prepared statements\n");

        
$stmt $db->prepare("SELECT id, label, '?' as foo FROM test");
        
$stmt->execute();
        
var_dump($stmt->columnCount());

        
$stmt $db->query('SELECT * FROM test');
        
var_dump($stmt->columnCount());

    } catch (
PDOException $e) {
        
printf("[001] %s [%s] %s\n",
            
$e->getMessage(), $db->errorCode(), implode(' '$db->errorInfo()));
    }

    
printf("Testing native PS...\n");
    try {
        
$db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY0);
        if (
!= $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
            
printf("[004] Unable to turn off emulated prepared statements\n");

        
$stmt $db->prepare("SELECT id, label, '?' as foo, 'TODO - Stored Procedure' as bar FROM test");
        
$stmt->execute();
        
var_dump($stmt->columnCount());

        
$stmt $db->query('SELECT * FROM test');
        
var_dump($stmt->columnCount());

    } catch (
PDOException $e) {
        
printf("[003] %s [%s] %s\n",
            
$e->getMessage(), $db->errorCode(), implode(' '$db->errorInfo()));
    }

    print 
"done!";
?>
--CLEAN--
<?php
require dirname(__FILE__) . '/mysql_pdo_test.inc';
MySQLPDOTest::dropTestTable();
?>
--EXPECTF--
Testing emulated PS...
int(3)
int(2)
Testing native PS...
int(4)
int(2)
done!