mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	Fixes #14072: Fixed a bug where \yii\db\Command::createTable(), addForeignKey(), dropForeignKey(), addCommentOnColumn(), and dropCommentFromColumn() weren't refreshing the table cache on yii\db\Schema
				
					
				
			This commit is contained in:
		@ -87,6 +87,7 @@ Yii Framework 2 Change Log
 | 
				
			|||||||
- Enh #13994: Refactored `yii\filters\RateLimiter`. Added tests (vladis84)
 | 
					- Enh #13994: Refactored `yii\filters\RateLimiter`. Added tests (vladis84)
 | 
				
			||||||
- Enh #14059: Removed unused AR instantiating for calling of static methods (ElisDN)
 | 
					- Enh #14059: Removed unused AR instantiating for calling of static methods (ElisDN)
 | 
				
			||||||
- Enh: Added `yii\di\Instance::__set_state()` method to restore object after serialization using `var_export()` function (silvefire)
 | 
					- Enh: Added `yii\di\Instance::__set_state()` method to restore object after serialization using `var_export()` function (silvefire)
 | 
				
			||||||
 | 
					- 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) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Bug #10305: Oracle SQL queries with `IN` condition and more than 1000 parameters are working now (silverfire)
 | 
					- Bug #10305: Oracle SQL queries with `IN` condition and more than 1000 parameters are working now (silverfire)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -537,7 +537,7 @@ class Command extends Component
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $sql = $this->db->getQueryBuilder()->createTable($table, $columns, $options);
 | 
					        $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);
 | 
					        $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);
 | 
					        $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);
 | 
					        $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);
 | 
					        $sql = $this->db->getQueryBuilder()->dropCommentFromColumn($table, $column);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->setSql($sql);
 | 
					        return $this->setSql($sql)->requireTableSchemaRefresh($table);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -809,17 +809,36 @@ SQL;
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $db = $this->getConnection(false);
 | 
					        $db = $this->getConnection(false);
 | 
				
			||||||
        $tableName = 'test';
 | 
					        $tableName = 'test';
 | 
				
			||||||
 | 
					        $fkName = 'test_fk';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertNull($db->getSchema()->getTableSchema($tableName));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $db->createCommand()->createTable($tableName, [
 | 
					        $db->createCommand()->createTable($tableName, [
 | 
				
			||||||
            'id' => 'pk',
 | 
					            'id' => 'pk',
 | 
				
			||||||
 | 
					            'fk' => 'int',
 | 
				
			||||||
            'name' => 'string',
 | 
					            'name' => 'string',
 | 
				
			||||||
        ])->execute();
 | 
					        ])->execute();
 | 
				
			||||||
        $initialSchema = $db->getSchema()->getTableSchema($tableName);
 | 
					        $initialSchema = $db->getSchema()->getTableSchema($tableName);
 | 
				
			||||||
 | 
					        $this->assertNotNull($initialSchema);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $db->createCommand()->addColumn($tableName, 'value', 'integer')->execute();
 | 
					        $db->createCommand()->addColumn($tableName, 'value', 'integer')->execute();
 | 
				
			||||||
        $newSchema = $db->getSchema()->getTableSchema($tableName);
 | 
					        $newSchema = $db->getSchema()->getTableSchema($tableName);
 | 
				
			||||||
        $this->assertNotEquals($initialSchema, $newSchema);
 | 
					        $this->assertNotEquals($initialSchema, $newSchema);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->driverName !== 'sqlite') {
 | 
				
			||||||
 | 
					            $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();
 | 
					        $db->createCommand()->dropTable($tableName)->execute();
 | 
				
			||||||
        $this->assertNull($db->getSchema()->getTableSchema($tableName));
 | 
					        $this->assertNull($db->getSchema()->getTableSchema($tableName));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user