diff options
author | Matteo Beccati <mbeccati@php.net> | 2014-10-17 16:23:25 +0200 |
---|---|---|
committer | Matteo Beccati <mbeccati@php.net> | 2014-10-17 16:48:58 +0200 |
commit | 9935bf7df70d8fcfa9ef5c2f47e1d760ffc3f666 (patch) | |
tree | ce5629d249ef452c742376c0db78d65d0b77ca89 /ext/pdo_pgsql | |
parent | f2fa7a41cfc9854e74148e6f6330181f42372371 (diff) | |
parent | 8c5e2e66bcbb6fa24db6515a09be36bb4bbf0860 (diff) | |
download | php-git-9935bf7df70d8fcfa9ef5c2f47e1d760ffc3f666.tar.gz |
Merge branch 'PHP-5.6'
* PHP-5.6:
Fixed bug #68199 (PDO::pgsqlGetNotify doesn't support NOTIFY payloads)
News entry for new curl constants
Diffstat (limited to 'ext/pdo_pgsql')
-rw-r--r-- | ext/pdo_pgsql/pgsql_driver.c | 6 | ||||
-rw-r--r-- | ext/pdo_pgsql/tests/bug68199.phpt | 109 |
2 files changed, 115 insertions, 0 deletions
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index 327d70218b..b3a9634c6f 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -1061,10 +1061,16 @@ static PHP_METHOD(PDO, pgsqlGetNotify) if (result_type == PDO_FETCH_NUM || result_type == PDO_FETCH_BOTH) { add_index_string(return_value, 0, pgsql_notify->relname); add_index_long(return_value, 1, pgsql_notify->be_pid); + if (pgsql_notify->extra && pgsql_notify->extra[0]) { + add_index_string(return_value, 2, pgsql_notify->extra, 1); + } } if (result_type == PDO_FETCH_ASSOC || result_type == PDO_FETCH_BOTH) { add_assoc_string(return_value, "message", pgsql_notify->relname); add_assoc_long(return_value, "pid", pgsql_notify->be_pid); + if (pgsql_notify->extra && pgsql_notify->extra[0]) { + add_assoc_string(return_value, "payload", pgsql_notify->extra, 1); + } } PQfreemem(pgsql_notify); diff --git a/ext/pdo_pgsql/tests/bug68199.phpt b/ext/pdo_pgsql/tests/bug68199.phpt new file mode 100644 index 0000000000..9abfba2b8e --- /dev/null +++ b/ext/pdo_pgsql/tests/bug68199.phpt @@ -0,0 +1,109 @@ +--TEST-- +Bug #68199 (PDO::pgsqlGetNotify doesn't support NOTIFY payloads) +--SKIPIF-- +<?php # vim:se ft=php: +if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded'); +require dirname(__FILE__) . '/config.inc'; +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +PDOTest::skip(); + +$db = PDOTest::factory(); +if (version_compare($db->getAttribute(PDO::ATTR_SERVER_VERSION), '9.0.0') < 0) { + die("skip Requires 9.0+"); +} + +?> +--FILE-- +<?php +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); +$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +// pgsqlGetPid should return something meaningful +$pid = $db->pgsqlGetPid(); +var_dump($pid > 0); + +// No listen, no notifies +var_dump($db->pgsqlGetNotify()); + +// Listen started, no notifies +$db->exec("LISTEN notifies_phpt"); +var_dump($db->pgsqlGetNotify()); + +// No parameters with payload, use default PDO::FETCH_NUM +$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM); +$db->exec("NOTIFY notifies_phpt, 'payload'"); +$notify = $db->pgsqlGetNotify(); +var_dump(count($notify)); +var_dump($notify[0]); +var_dump($notify[1] == $pid); +var_dump($notify[2]); + +// No parameters with payload, use default PDO::FETCH_ASSOC +$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); +$db->exec("NOTIFY notifies_phpt, 'payload'"); +$notify = $db->pgsqlGetNotify(); +var_dump(count($notify)); +var_dump($notify['message']); +var_dump($notify['pid'] == $pid); +var_dump($notify['payload']); + +// Test PDO::FETCH_NUM as parameter with payload +$db->exec("NOTIFY notifies_phpt, 'payload'"); +$notify = $db->pgsqlGetNotify(PDO::FETCH_NUM); +var_dump(count($notify)); +var_dump($notify[0]); +var_dump($notify[1] == $pid); +var_dump($notify[2]); + +// Test PDO::FETCH_ASSOC as parameter with payload +$db->exec("NOTIFY notifies_phpt, 'payload'"); +$notify = $db->pgsqlGetNotify(PDO::FETCH_ASSOC); +var_dump(count($notify)); +var_dump($notify['message']); +var_dump($notify['pid'] == $pid); +var_dump($notify['payload']); + +// Test PDO::FETCH_BOTH as parameter with payload +$db->exec("NOTIFY notifies_phpt, 'payload'"); +$notify = $db->pgsqlGetNotify(PDO::FETCH_BOTH); +var_dump(count($notify)); +var_dump($notify['message']); +var_dump($notify['pid'] == $pid); +var_dump($notify['payload']); +var_dump($notify[0]); +var_dump($notify[1] == $pid); +var_dump($notify[2]); + +// Verify that there are no notifies queued +var_dump($db->pgsqlGetNotify()); + +?> +--EXPECT-- +bool(true) +bool(false) +bool(false) +int(3) +string(13) "notifies_phpt" +bool(true) +string(7) "payload" +int(3) +string(13) "notifies_phpt" +bool(true) +string(7) "payload" +int(3) +string(13) "notifies_phpt" +bool(true) +string(7) "payload" +int(3) +string(13) "notifies_phpt" +bool(true) +string(7) "payload" +int(6) +string(13) "notifies_phpt" +bool(true) +string(7) "payload" +string(13) "notifies_phpt" +bool(true) +string(7) "payload" +bool(false) |