Browse Source

Fixes #14072: clear table schema cache for all methods that affect cache

tags/2.0.12
brandonkelly 8 years ago
parent
commit
e242e9b0ee
  1. 1
      framework/CHANGELOG.md
  2. 10
      framework/db/Command.php
  3. 17
      tests/framework/db/CommandTest.php

1
framework/CHANGELOG.md

@ -74,6 +74,7 @@ Yii Framework 2 Change Log
- Enh #13976: Disabled IPv6 check on `\yii\validators\IpValidator` as it turns out it is not needed for inet_* methods to work (mikk150)
- Enh #13981: `yii\caching\Cache::getOrSet()` now supports both `Closure` and `callable` (silverfire)
- Enh #13911: Significantly enhanced MSSQL schema reading performance (paulzi, WebdevMerlion)
- Bug #14072: Fixed a bug where `\yii\db\Command::createTable()`, `addForeignKey()`, `dropForeignKey()`, `addCommentOnColumn()`, and `dropCommentFromColumn()` weren't refreshing the table cache on `yii\db\Schema` (brandonkelly)
2.0.11.2 February 08, 2017
--------------------------

10
framework/db/Command.php

@ -537,7 +537,7 @@ class Command extends Component
{
$sql = $this->db->getQueryBuilder()->createTable($table, $columns, $options);
return $this->setSql($sql);
return $this->setSql($sql)->requireTableSchemaRefresh($table);
}
/**
@ -680,7 +680,7 @@ class Command extends Component
{
$sql = $this->db->getQueryBuilder()->addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete, $update);
return $this->setSql($sql);
return $this->setSql($sql)->requireTableSchemaRefresh($table);
}
/**
@ -693,7 +693,7 @@ class Command extends Component
{
$sql = $this->db->getQueryBuilder()->dropForeignKey($name, $table);
return $this->setSql($sql);
return $this->setSql($sql)->requireTableSchemaRefresh($table);
}
/**
@ -771,7 +771,7 @@ class Command extends Component
{
$sql = $this->db->getQueryBuilder()->addCommentOnColumn($table, $column, $comment);
return $this->setSql($sql);
return $this->setSql($sql)->requireTableSchemaRefresh($table);
}
/**
@ -801,7 +801,7 @@ class Command extends Component
{
$sql = $this->db->getQueryBuilder()->dropCommentFromColumn($table, $column);
return $this->setSql($sql);
return $this->setSql($sql)->requireTableSchemaRefresh($table);
}
/**

17
tests/framework/db/CommandTest.php

@ -809,17 +809,34 @@ SQL;
{
$db = $this->getConnection(false);
$tableName = 'test';
$fkName = 'test_fk';
$this->assertNull($db->getSchema()->getTableSchema($tableName));
$db->createCommand()->createTable($tableName, [
'id' => 'pk',
'fk' => 'int',
'name' => 'string',
])->execute();
$initialSchema = $db->getSchema()->getTableSchema($tableName);
$this->assertNotNull($initialSchema);
$db->createCommand()->addColumn($tableName, 'value', 'integer')->execute();
$newSchema = $db->getSchema()->getTableSchema($tableName);
$this->assertNotEquals($initialSchema, $newSchema);
$db->createCommand()->addForeignKey($fkName, $tableName, 'fk', $tableName, 'id')->execute();
$this->assertNotEmpty($db->getSchema()->getTableSchema($tableName)->foreignKeys);
$db->createCommand()->dropForeignKey($fkName, $tableName)->execute();
$this->assertEmpty($db->getSchema()->getTableSchema($tableName)->foreignKeys);
$db->createCommand()->addCommentOnColumn($tableName, 'id', 'Test comment')->execute();
$this->assertNotEmpty($db->getSchema()->getTableSchema($tableName)->getColumn('id')->comment);
$db->createCommand()->dropCommentFromColumn($tableName, 'id')->execute();
$this->assertEmpty($db->getSchema()->getTableSchema($tableName)->getColumn('id')->comment);
$db->createCommand()->dropTable($tableName)->execute();
$this->assertNull($db->getSchema()->getTableSchema($tableName));
}

Loading…
Cancel
Save