bug75402.phpt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. --TEST--
  2. PDO PgSQL Bug #75402 Possible Memory Leak using PDO::CURSOR_SCROLL option
  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. $resp = new \stdClass();
  17. $resp->entries = [];
  18. $db->query('DROP TABLE IF EXISTS bug75402 CASCADE');
  19. $db->query('CREATE TABLE bug75402 (
  20. "id" character varying(64) NOT NULL,
  21. "group_id" character varying(64) NOT NULL,
  22. "submitter" character varying(320) NOT NULL,
  23. "operation" character varying(32) NOT NULL,
  24. "description" character varying(320) NOT NULL,
  25. "stage" character varying(16) NOT NULL,
  26. "status" character varying(64) NOT NULL,
  27. "progress" integer NOT NULL,
  28. "insert_datetime" timestamp(3) NOT NULL,
  29. "begin_datetime" timestamp(3),
  30. "end_datetime" timestamp(3),
  31. "life_hours" integer NOT NULL,
  32. "family" character varying(32) NOT NULL,
  33. "parallelism_group" character varying(32) NOT NULL,
  34. "max_parallelism" integer NOT NULL,
  35. "hidden" boolean NOT NULL,
  36. "abort" boolean NOT NULL,
  37. "order_folder_pathname" character varying(320),
  38. "worker" character varying(32) NOT NULL,
  39. CONSTRAINT "pk_bug75402" PRIMARY KEY ("id")
  40. ) WITH (oids = false);');
  41. $db->query("INSERT INTO bug75402 (\"id\", \"group_id\", \"submitter\", \"operation\", \"description\", \"stage\", \"status\", \"progress\", \"insert_datetime\", \"begin_datetime\", \"end_datetime\", \"life_hours\", \"family\", \"parallelism_group\", \"max_parallelism\", \"hidden\", \"abort\", \"order_folder_pathname\", \"worker\") VALUES
  42. ('20171016083645_5337', 'G_20171016083645_5337', 'TESTPetunia', 'IMPORT', '', 'DON', 'Completed', 100, '2017-10-16 08:36:45', '2017-10-16 08:36:46', '2017-10-16 08:36:46', 96, 'IMPORT', '', -1, 'f', 'f', 'C:\ProgramData\TestPath\TestApp\Jobs\Jobs\\20171016083645_5337', 'MainService')");
  43. $sql = "SELECT
  44. ID as \"sID\",
  45. GROUP_ID as \"sGroupID\",
  46. SUBMITTER as \"sOwner\",
  47. OPERATION as \"sOperation\",
  48. DESCRIPTION as \"sInfo\",
  49. STAGE as \"sShortStatus\",
  50. STATUS as \"sStatus\",
  51. PROGRESS as \"sProgress\",
  52. HIDDEN as \"bHidden\",
  53. to_char(INSERT_DATETIME, 'IYYY.MM.DD HH24:MI:SS') as \"sDatetime\"
  54. FROM bug75402
  55. ORDER BY INSERT_DATETIME DESC";
  56. if ($db) {
  57. $stmt = $db->prepare($sql,
  58. array(
  59. // With the following options memory is not being
  60. // deallocated
  61. \PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL
  62. // With the following option memory is de-allocated
  63. // \PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY
  64. )
  65. );
  66. $stmt->execute();
  67. while ($entry = $stmt->fetchObject()) {
  68. $resp->entries [] = $entry;
  69. }
  70. $stmt->closeCursor();
  71. $stmt = null;
  72. $db = null;
  73. }
  74. var_dump($resp);
  75. ?>
  76. --EXPECT--
  77. object(stdClass)#2 (1) {
  78. ["entries"]=>
  79. array(1) {
  80. [0]=>
  81. object(stdClass)#4 (10) {
  82. ["sid"]=>
  83. string(19) "20171016083645_5337"
  84. ["sgroupid"]=>
  85. string(21) "G_20171016083645_5337"
  86. ["sowner"]=>
  87. string(11) "TESTPetunia"
  88. ["soperation"]=>
  89. string(6) "IMPORT"
  90. ["sinfo"]=>
  91. string(0) ""
  92. ["sshortstatus"]=>
  93. string(3) "DON"
  94. ["sstatus"]=>
  95. string(9) "Completed"
  96. ["sprogress"]=>
  97. string(3) "100"
  98. ["bhidden"]=>
  99. string(1) "0"
  100. ["sdatetime"]=>
  101. string(19) "2017.10.16 08:36:45"
  102. }
  103. }
  104. }