Annotation of embedaddon/php/ext/pdo_mysql/tests/bug_44454.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Bug #44454 (Unexpected exception thrown in foreach() statement)
                      3: --SKIPIF--
                      4: <?php
                      5: if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) 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__) . '/config.inc';
                     13: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
                     14: $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
                     15: 
                     16: function bug_44454($db) {
                     17: 
                     18:        try {
                     19: 
                     20:                $db->exec('DROP TABLE IF EXISTS test');
                     21:                $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))');
                     22:                $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
                     23: 
                     24:                $stmt = $db->query('SELECT a, b FROM test');
                     25:                printf("... SELECT has returned %d row...\n", $stmt->rowCount());
                     26:                while ($row = $stmt->fetch()) {
                     27:                        try {
                     28:                                printf("... INSERT should fail...\n");
                     29:                                $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
                     30:                        } catch (Exception $e) {
                     31:                                printf("... STMT - %s\n", var_export($stmt->errorCode(), true));
                     32:                                printf("... PDO  - %s\n", var_export($db->errorInfo(), true));
                     33:                        }
                     34:                }
                     35: 
                     36:                $db->exec('DROP TABLE IF EXISTS test');
                     37:                $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))');
                     38:                $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
                     39: 
                     40:        } catch (Exception $e) {
                     41:                printf("... While error %s\n", $e->getMessage()); ;
                     42:        }
                     43: 
                     44:        $stmt = $db->query('SELECT a, b FROM test');
                     45:        printf("... SELECT has returned %d row...\n", $stmt->rowCount());
                     46:        foreach ($stmt as $row) {
                     47:                try {
                     48:                        printf("... INSERT should fail...\n");
                     49:                        $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
                     50:                } catch (Exception $e) {
                     51:                        printf("... STMT - %s\n", var_export($stmt->errorCode(), true));
                     52:                        printf("... PDO  - %s\n", var_export($db->errorInfo(), true));
                     53:                }
                     54:        }
                     55: 
                     56: }
                     57: 
                     58: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                     59: 
                     60: print "Native Prepared Statements\n";
                     61: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
                     62: bug_44454($db);
                     63: 
                     64: print "\nEmulated Prepared Statements\n";
                     65: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
                     66: bug_44454($db);
                     67: 
                     68: print "done!";
                     69: ?>
                     70: --CLEAN--
                     71: <?php
                     72: require dirname(__FILE__) . '/mysql_pdo_test.inc';
                     73: $db = MySQLPDOTest::factory();
                     74: $db->exec('DROP TABLE IF EXISTS test');
                     75: ?>
                     76: --XFAIL--
                     77: For some reason the exception gets thrown at the wrong place
                     78: --EXPECTF--
                     79: Native Prepared Statements
                     80: ... SELECT has returned 1 row...
                     81: ... INSERT should fail...
                     82: ... STMT - '00000'
                     83: ... PDO  - array (
                     84:   0 => '23000',
                     85:   1 => 1062,
                     86:   2 => 'Duplicate entry \'1-1\' for key %s',
                     87: )
                     88: ... SELECT has returned 1 row...
                     89: ... INSERT should fail...
                     90: ... STMT - '00000'
                     91: ... PDO  - array (
                     92:   0 => '23000',
                     93:   1 => 1062,
                     94:   2 => 'Duplicate entry \'1-1\' for key %s',
                     95: )
                     96: 
                     97: Emulated Prepared Statements
                     98: ... SELECT has returned 1 row...
                     99: ... INSERT should fail...
                    100: ... STMT - '00000'
                    101: ... PDO  - array (
                    102:   0 => '23000',
                    103:   1 => 1062,
                    104:   2 => 'Duplicate entry \'1-1\' for key %s',
                    105: )
                    106: ... SELECT has returned 1 row...
                    107: ... INSERT should fail...
                    108: ... STMT - '00000'
                    109: ... PDO  - array (
                    110:   0 => '23000',
                    111:   1 => 1062,
                    112:   2 => 'Duplicate entry \'1-1\' for key %s',
                    113: )
                    114: done!

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