Skip to content

Commit 3f0fd62

Browse files
stlrnzMajkl578
authored andcommitted
Improve handling of schemas in SQL Server >= 2008
1 parent 684122c commit 3f0fd62

File tree

5 files changed

+181
-37
lines changed

5 files changed

+181
-37
lines changed

lib/Doctrine/DBAL/Platforms/SQLServer2008Platform.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@
2727
*/
2828
class SQLServer2008Platform extends SQLServer2005Platform
2929
{
30+
/**
31+
* {@inheritDoc}
32+
*/
33+
public function getListTablesSQL()
34+
{
35+
// "sysdiagrams" table must be ignored as it's internal SQL Server table for Database Diagrams
36+
// Category 2 must be ignored as it is "MS SQL Server 'pseudo-system' object[s]" for replication
37+
return "SELECT name, SCHEMA_NAME (uid) AS schema_name FROM sysobjects WHERE type = 'U' AND name != 'sysdiagrams' AND category != 2 ORDER BY name";
38+
}
39+
3040
/**
3141
* {@inheritDoc}
3242
*/

lib/Doctrine/DBAL/Platforms/SQLServerPlatform.php

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@
2828
use Doctrine\DBAL\Schema\Table;
2929
use Doctrine\DBAL\Schema\TableDiff;
3030
use Doctrine\DBAL\Types;
31+
use function explode;
3132
use function implode;
3233
use function sprintf;
34+
use function strpos;
3335

3436
/**
3537
* The SQLServerPlatform provides the behavior, features and SQL dialect of the
@@ -330,13 +332,22 @@ public function getCreatePrimaryKeySQL(Index $index, $table)
330332
*/
331333
protected function getCreateColumnCommentSQL($tableName, $columnName, $comment)
332334
{
335+
if (strpos($tableName, '.') !== false) {
336+
[$schemaSQL, $tableSQL] = explode('.', $tableName);
337+
$schemaSQL = $this->quoteStringLiteral($schemaSQL);
338+
$tableSQL = $this->quoteStringLiteral($tableSQL);
339+
} else {
340+
$schemaSQL = "'dbo'";
341+
$tableSQL = $this->quoteStringLiteral($tableName);
342+
}
343+
333344
return $this->getAddExtendedPropertySQL(
334345
'MS_Description',
335346
$comment,
336347
'SCHEMA',
337-
'dbo',
348+
$schemaSQL,
338349
'TABLE',
339-
$tableName,
350+
$tableSQL,
340351
'COLUMN',
341352
$columnName
342353
);
@@ -678,13 +689,22 @@ private function alterColumnRequiresDropDefaultConstraint(ColumnDiff $columnDiff
678689
*/
679690
protected function getAlterColumnCommentSQL($tableName, $columnName, $comment)
680691
{
692+
if (strpos($tableName, '.') !== false) {
693+
[$schemaSQL, $tableSQL] = explode('.', $tableName);
694+
$schemaSQL = $this->quoteStringLiteral($schemaSQL);
695+
$tableSQL = $this->quoteStringLiteral($tableSQL);
696+
} else {
697+
$schemaSQL = "'dbo'";
698+
$tableSQL = $this->quoteStringLiteral($tableName);
699+
}
700+
681701
return $this->getUpdateExtendedPropertySQL(
682702
'MS_Description',
683703
$comment,
684704
'SCHEMA',
685-
'dbo',
705+
$schemaSQL,
686706
'TABLE',
687-
$tableName,
707+
$tableSQL,
688708
'COLUMN',
689709
$columnName
690710
);
@@ -708,12 +728,21 @@ protected function getAlterColumnCommentSQL($tableName, $columnName, $comment)
708728
*/
709729
protected function getDropColumnCommentSQL($tableName, $columnName)
710730
{
731+
if (strpos($tableName, '.') !== false) {
732+
[$schemaSQL, $tableSQL] = explode('.', $tableName);
733+
$schemaSQL = $this->quoteStringLiteral($schemaSQL);
734+
$tableSQL = $this->quoteStringLiteral($tableSQL);
735+
} else {
736+
$schemaSQL = "'dbo'";
737+
$tableSQL = $this->quoteStringLiteral($tableName);
738+
}
739+
711740
return $this->getDropExtendedPropertySQL(
712741
'MS_Description',
713742
'SCHEMA',
714-
'dbo',
743+
$schemaSQL,
715744
'TABLE',
716-
$tableName,
745+
$tableSQL,
717746
'COLUMN',
718747
$columnName
719748
);

lib/Doctrine/DBAL/Schema/SQLServerSchemaManager.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,10 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
198198
*/
199199
protected function _getPortableTableDefinition($table)
200200
{
201+
if (isset($table['schema_name']) && $table['schema_name'] !== 'dbo') {
202+
return $table['schema_name'] . '.' . $table['name'];
203+
}
204+
201205
return $table['name'];
202206
}
203207

tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
namespace Doctrine\Tests\DBAL\Functional\Schema;
44

55
use Doctrine\Common\EventManager;
6+
use Doctrine\DBAL\DBALException;
67
use Doctrine\DBAL\Events;
78
use Doctrine\DBAL\Platforms\OraclePlatform;
89
use Doctrine\DBAL\Schema\Column;
910
use Doctrine\DBAL\Schema\ColumnDiff;
1011
use Doctrine\DBAL\Schema\Comparator;
12+
use Doctrine\DBAL\Schema\SchemaDiff;
1113
use Doctrine\DBAL\Schema\Sequence;
1214
use Doctrine\DBAL\Schema\Table;
1315
use Doctrine\DBAL\Schema\TableDiff;
@@ -42,6 +44,23 @@ protected function setUp()
4244
$this->_sm = $this->_conn->getSchemaManager();
4345
}
4446

47+
48+
protected function tearDown()
49+
{
50+
parent::tearDown();
51+
52+
$this->_sm->tryMethod('dropTable', 'testschema.my_table_in_namespace');
53+
54+
//TODO: SchemaDiff does not drop removed namespaces?
55+
try {
56+
//sql server versions below 2016 do not support 'IF EXISTS' so we have to catch the exception here
57+
$this->_conn->exec('DROP SCHEMA testschema');
58+
} catch (DBALException $e) {
59+
return;
60+
}
61+
}
62+
63+
4564
/**
4665
* @group DBAL-1220
4766
*/
@@ -570,6 +589,31 @@ public function testAlterTableScenario()
570589
}
571590
}
572591

592+
593+
public function testTableInNamespace()
594+
{
595+
if (! $this->_sm->getDatabasePlatform()->supportsSchemas()) {
596+
$this->markTestSkipped('Schema definition is not supported by this platform.');
597+
}
598+
599+
//create schema
600+
$diff = new SchemaDiff();
601+
$diff->newNamespaces[] = 'testschema';
602+
603+
foreach ($diff->toSql($this->_sm->getDatabasePlatform()) as $sql) {
604+
$this->_conn->exec($sql);
605+
}
606+
607+
//test if table is create in namespace
608+
$this->createTestTable('testschema.my_table_in_namespace');
609+
self::assertContains('testschema.my_table_in_namespace', $this->_sm->listTableNames());
610+
611+
//tables without namespace should be created in default namespace
612+
//default namespaces are ignored in table listings
613+
$this->createTestTable('my_table_not_in_namespace');
614+
self::assertContains('my_table_not_in_namespace', $this->_sm->listTableNames());
615+
}
616+
573617
public function testCreateAndListViews()
574618
{
575619
if (!$this->_sm->getDatabasePlatform()->supportsViews()) {

tests/Doctrine/Tests/DBAL/Platforms/AbstractSQLServerPlatformTestCase.php

Lines changed: 88 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -577,14 +577,71 @@ public function testGetCreateSchemaSQL()
577577
self::assertEquals('CREATE SCHEMA ' . $schemaName, $sql);
578578
}
579579

580+
public function testCreateTableWithSchemaColumnComments()
581+
{
582+
$table = new Table('testschema.test');
583+
$table->addColumn('id', 'integer', ['comment' => 'This is a comment']);
584+
$table->setPrimaryKey(['id']);
585+
586+
$expectedSql = [
587+
'CREATE TABLE testschema.test (id INT NOT NULL, PRIMARY KEY (id))',
588+
"EXEC sp_addextendedproperty N'MS_Description', N'This is a comment', N'SCHEMA', 'testschema', N'TABLE', 'test', N'COLUMN', id",
589+
];
590+
591+
self::assertEquals($expectedSql, $this->_platform->getCreateTableSQL($table));
592+
}
593+
594+
public function testAlterTableWithSchemaColumnComments()
595+
{
596+
$tableDiff = new TableDiff('testschema.mytable');
597+
$tableDiff->addedColumns['quota'] = new Column('quota', Type::getType('integer'), ['comment' => 'A comment']);
598+
599+
$expectedSql = [
600+
'ALTER TABLE testschema.mytable ADD quota INT NOT NULL',
601+
"EXEC sp_addextendedproperty N'MS_Description', N'A comment', N'SCHEMA', 'testschema', N'TABLE', 'mytable', N'COLUMN', quota",
602+
];
603+
604+
self::assertEquals($expectedSql, $this->_platform->getAlterTableSQL($tableDiff));
605+
}
606+
607+
public function testAlterTableWithSchemaDropColumnComments()
608+
{
609+
$tableDiff = new TableDiff('testschema.mytable');
610+
$tableDiff->changedColumns['quota'] = new ColumnDiff(
611+
'quota',
612+
new Column('quota', Type::getType('integer'), []),
613+
['comment'],
614+
new Column('quota', Type::getType('integer'), ['comment' => 'A comment'])
615+
);
616+
617+
$expectedSql = ["EXEC sp_dropextendedproperty N'MS_Description', N'SCHEMA', 'testschema', N'TABLE', 'mytable', N'COLUMN', quota"];
618+
619+
self::assertEquals($expectedSql, $this->_platform->getAlterTableSQL($tableDiff));
620+
}
621+
622+
public function testAlterTableWithSchemaUpdateColumnComments()
623+
{
624+
$tableDiff = new TableDiff('testschema.mytable');
625+
$tableDiff->changedColumns['quota'] = new ColumnDiff(
626+
'quota',
627+
new Column('quota', Type::getType('integer'), ['comment' => 'B comment']),
628+
['comment'],
629+
new Column('quota', Type::getType('integer'), ['comment' => 'A comment'])
630+
);
631+
632+
$expectedSql = ["EXEC sp_updateextendedproperty N'MS_Description', N'B comment', N'SCHEMA', 'testschema', N'TABLE', 'mytable', N'COLUMN', quota"];
633+
634+
self::assertEquals($expectedSql, $this->_platform->getAlterTableSQL($tableDiff));
635+
}
636+
580637
/**
581638
* @group DBAL-543
582639
*/
583640
public function getCreateTableColumnCommentsSQL()
584641
{
585642
return array(
586643
"CREATE TABLE test (id INT NOT NULL, PRIMARY KEY (id))",
587-
"EXEC sp_addextendedproperty N'MS_Description', N'This is a comment', N'SCHEMA', dbo, N'TABLE', test, N'COLUMN', id",
644+
"EXEC sp_addextendedproperty N'MS_Description', N'This is a comment', N'SCHEMA', 'dbo', N'TABLE', 'test', N'COLUMN', id",
588645
);
589646
}
590647

@@ -595,7 +652,7 @@ public function getAlterTableColumnCommentsSQL()
595652
{
596653
return array(
597654
"ALTER TABLE mytable ADD quota INT NOT NULL",
598-
"EXEC sp_addextendedproperty N'MS_Description', N'A comment', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', quota",
655+
"EXEC sp_addextendedproperty N'MS_Description', N'A comment', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', quota",
599656
// todo
600657
//"EXEC sp_addextendedproperty N'MS_Description', N'B comment', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', baz",
601658
);
@@ -608,7 +665,7 @@ public function getCreateTableColumnTypeCommentsSQL()
608665
{
609666
return array(
610667
"CREATE TABLE test (id INT NOT NULL, data VARCHAR(MAX) NOT NULL, PRIMARY KEY (id))",
611-
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:array)', N'SCHEMA', dbo, N'TABLE', test, N'COLUMN', data",
668+
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:array)', N'SCHEMA', 'dbo', N'TABLE', 'test', N'COLUMN', data",
612669
);
613670
}
614671

@@ -636,15 +693,15 @@ public function testGeneratesCreateTableSQLWithColumnComments()
636693
self::assertEquals(
637694
array(
638695
"CREATE TABLE mytable (id INT IDENTITY NOT NULL, comment_null INT NOT NULL, comment_false INT NOT NULL, comment_empty_string INT NOT NULL, comment_integer_0 INT NOT NULL, comment_float_0 INT NOT NULL, comment_string_0 INT NOT NULL, comment INT NOT NULL, [comment_quoted] INT NOT NULL, [create] INT NOT NULL, commented_type VARCHAR(MAX) NOT NULL, commented_type_with_comment VARCHAR(MAX) NOT NULL, comment_with_string_literal_char NVARCHAR(255) NOT NULL, PRIMARY KEY (id))",
639-
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_integer_0",
640-
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_float_0",
641-
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_string_0",
642-
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine 0wnz you!', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment",
643-
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine 0wnz comments for explicitly quoted columns!', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', [comment_quoted]",
644-
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine 0wnz comments for reserved keyword columns!', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', [create]",
645-
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', commented_type",
646-
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine array type.(DC2Type:array)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', commented_type_with_comment",
647-
"EXEC sp_addextendedproperty N'MS_Description', N'O''Reilly', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_with_string_literal_char",
696+
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_integer_0",
697+
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_float_0",
698+
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_string_0",
699+
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine 0wnz you!', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment",
700+
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine 0wnz comments for explicitly quoted columns!', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', [comment_quoted]",
701+
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine 0wnz comments for reserved keyword columns!', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', [create]",
702+
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', commented_type",
703+
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine array type.(DC2Type:array)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', commented_type_with_comment",
704+
"EXEC sp_addextendedproperty N'MS_Description', N'O''Reilly', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_with_string_literal_char",
648705
),
649706
$this->_platform->getCreateTableSQL($table)
650707
);
@@ -807,27 +864,27 @@ public function testGeneratesAlterTableSQLWithColumnComments()
807864
"ALTER TABLE mytable ALTER COLUMN commented_type INT NOT NULL",
808865

809866
// Added columns.
810-
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', added_comment_integer_0",
811-
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', added_comment_float_0",
812-
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', added_comment_string_0",
813-
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', added_comment",
814-
"EXEC sp_addextendedproperty N'MS_Description', N'rulez', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', [added_comment_quoted]",
815-
"EXEC sp_addextendedproperty N'MS_Description', N'666', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', [select]",
816-
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', added_commented_type",
817-
"EXEC sp_addextendedproperty N'MS_Description', N'666(DC2Type:array)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', added_commented_type_with_comment",
818-
"EXEC sp_addextendedproperty N'MS_Description', N'''''', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', added_comment_with_string_literal_char",
867+
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', added_comment_integer_0",
868+
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', added_comment_float_0",
869+
"EXEC sp_addextendedproperty N'MS_Description', N'0', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', added_comment_string_0",
870+
"EXEC sp_addextendedproperty N'MS_Description', N'Doctrine', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', added_comment",
871+
"EXEC sp_addextendedproperty N'MS_Description', N'rulez', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', [added_comment_quoted]",
872+
"EXEC sp_addextendedproperty N'MS_Description', N'666', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', [select]",
873+
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', added_commented_type",
874+
"EXEC sp_addextendedproperty N'MS_Description', N'666(DC2Type:array)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', added_commented_type_with_comment",
875+
"EXEC sp_addextendedproperty N'MS_Description', N'''''', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', added_comment_with_string_literal_char",
819876

820877
// Changed columns.
821-
"EXEC sp_addextendedproperty N'MS_Description', N'primary', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', id",
822-
"EXEC sp_addextendedproperty N'MS_Description', N'false', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_false",
823-
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_empty_string",
824-
"EXEC sp_dropextendedproperty N'MS_Description', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_string_0",
825-
"EXEC sp_dropextendedproperty N'MS_Description', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment",
826-
"EXEC sp_updateextendedproperty N'MS_Description', N'Doctrine array.(DC2Type:array)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', [comment_quoted]",
827-
"EXEC sp_updateextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', [create]",
828-
"EXEC sp_updateextendedproperty N'MS_Description', N'foo', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', commented_type",
829-
"EXEC sp_updateextendedproperty N'MS_Description', N'(DC2Type:array)', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', commented_type_with_comment",
830-
"EXEC sp_updateextendedproperty N'MS_Description', N'''', N'SCHEMA', dbo, N'TABLE', mytable, N'COLUMN', comment_with_string_literal_char",
878+
"EXEC sp_addextendedproperty N'MS_Description', N'primary', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', id",
879+
"EXEC sp_addextendedproperty N'MS_Description', N'false', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_false",
880+
"EXEC sp_addextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_empty_string",
881+
"EXEC sp_dropextendedproperty N'MS_Description', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_string_0",
882+
"EXEC sp_dropextendedproperty N'MS_Description', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment",
883+
"EXEC sp_updateextendedproperty N'MS_Description', N'Doctrine array.(DC2Type:array)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', [comment_quoted]",
884+
"EXEC sp_updateextendedproperty N'MS_Description', N'(DC2Type:object)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', [create]",
885+
"EXEC sp_updateextendedproperty N'MS_Description', N'foo', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', commented_type",
886+
"EXEC sp_updateextendedproperty N'MS_Description', N'(DC2Type:array)', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', commented_type_with_comment",
887+
"EXEC sp_updateextendedproperty N'MS_Description', N'''', N'SCHEMA', 'dbo', N'TABLE', 'mytable', N'COLUMN', comment_with_string_literal_char",
831888
),
832889
$this->_platform->getAlterTableSQL($tableDiff)
833890
);

0 commit comments

Comments
 (0)