/** * Tests that queries are logged when executed with bound params * * @return void */ public function testExecuteWithBinding() { $inner = $this->getMock('PDOStatement'); $inner->expects($this->any())->method('rowCount')->will($this->returnValue(4)); $logger = $this->getMock('\\Cake\\Database\\Log\\QueryLogger'); $logger->expects($this->at(0))->method('log')->with($this->logicalAnd($this->isInstanceOf('\\Cake\\Database\\Log\\LoggedQuery'), $this->attributeEqualTo('query', 'SELECT bar FROM foo'), $this->attributeEqualTo('took', 5, 5), $this->attributeEqualTo('numRows', 4), $this->attributeEqualTo('params', ['a' => 1, 'b' => '2013-01-01']))); $logger->expects($this->at(1))->method('log')->with($this->logicalAnd($this->isInstanceOf('\\Cake\\Database\\Log\\LoggedQuery'), $this->attributeEqualTo('query', 'SELECT bar FROM foo'), $this->attributeEqualTo('took', 5, 5), $this->attributeEqualTo('numRows', 4), $this->attributeEqualTo('params', ['a' => 1, 'b' => '2014-01-01']))); $date = new \DateTime('2013-01-01'); $inner->expects($this->at(0))->method('bindValue')->with('a', 1); $inner->expects($this->at(1))->method('bindValue')->with('b', $date); $driver = $this->getMock('\\Cake\\Database\\Driver'); $st = new LoggingStatement($inner, $driver); $st->queryString = 'SELECT bar FROM foo'; $st->logger($logger); $st->bindValue('a', 1); $st->bindValue('b', $date, 'date'); $st->execute(); $st->bindValue('b', new \DateTime('2014-01-01'), 'date'); $st->execute(); }
/** * Returns a new statement object that will log the activity * for the passed original statement instance. * * @param \Cake\Database\StatementInterface $statement the instance to be decorated * @return \Cake\Database\Log\LoggingStatement */ protected function _newLogger(StatementInterface $statement) { $log = new LoggingStatement($statement, $this->driver()); $log->logger($this->logger()); return $log; }
/** * Tests that queries are logged despite database errors * * @expectedException \LogicException * @expectedExceptionMessage This is bad * @return void */ public function testExecuteWithError() { $exception = new \LogicException('This is bad'); $inner = $this->getMockBuilder('PDOStatement')->getMock(); $inner->expects($this->once())->method('execute')->will($this->throwException($exception)); $logger = $this->getMockBuilder('\\Cake\\Database\\Log\\QueryLogger')->getMock(); $logger->expects($this->once())->method('log')->with($this->logicalAnd($this->isInstanceOf('\\Cake\\Database\\Log\\LoggedQuery'), $this->attributeEqualTo('query', 'SELECT bar FROM foo'), $this->attributeEqualTo('took', 5, 200), $this->attributeEqualTo('params', []), $this->attributeEqualTo('error', $exception))); $st = new LoggingStatement($inner); $st->queryString = 'SELECT bar FROM foo'; $st->logger($logger); $st->execute(); }