From c27badbfffd6d756ad5eb43bfecb6bc072ea288c Mon Sep 17 00:00:00 2001 From: vlakoff Date: Sat, 5 Nov 2016 10:32:14 +0100 Subject: [PATCH] Fix wrapping and escaping in SQL Server dropIfExists() * Support table prefix * Escape single quotes --- .../Schema/Grammars/SqlServerGrammar.php | 4 ++- .../DatabaseSqlServerSchemaGrammarTest.php | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index 8976944baeb6..d2e9d9282033 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -149,7 +149,9 @@ public function compileDrop(Blueprint $blueprint, Fluent $command) */ public function compileDropIfExists(Blueprint $blueprint, Fluent $command) { - return 'if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = \''.$blueprint->getTable().'\') drop table ['.$blueprint->getTable().']'; + $table = "'".str_replace("'", "''", $this->getTablePrefix().$blueprint->getTable())."'"; + + return 'if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = '.$table.') drop table '.$this->wrapTable($blueprint); } /** diff --git a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php index 33f559205542..f6e9732fefbe 100755 --- a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php +++ b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php @@ -28,6 +28,15 @@ public function testBasicCreateTable() $this->assertEquals(1, count($statements)); $this->assertEquals('alter table "users" add "id" int identity primary key not null, "email" nvarchar(255) not null', $statements[0]); + + $blueprint = new Blueprint('users'); + $blueprint->create(); + $blueprint->increments('id'); + $blueprint->string('email'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()->setTablePrefix('prefix_')); + + $this->assertEquals(1, count($statements)); + $this->assertEquals('create table "prefix_users" ("id" int identity primary key not null, "email" nvarchar(255) not null)', $statements[0]); } public function testDropTable() @@ -38,6 +47,30 @@ public function testDropTable() $this->assertEquals(1, count($statements)); $this->assertEquals('drop table "users"', $statements[0]); + + $blueprint = new Blueprint('users'); + $blueprint->drop(); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()->setTablePrefix('prefix_')); + + $this->assertEquals(1, count($statements)); + $this->assertEquals('drop table "prefix_users"', $statements[0]); + } + + public function testDropTableIfExists() + { + $blueprint = new Blueprint('users'); + $blueprint->dropIfExists(); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + + $this->assertEquals(1, count($statements)); + $this->assertEquals('if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = \'users\') drop table "users"', $statements[0]); + + $blueprint = new Blueprint('users'); + $blueprint->dropIfExists(); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()->setTablePrefix('prefix_')); + + $this->assertEquals(1, count($statements)); + $this->assertEquals('if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = \'prefix_users\') drop table "prefix_users"', $statements[0]); } public function testDropColumn()