Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DBAL-18: Doctrine\DBAL\Schema\SchemaDiff generates foreign keys statments for new tables even if the database platform doesn't support them #1346

Closed
doctrinebot opened this issue Jun 6, 2010 · 4 comments
Assignees
Labels
Milestone

Comments

@doctrinebot
Copy link

Jira issue originally created by user eriksencosta:

When running the code snippets of http://www.doctrine-project.org/projects/dbal/2.0/docs/reference/schema-representation/en, I found that Doctrine\DBAL\Schema\SchemaDiff generates foreign keys statments for new tables even if the database plataform doesn't support them. My connection is a pdo_sqlite.

<?php
$schema = new \Doctrine\DBAL\Schema\Schema();

// Doctrine\DBAL\Schema\Schema pode ser usado para criar representações do
// schema, como a criação de tabelas
$myTable = $schema->createTable('my_table');
$myTable->addColumn('id', 'integer', array('unsigned' => true));
$myTable->addColumn("username", "string", array("length" => 32));
$myTable->setPrimaryKey(array("id"));
$myTable->addUniqueIndex(array("username"));

// SQLite does not supports sequences.
//$schema->createSequence("my*table*seq");

// Clone just to test Doctrine\DBAL\Schema\Comparator
$fromSchema = clone $schema;

$myForeign = $schema->createTable("my_foreign");
$myForeign->addColumn("id", "integer");
$myForeign->addColumn("user_id", "integer");
$myForeign->addForeignKeyConstraint($myTable, array("user_id"), array("id"), array("onUpdate" => "CASCADE"));

$queries = $schema->toSql($conn1->getDatabasePlatform()); // get queries to create this schema.
$dropSchema = $schema->toDropSql($conn1->getDatabasePlatform()); // get queries to safely delete this schema.

var_dump($queries);
var_dump($dropSchema);


$comparator = new \Doctrine\DBAL\Schema\Comparator();
$schemaDiff = $comparator->compare($fromSchema, $schema);

$queries     = $schemaDiff->toSql($conn1->getDatabasePlatform());     // queries to get from one to another schema.
$saveQueries = $schemaDiff->toSaveSql($conn1->getDatabasePlatform());

var_dump($queries);
var_dump($saveQueries);
?>

Both var_dump calls will output something like this:

array(2) {
  [0]=>
  string(71) "CREATE TABLE my*foreign (user*id INTEGER NOT NULL, id INTEGER NOT NULL)"
  [1]=>
  string(105) "ALTER TABLE my*foreign ADD CONSTRAINT my_foreign_user_id_fk FOREIGN KEY (user_id) REFERENCES my*table(id)"
}
@doctrinebot
Copy link
Author

Comment created by eriksencosta:

I have this fixed in mine github fork, 'DBAL-18' topic branch: http://github.com/eriksencosta/dbal/tree/[DBAL-18](http://www.doctrine-project.org/jira/browse/DBAL-18).

I added an extra if statment to check if the platform supports foreign keys constraints and updated the test case also.

In the test case, I didn't created an extra test method because I found it very related to the first if statment of the method Doctrine\DBAL\Schema\SchemaDiff::_toSql().

@doctrinebot
Copy link
Author

Comment created by @beberlei:

Merged into DBAL Master, will be released with BETA 2

@doctrinebot
Copy link
Author

Issue was closed with resolution "Fixed"

@github-actions
Copy link

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 27, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants