Annotation of embedaddon/php/ext/pdo_pgsql/tests/bug_33876.phpt, revision 1.1.1.2

1.1       misho       1: --TEST--
                      2: PDO PgSQL Bug #33876 (PDO misquotes/miscasts bool(false))
                      3: --SKIPIF--
                      4: <?php
                      5: if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
                      6: require dirname(__FILE__) . '/config.inc';
                      7: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
                      8: PDOTest::skip();
                      9: ?>
                     10: --FILE--
                     11: <?php
                     12: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
                     13: $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
                     14: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
                     15: 
                     16: $db->exec("SET LC_MESSAGES='C'");
                     17: $db->exec('CREATE TABLE test (foo varchar(5) NOT NULL, bar bool NOT NULL)');
                     18: $db->exec("INSERT INTO test VALUES('false','f')");
                     19: $db->exec("INSERT INTO test VALUES('true', 't')");
                     20: 
                     21: $res = $db->prepare('SELECT foo from test where bar = ?');
                     22: 
                     23: # this is the portable approach to binding a bool
                     24: $res->bindValue(1, false, PDO::PARAM_BOOL);
                     25: if (!$res->execute())
                     26:        print_r($res->errorInfo());
                     27: else
                     28:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     29: 
                     30: # this is the portable approach to binding a bool
                     31: $res->bindValue(1, true, PDO::PARAM_BOOL);
                     32: if (!$res->execute())
                     33:        print_r($res->errorInfo());
                     34: else
                     35:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     36: 
                     37: 
                     38: # true gets cast to string (because the implied default is string)
                     39: # true-as-string is 1, so this "works"
                     40: if (!$res->execute(array(true)))
                     41:        print_r($res->errorInfo());
                     42: else
                     43:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     44: 
                     45: # Expected to fail; unless told otherwise, PDO assumes string inputs
                     46: # false -> "" as string, which pgsql doesn't like
                     47: if (!$res->execute(array(false)))
                     48:        print_r($res->errorInfo());
                     49: else
                     50:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     51: 
                     52: # And now using emulator prepares
                     53: echo "EMUL\n";
                     54: 
                     55: 
                     56: $res = $db->prepare('SELECT foo from test where bar = ?', array(
                     57:        PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT => true));
                     58: 
                     59: # this is the portable approach to binding a bool
                     60: $res->bindValue(1, false, PDO::PARAM_BOOL);
                     61: if (!$res->execute())
                     62:        print_r($res->errorInfo());
                     63: else
                     64:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     65: 
                     66: # this is the portable approach to binding a bool
                     67: $res->bindValue(1, true, PDO::PARAM_BOOL);
                     68: if (!$res->execute())
                     69:        print_r($res->errorInfo());
                     70: else
                     71:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     72: 
                     73: 
                     74: # true gets cast to string (because the implied default is string)
                     75: # true-as-string is 1, so this "works"
                     76: if (!$res->execute(array(true)))
                     77:        print_r($res->errorInfo());
                     78: else
                     79:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     80: 
                     81: # Expected to fail; unless told otherwise, PDO assumes string inputs
                     82: # false -> "" as string, which pgsql doesn't like
                     83: if (!$res->execute(array(false))) {
                     84:        $err = $res->errorInfo();
1.1.1.2 ! misho      85:        // Strip additional lines outputted by recent PgSQL versions
1.1       misho      86:        $err[2] = trim(current(explode("\n", $err[2])));
                     87:        print_r($err);
                     88: } else {
                     89:        print_r($res->fetchAll(PDO::FETCH_ASSOC));
                     90: }
                     91: 
                     92: 
                     93: 
                     94: --EXPECT--
                     95: Array
                     96: (
                     97:     [0] => Array
                     98:         (
                     99:             [foo] => false
                    100:         )
                    101: 
                    102: )
                    103: Array
                    104: (
                    105:     [0] => Array
                    106:         (
                    107:             [foo] => true
                    108:         )
                    109: 
                    110: )
                    111: Array
                    112: (
                    113:     [0] => Array
                    114:         (
                    115:             [foo] => true
                    116:         )
                    117: 
                    118: )
                    119: Array
                    120: (
                    121:     [0] => 22P02
                    122:     [1] => 7
                    123:     [2] => ERROR:  invalid input syntax for type boolean: ""
                    124: )
                    125: EMUL
                    126: Array
                    127: (
                    128:     [0] => Array
                    129:         (
                    130:             [foo] => false
                    131:         )
                    132: 
                    133: )
                    134: Array
                    135: (
                    136:     [0] => Array
                    137:         (
                    138:             [foo] => true
                    139:         )
                    140: 
                    141: )
                    142: Array
                    143: (
                    144:     [0] => Array
                    145:         (
                    146:             [foo] => true
                    147:         )
                    148: 
                    149: )
                    150: Array
                    151: (
                    152:     [0] => 22P02
                    153:     [1] => 7
                    154:     [2] => ERROR:  invalid input syntax for type boolean: ""
                    155: )

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>