From 485763d4f7a299a81bf20b8b0ff430faf9a711ec Mon Sep 17 00:00:00 2001 From: Ionut Codreanu Date: Wed, 20 Sep 2023 18:57:17 +0300 Subject: [PATCH 1/3] Use local variable instead of instance variable for storing select statement when in prepare mode Signed-off-by: Ionut Codreanu --- src/Adapter/Adapter.php | 13 +++-- .../Pdo/Mysql/TableGatewayAndAdapterTest.php | 47 +++++++++++++++++++ 2 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 test/integration/Adapter/Driver/Pdo/Mysql/TableGatewayAndAdapterTest.php diff --git a/src/Adapter/Adapter.php b/src/Adapter/Adapter.php index c08a5f95..4f268bf6 100644 --- a/src/Adapter/Adapter.php +++ b/src/Adapter/Adapter.php @@ -177,18 +177,17 @@ public function query( } if ($mode === self::QUERY_MODE_PREPARE) { - $this->lastPreparedStatement = null; - $this->lastPreparedStatement = $this->driver->createStatement($sql); - $this->lastPreparedStatement->prepare(); + $lastPreparedStatement = $this->driver->createStatement($sql); + $lastPreparedStatement->prepare(); if (is_array($parameters) || $parameters instanceof ParameterContainer) { if (is_array($parameters)) { - $this->lastPreparedStatement->setParameterContainer(new ParameterContainer($parameters)); + $lastPreparedStatement->setParameterContainer(new ParameterContainer($parameters)); } else { - $this->lastPreparedStatement->setParameterContainer($parameters); + $lastPreparedStatement->setParameterContainer($parameters); } - $result = $this->lastPreparedStatement->execute(); + $result = $lastPreparedStatement->execute(); } else { - return $this->lastPreparedStatement; + return $lastPreparedStatement; } } else { $result = $this->driver->getConnection()->execute($sql); diff --git a/test/integration/Adapter/Driver/Pdo/Mysql/TableGatewayAndAdapterTest.php b/test/integration/Adapter/Driver/Pdo/Mysql/TableGatewayAndAdapterTest.php new file mode 100644 index 00000000..67e34969 --- /dev/null +++ b/test/integration/Adapter/Driver/Pdo/Mysql/TableGatewayAndAdapterTest.php @@ -0,0 +1,47 @@ +adapter->query('SELECT VERSION();'); + $table = new TableGateway( + 'test', + $this->adapter + ); + $select = $table->getSql()->select()->where(['name' => 'foo']); + $result = $table->selectWith($select); + self::assertCount(3, $result->current()); + } + + protected function tearDown(): void + { + if ($this->adapter->getDriver()->getConnection()->isConnected()) { + $this->adapter->getDriver()->getConnection()->disconnect(); + } + $this->adapter = null; + } + + public function connections(): array + { + return array_fill(0, 200, []); + } +} From dbe163d9e0382a803b0df872ec5498b362fe2856 Mon Sep 17 00:00:00 2001 From: Ionut Codreanu Date: Wed, 20 Sep 2023 23:25:42 +0300 Subject: [PATCH 2/3] remove $lastPreparedStatement member variable from \Laminas\Db\Adapter\Adapter Signed-off-by: Ionut Codreanu --- src/Adapter/Adapter.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Adapter/Adapter.php b/src/Adapter/Adapter.php index 4f268bf6..8bf14244 100644 --- a/src/Adapter/Adapter.php +++ b/src/Adapter/Adapter.php @@ -49,8 +49,6 @@ class Adapter implements AdapterInterface, Profiler\ProfilerAwareInterface /** @var ResultSet\ResultSetInterface */ protected $queryResultSetPrototype; - /** @var Driver\StatementInterface */ - protected $lastPreparedStatement; /** * @param Driver\DriverInterface|array $driver From e725a607ca66748f99f27db4a95e9872afdb76fc Mon Sep 17 00:00:00 2001 From: Ionut Codreanu Date: Thu, 21 Sep 2023 10:10:10 +0300 Subject: [PATCH 3/3] add back $lastPreparedStatement on \Laminas\Db\Adapter\Adapter and mark it as deprecated Signed-off-by: Ionut Codreanu --- src/Adapter/Adapter.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Adapter/Adapter.php b/src/Adapter/Adapter.php index 8bf14244..81db9a4a 100644 --- a/src/Adapter/Adapter.php +++ b/src/Adapter/Adapter.php @@ -49,7 +49,12 @@ class Adapter implements AdapterInterface, Profiler\ProfilerAwareInterface /** @var ResultSet\ResultSetInterface */ protected $queryResultSetPrototype; - + /** + * @deprecated + * + * @var Driver\StatementInterface + */ + protected $lastPreparedStatement; /** * @param Driver\DriverInterface|array $driver * @throws Exception\InvalidArgumentException