Browse Source

Fixes #13890: DbTarget log transaction bug

tags/2.0.12
Andrey Akimov 7 years ago committed by Alexander Makarov
parent
commit
5695b869a9
  1. 1
      framework/CHANGELOG.md
  2. 6
      framework/log/DbTarget.php
  3. 25
      tests/framework/log/DbTargetTest.php

1
framework/CHANGELOG.md

@ -44,6 +44,7 @@ Yii Framework 2 Change Log
- Bug #13790: Fixed error in `\yii\widgets\MaskedInput` JavaScript by raising version required (samdark)
- Bug #13807: Fixed `yii\db\QueryBuilder` to inherit subquery params when building a `INSERT INTO ... SELECT` query (sergeymakinen)
- Bug #13848: `yii\di\Instance::ensure()` wasn't throwing an exception when `$type` is specified and `$reference` object isn't instance of `$type` (c-jonua)
- Bug #13890: DbTarget log transaction bug (shirase)
- Bug #13901: Fixed passing unused parameter to `formatMessage()` call in `\yii\validators\IpValidator` (Kolyunya)
- Bug #13961: Fixed `unserialize()` error during RBAC rule retrieving from PostgreSQL DBMS (vsguts)
- Bug #14012: `yii\db\pgsql\Schema::findViewNames()` was skipping materialized views (insolita)

6
framework/log/DbTarget.php

@ -60,6 +60,12 @@ class DbTarget extends Target
*/
public function export()
{
if ($this->db->getTransaction()) {
$this->db = clone $this->db;
$this->db->pdo = null;
$this->db->open();
}
$tableName = $this->db->quoteTableName($this->logTable);
$sql = "INSERT INTO $tableName ([[level]], [[category]], [[log_time]], [[prefix]], [[message]])
VALUES (:level, :category, :log_time, :prefix, :message)";

25
tests/framework/log/DbTargetTest.php

@ -140,4 +140,29 @@ abstract class DbTargetTest extends TestCase
$loggedTime = $query->createCommand(self::getConnection())->queryScalar();
static::assertEquals($time, $loggedTime);
}
public function testTransactionRollBack()
{
$db = self::getConnection();
$logger = Yii::getLogger();
$tx = $db->beginTransaction();
$messsageData = [
'test',
Logger::LEVEL_WARNING,
'test',
time(),
[]
];
$logger->messages[] = $messsageData;
$logger->flush(true);
$tx->rollBack();
$query = (new Query())->select('COUNT(*)')->from(self::$logTable)->where(['category' => 'test', 'message' => 'test']);
$count = $query->createCommand($db)->queryScalar();
static::assertEquals(1, $count);
}
}
Loading…
Cancel
Save