SQLite is picky about the position of AUTOINCREMENT in field definition, handle it...
authorMax Semenik <maxsem@users.mediawiki.org>
Sun, 10 Apr 2011 08:44:06 +0000 (08:44 +0000)
committerMax Semenik <maxsem@users.mediawiki.org>
Sun, 10 Apr 2011 08:44:06 +0000 (08:44 +0000)
includes/db/DatabaseSqlite.php
tests/phpunit/includes/db/DatabaseSqliteTest.php

index 1b57fd8..1ad8f6e 100644 (file)
@@ -576,6 +576,8 @@ class DatabaseSqlite extends DatabaseBase {
                        $s = preg_replace( '/\bauto_increment\b/i', 'AUTOINCREMENT', $s );
                        // No explicit options
                        $s = preg_replace( '/\)[^);]*(;?)\s*$/', ')\1', $s );
+                       // AUTOINCREMENT should immedidately follow PRIMARY KEY
+                       $s = preg_replace( '/primary key (.*?) autoincrement/i', 'PRIMARY KEY AUTOINCREMENT $1', $s );
                } elseif ( preg_match( '/^\s*CREATE (\s*(?:UNIQUE|FULLTEXT)\s+)?INDEX/i', $s ) ) {
                        // No truncated indexes
                        $s = preg_replace( '/\(\d+\)/', '', $s );
index 366f341..29e16d6 100644 (file)
@@ -57,6 +57,13 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                        'Table name changed'
                        );
 
+               $this->assertEquals( "CREATE TABLE foo ( foobar INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL );",
+                       $this->replaceVars("CREATE TABLE foo ( foobar INT PRIMARY KEY NOT NULL AUTO_INCREMENT );" )
+                       );
+               $this->assertEquals( "CREATE TABLE foo ( foobar INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL );",
+                       $this->replaceVars("CREATE TABLE foo ( foobar INT PRIMARY KEY AUTO_INCREMENT NOT NULL );" )
+                       );
+
                $this->assertEquals( "CREATE TABLE enums( enum1 TEXT, myenum TEXT)",
                        $this->replaceVars( "CREATE TABLE enums( enum1 ENUM('A', 'B'), myenum ENUM ('X', 'Y'))" )
                        );