phinx icon indicating copy to clipboard operation
phinx copied to clipboard

Migration snapshot tool creates duplicated index code for UNIQUE indexes

Open V-ed opened this issue 8 years ago • 1 comments

Goal : create a migration from an existing database (MySQL)

  • Database where migration is being created from : mysqlnd 5.0.12-dev - 20150407 using phpMyAdmin. PHP version: 7.1.9

Indexes looks like this in phpMyAdmin's table view : indexes of table Notice how the index user_id is Unique

When following the Official CakePHP's migrations cookbook, doing the command bin/cake bake migration_snapshot Initial works correctly, but then I had problems creating an SQLite database as the error General error 1 : user_id_index already exists in [...] (it was similar to this, I'm writing this from memory) and I banged my head on why was that.

I took a look at the code generated by the snapshot command and I saw this :

// [...]
->addIndex(
    [
        'user_id',
    ],
    ['unique' => true]
)
->addIndex(
    [
        'user_id',
    ]
)
// [...]

Removing the second ->addIndex() solves the problem when creating the SQLite database using the migration(s).

To recap

  • Trying to go from MySQL to SQLite using migrations
  • Command bin/cake bake migration_snapshot Initial generates files without errors
  • then trying the command bin/cake migrations migrate create the SQLite database with errors :
    • General error 1 : user_id_index already exists in [...] in command line
    • only one table exists in SQLite database : phinxlog, which has no rows.
  • Removing duplicated code fixes the problem.

I feel like that duplicated code shouldn't have been generated and I'd consider that a bug.

I haven't done much testing, so I dunno about reproductability.

V-ed avatar Nov 10 '17 15:11 V-ed

PR welcome

dereuromark avatar Apr 11 '20 07:04 dereuromark