X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fmysqlschema.php;h=c3d3501c74cff52f6018cc73ac8120be65970a75;hb=1d29ba83150bdd7a23e497ca9a743ac2b6158b6f;hp=937c20ea8baa87fd4be049fed5b4b95b09790acc;hpb=a67160e01ecd320b263923cd0a69a68e946a1937;p=quix0rs-gnu-social.git diff --git a/lib/mysqlschema.php b/lib/mysqlschema.php index 937c20ea8b..c3d3501c74 100644 --- a/lib/mysqlschema.php +++ b/lib/mysqlschema.php @@ -117,9 +117,14 @@ class MysqlSchema extends Schema $field['not null'] = true; } if ($row['COLUMN_DEFAULT'] !== null) { - $field['default'] = $row['COLUMN_DEFAULT']; - if ($this->isNumericType($type)) { - $field['default'] = intval($field['default']); + // Hack for timestamp cols + if ($type == 'timestamp' && $row['COLUMN_DEFAULT'] == 'CURRENT_TIMESTAMP') { + // skip + } else { + $field['default'] = $row['COLUMN_DEFAULT']; + if ($this->isNumericType($type)) { + $field['default'] = intval($field['default']); + } } } if ($row['COLUMN_KEY'] !== null) { @@ -239,6 +244,20 @@ class MysqlSchema extends Schema return $this->fetchQueryData($sql); } + /** + * Append an SQL statement with an index definition for a full-text search + * index over one or more columns on a table. + * + * @param array $statements + * @param string $table + * @param string $name + * @param array $def + */ + function appendCreateFulltextIndex(array &$statements, $table, $name, array $def) + { + $statements[] = "CREATE FULLTEXT INDEX $name ON $table " . $this->buildIndexList($def); + } + /** * Close out a 'create table' SQL statement. * @@ -251,7 +270,16 @@ class MysqlSchema extends Schema */ function endCreateTable($name, array $def) { - return ") ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin"; + $engine = $this->preferredEngine($def); + return ") ENGINE=$engine CHARACTER SET utf8 COLLATE utf8_bin"; + } + + function preferredEngine($def) + { + if (!empty($def['fulltext indexes'])) { + return 'MyISAM'; + } + return 'InnoDB'; } /** @@ -287,14 +315,15 @@ class MysqlSchema extends Schema * Throw some table metadata onto the ALTER TABLE if we have a mismatch * in expected type, collation. */ - function appendAlterExtras(array &$phrase, $tableName) + function appendAlterExtras(array &$phrase, $tableName, array $def) { // Check for table properties: make sure we're using a sane // engine type and charset/collation. // @fixme make the default engine configurable? $oldProps = $this->getTableProperties($tableName, array('ENGINE', 'TABLE_COLLATION')); - if (strtolower($oldProps['ENGINE']) != 'innodb') { - $phrase[] = 'ENGINE=InnoDB'; + $engine = $this->preferredEngine($def); + if (strtolower($oldProps['ENGINE']) != strtolower($engine)) { + $phrase[] = "ENGINE=$engine"; } if (strtolower($oldProps['TABLE_COLLATION']) != 'utf8_bin') { $phrase[] = 'DEFAULT CHARSET=utf8'; @@ -372,7 +401,14 @@ class MysqlSchema extends Schema $vals = array_map(array($this, 'quote'), $column['enum']); return 'enum(' . implode(',', $vals) . ')'; } else if ($this->_isString($column)) { - return parent::typeAndSize($column) . ' CHARSET utf8'; + $col = parent::typeAndSize($column); + if (!empty($column['charset'])) { + $col .= ' CHARSET ' . $column['charset']; + } + if (!empty($column['collate'])) { + $col .= ' COLLATE ' . $column['collate']; + } + return $col; } else { return parent::typeAndSize($column); }