getnotify.phpt 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. --TEST--
  2. PDO PgSQL LISTEN/NOTIFY support
  3. --EXTENSIONS--
  4. pdo
  5. pdo_pgsql
  6. --SKIPIF--
  7. <?php
  8. require __DIR__ . '/config.inc';
  9. require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
  10. PDOTest::skip();
  11. ?>
  12. --FILE--
  13. <?php
  14. require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
  15. $db = PDOTest::test_factory(__DIR__ . '/common.phpt');
  16. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  17. // pgsqlGetPid should return something meaningful
  18. $pid = $db->pgsqlGetPid();
  19. var_dump($pid > 0);
  20. // No listen, no notifies
  21. var_dump($db->pgsqlGetNotify());
  22. // Listen started, no notifies
  23. $db->exec("LISTEN notifies_phpt");
  24. var_dump($db->pgsqlGetNotify());
  25. // No parameters, use default PDO::FETCH_NUM
  26. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
  27. $db->exec("NOTIFY notifies_phpt");
  28. $notify = $db->pgsqlGetNotify();
  29. var_dump(count($notify));
  30. var_dump($notify[0]);
  31. var_dump($notify[1] == $pid);
  32. // No parameters, use default PDO::FETCH_ASSOC
  33. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  34. $db->exec("NOTIFY notifies_phpt");
  35. $notify = $db->pgsqlGetNotify();
  36. var_dump(count($notify));
  37. var_dump($notify['message']);
  38. var_dump($notify['pid'] == $pid);
  39. // Test PDO::FETCH_NUM as parameter
  40. $db->exec("NOTIFY notifies_phpt");
  41. $notify = $db->pgsqlGetNotify(PDO::FETCH_NUM);
  42. var_dump(count($notify));
  43. var_dump($notify[0]);
  44. var_dump($notify[1] == $pid);
  45. // Test PDO::FETCH_ASSOC as parameter
  46. $db->exec("NOTIFY notifies_phpt");
  47. $notify = $db->pgsqlGetNotify(PDO::FETCH_ASSOC);
  48. var_dump(count($notify));
  49. var_dump($notify['message']);
  50. var_dump($notify['pid'] == $pid);
  51. // Test PDO::FETCH_BOTH as parameter
  52. $db->exec("NOTIFY notifies_phpt");
  53. $notify = $db->pgsqlGetNotify(PDO::FETCH_BOTH);
  54. var_dump(count($notify));
  55. var_dump($notify['message']);
  56. var_dump($notify['pid'] == $pid);
  57. var_dump($notify[0]);
  58. var_dump($notify[1] == $pid);
  59. // Verify that there are no notifies queued
  60. var_dump($db->pgsqlGetNotify());
  61. // Test second parameter, should wait 2 seconds because no notify is queued
  62. $t = microtime(1);
  63. $notify = $db->pgsqlGetNotify(PDO::FETCH_ASSOC, 1000);
  64. $diff = microtime(1) - $t;
  65. var_dump($diff >= 1 || 1 - abs($diff) < .05);
  66. var_dump($notify);
  67. // Test second parameter, should return immediately because a notify is queued
  68. $db->exec("NOTIFY notifies_phpt");
  69. $t = microtime(1);
  70. $notify = $db->pgsqlGetNotify(PDO::FETCH_ASSOC, 5000);
  71. $diff = microtime(1) - $t;
  72. var_dump($diff < 1 || abs(1 - abs($diff)) < .05);
  73. var_dump(count($notify));
  74. ?>
  75. --EXPECT--
  76. bool(true)
  77. bool(false)
  78. bool(false)
  79. int(2)
  80. string(13) "notifies_phpt"
  81. bool(true)
  82. int(2)
  83. string(13) "notifies_phpt"
  84. bool(true)
  85. int(2)
  86. string(13) "notifies_phpt"
  87. bool(true)
  88. int(2)
  89. string(13) "notifies_phpt"
  90. bool(true)
  91. int(4)
  92. string(13) "notifies_phpt"
  93. bool(true)
  94. string(13) "notifies_phpt"
  95. bool(true)
  96. bool(false)
  97. bool(true)
  98. bool(false)
  99. bool(true)
  100. int(2)