diff --git a/model/MySQLDatabase.php b/model/MySQLDatabase.php index 535c740a7..9ebfaa614 100644 --- a/model/MySQLDatabase.php +++ b/model/MySQLDatabase.php @@ -258,17 +258,35 @@ class MySQLDatabase extends SS_Database { $alterList[] .= "DROP INDEX \"$k\""; $alterList[] .= "ADD ". $this->getIndexSqlDefinition($k, $v); } + + if($alteredOptions && isset($alteredOptions[get_class($this)])) { + if(!isset($this->indexList[$tableName])) { + $this->indexList[$tableName] = $this->indexList($tableName); + } + + $skip = false; + foreach($this->indexList[$tableName] as $index) { + if(strpos($index, 'fulltext ') === 0) { + $skip = true; + break; + } + } + if($skip) { + DB::alteration_message( + sprintf("Table %s options not changed to %s due to fulltextsearch index", $tableName, $alteredOptions[get_class($this)]), + "changed" + ); + } else { + $this->query(sprintf("ALTER TABLE \"%s\" %s", $tableName, $alteredOptions[get_class($this)])); + DB::alteration_message( + sprintf("Table %s options changed: %s", $tableName, $alteredOptions[get_class($this)]), + "changed" + ); + } + } $alterations = implode(",\n", $alterList); $this->query("ALTER TABLE \"$tableName\" $alterations"); - - if($alteredOptions && isset($alteredOptions[get_class($this)])) { - $this->query(sprintf("ALTER TABLE \"%s\" %s", $tableName, $alteredOptions[get_class($this)])); - DB::alteration_message( - sprintf("Table %s options changed: %s", $tableName, $alteredOptions[get_class($this)]), - "changed" - ); - } } public function isView($tableName) { diff --git a/search/FulltextSearchable.php b/search/FulltextSearchable.php index 20a09868a..fa0c29d53 100644 --- a/search/FulltextSearchable.php +++ b/search/FulltextSearchable.php @@ -49,6 +49,9 @@ class FulltextSearchable extends DataExtension { if(!class_exists($class)) continue; if(isset($defaultColumns[$class])) { + if(DB::getConn()->getDatabaseServer() == 'mysql') { + Object::add_static_var($class, 'create_table_options', array('MySQLDatabase' => 'ENGINE=MyISAM'), true); + } Object::add_extension($class, "FulltextSearchable('{$defaultColumns[$class]}')"); Object::add_static_var($class, 'create_table_options', array('MySQLDatabase' => 'ENGINE=MyISAM')); } else {