Annotation of embedaddon/php/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: MySQL PDO->__construct(), PDO::ATTR_PERSISTENT
! 3: --SKIPIF--
! 4: <?php
! 5: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
! 6: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
! 7: MySQLPDOTest::skip();
! 8: ?>
! 9: --FILE--
! 10: <?php
! 11: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
! 12:
! 13: try {
! 14:
! 15: $dsn = MySQLPDOTest::getDSN();
! 16: $user = PDO_MYSQL_TEST_USER;
! 17: $pass = PDO_MYSQL_TEST_PASS;
! 18:
! 19: $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
! 20: $db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
! 21: $db1->exec('SET @pdo_persistent_connection=1');
! 22: $stmt = $db2->query('SELECT @pdo_persistent_connection as _pers');
! 23: $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
! 24: if ($tmp['_pers'] !== '1')
! 25: printf("[001] Both handles should use the same connection.");
! 26:
! 27: $stmt = $db1->query('SELECT CONNECTION_ID() as _con1');
! 28: $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
! 29: $con1 = $tmp['_con1'];
! 30:
! 31: $stmt = $db2->query('SELECT CONNECTION_ID() as _con2');
! 32: $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
! 33: $con2 = $tmp['_con2'];
! 34:
! 35: if ($con1 !== $con2)
! 36: printf("[002] Both handles should report the same MySQL thread ID");
! 37:
! 38: $db1 = NULL; /* should be equal to closing to my understanding */
! 39: $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
! 40: $stmt = $db1->query('SELECT CONNECTION_ID() as _con1');
! 41: $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
! 42: $con1 = $tmp['_con1'];
! 43:
! 44: if ($con1 !== $con2)
! 45: printf("[003] Both handles should report the same MySQL thread ID");
! 46:
! 47: $affected = $db1->exec(sprintf('KILL %d', $con1));
! 48: // Server needs some think-time sometimes
! 49: sleep(1);
! 50: if ('00000' == $db1->errorCode()) {
! 51: // looks like KILL has worked ? Or not... TODO: why no warning with libmysql?!
! 52: @$db1->exec("SET @pdo_persistent_connection=2");
! 53: // but now I want to see some error...
! 54: if ('HY000' != $db1->errorCode())
! 55: printf("[004] Wrong error code %s\n", $db1->errorCode());
! 56:
! 57: $tmp = implode(' ', $db1->errorInfo());
! 58: if (!strstr($tmp, '2006'))
! 59: printf("[005] Wrong error info %s\n", $tmp);
! 60: }
! 61:
! 62: $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => false));
! 63: $stmt = $db1->query('SELECT CONNECTION_ID() as _con1');
! 64: $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
! 65: $con1 = $tmp['_con1'];
! 66:
! 67: $db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
! 68: $stmt = $db2->query('SELECT CONNECTION_ID() as _con2');
! 69: $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
! 70: $con2 = $tmp['_con2'];
! 71:
! 72: if ($con1 == $con2)
! 73: printf("[006] Looks like the persistent and the non persistent connection are using the same link?!\n");
! 74:
! 75: // lets go crazy and create a few pconnections...
! 76: $connections = array();
! 77: for ($i = 0; $i <= 20; $i++) {
! 78: $connections[$i] = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
! 79: }
! 80: do {
! 81: $i = mt_rand(0, 20);
! 82: if (isset($connections[$i]))
! 83: unset($connections[$i]);
! 84: } while (!empty($connections));
! 85:
! 86:
! 87: } catch (PDOException $e) {
! 88: printf("[001] %s, [%s] %s\n",
! 89: $e->getMessage(),
! 90: (is_object($db)) ? $db->errorCode() : 'n/a',
! 91: (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a');
! 92: }
! 93:
! 94: print "done!";
! 95: ?>
! 96: --EXPECTF--
! 97: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>