Browse Source

Merge pull request #480 from cviebrock/schema-rename

Schema::rename('oldtable','newtable') support
Taylor Otwell 12 years ago
parent
commit
38234c61dd

+ 19 - 0
laravel/database/schema.php

@@ -40,6 +40,25 @@ class Schema {
 		return static::execute($table);
 	}
 
+	/**
+	 * Rename a database table in the schema.
+	 *
+	 * @param  string  $table
+	 * @param  string  $name
+	 * @return void
+	 */
+	public static function rename($table, $new_name)
+	{
+		$table = new Schema\Table($table);
+
+		// To indicate that the table needs to be renamed, we will run the
+		// "rename" command on the table instance and pass the instance to
+		// the execute method as calling a Closure isn't needed.
+		$table->rename($new_name);
+
+		return static::execute($table);
+	}
+
 	/**
 	 * Drop a database table from the schema.
 	 *

+ 12 - 0
laravel/database/schema/grammars/mysql.php

@@ -212,6 +212,18 @@ class MySQL extends Grammar {
 		return 'ALTER TABLE '.$this->wrap($table)." ADD {$type} {$name}({$keys})";
 	}
 
+	/**
+	 * Generate the SQL statement for a rename table command.
+	 *
+	 * @param  Table    $table
+	 * @param  Fluent   $command
+	 * @return string
+	 */
+	public function rename(Table $table, Fluent $command)
+	{
+		return 'RENAME TABLE '.$this->wrap($table).' TO '.$this->wrap($command->name);
+	}
+
 	/**
 	 * Generate the SQL statement for a drop table command.
 	 *

+ 13 - 1
laravel/database/schema/grammars/postgres.php

@@ -198,6 +198,18 @@ class Postgres extends Grammar {
 		return $create." INDEX {$command->name} ON ".$this->wrap($table)." ({$columns})";
 	}
 
+	/**
+	 * Generate the SQL statement for a rename table command.
+	 *
+	 * @param  Table    $table
+	 * @param  Fluent   $command
+	 * @return string
+	 */
+	public function rename(Table $table, Fluent $command)
+	{
+		return 'ALTER TABLE '.$this->wrap($table).' RENAME TO '.$this->wrap($command->name);
+	}
+
 	/**
 	 * Generate the SQL statement for a drop table command.
 	 *
@@ -302,7 +314,7 @@ class Postgres extends Grammar {
 	 */
 	public function drop_foreign(Table $table, Fluent $command)
 	{
-		return $this->drop_constraint($table, $command);		
+		return $this->drop_constraint($table, $command);
 	}
 
 	/**

+ 12 - 0
laravel/database/schema/grammars/sqlite.php

@@ -201,6 +201,18 @@ class SQLite extends Grammar {
 		return $create." INDEX {$command->name} ON ".$this->wrap($table)." ({$columns})";
 	}
 
+	/**
+	 * Generate the SQL statement for a rename table command.
+	 *
+	 * @param  Table    $table
+	 * @param  Fluent   $command
+	 * @return string
+	 */
+	public function rename(Table $table, Fluent $command)
+	{
+		return 'ALTER TABLE '.$this->wrap($table).' RENAME TO '.$this->wrap($command->name);
+	}
+
 	/**
 	 * Generate the SQL statement for a drop table command.
 	 *

+ 13 - 1
laravel/database/schema/grammars/sqlserver.php

@@ -212,6 +212,18 @@ class SQLServer extends Grammar {
 		return $create." INDEX {$command->name} ON ".$this->wrap($table)." ({$columns})";
 	}
 
+	/**
+	 * Generate the SQL statement for a rename table command.
+	 *
+	 * @param  Table    $table
+	 * @param  Fluent   $command
+	 * @return string
+	 */
+	public function rename(Table $table, Fluent $command)
+	{
+		return 'ALTER TABLE '.$this->wrap($table).' RENAME TO '.$this->wrap($command->name);
+	}
+
 	/**
 	 * Generate the SQL statement for a drop table command.
 	 *
@@ -320,7 +332,7 @@ class SQLServer extends Grammar {
 	 */
 	public function drop_foreign(Table $table, Fluent $command)
 	{
-		return $this->drop_constraint($table, $command);		
+		return $this->drop_constraint($table, $command);
 	}
 
 	/**

+ 11 - 0
laravel/database/schema/table.php

@@ -144,6 +144,17 @@ class Table {
 		return $this->command($type, compact('name', 'columns'));
 	}
 
+	/**
+	 * Rename the database table.
+	 *
+	 * @param  string  $name
+	 * @return Fluent
+	 */
+	public function rename($name)
+	{
+		return $this->command(__FUNCTION__, compact('name'));
+	}
+
 	/**
 	 * Drop the database table.
 	 *