forked from GNUsocial/gnu-social
Filter table definitions to scrub out unsupported features before trying to alter a table. This lets us skip those where we end up trying to change unsupported features.
This commit is contained in:
parent
4101de7dd7
commit
229c772634
@ -523,4 +523,20 @@ class MysqlSchema extends Schema
|
|||||||
return parent::typeAndSize($column);
|
return parent::typeAndSize($column);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the given table definition array to match features available
|
||||||
|
* in this database.
|
||||||
|
*
|
||||||
|
* This lets us strip out unsupported things like comments, foreign keys,
|
||||||
|
* or type variants that we wouldn't get back from getTableDef().
|
||||||
|
*
|
||||||
|
* @param array $tableDef
|
||||||
|
*/
|
||||||
|
function filterDef(array $tableDef)
|
||||||
|
{
|
||||||
|
// @fixme add foreign-key support for MySQL
|
||||||
|
unset($tableDef['foreign keys']);
|
||||||
|
return $tableDef;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -406,4 +406,29 @@ class PgsqlSchema extends Schema
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the given table definition array to match features available
|
||||||
|
* in this database.
|
||||||
|
*
|
||||||
|
* This lets us strip out unsupported things like comments, foreign keys,
|
||||||
|
* or type variants that we wouldn't get back from getTableDef().
|
||||||
|
*
|
||||||
|
* @param array $tableDef
|
||||||
|
*/
|
||||||
|
function filterDef(array $tableDef)
|
||||||
|
{
|
||||||
|
foreach (array_keys($tableDef['fields']) as $name => &$col) {
|
||||||
|
// No convenient support for field descriptions
|
||||||
|
unset($col['description']);
|
||||||
|
|
||||||
|
if (isset($col['size'])) {
|
||||||
|
// Don't distinguish between tinyint and int.
|
||||||
|
if ($col['size'] == 'tiny' && $col['type'] == 'int') {
|
||||||
|
unset($col['size']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $tableDef;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -143,6 +143,7 @@ class Schema
|
|||||||
*/
|
*/
|
||||||
public function buildCreateTable($name, $def)
|
public function buildCreateTable($name, $def)
|
||||||
{
|
{
|
||||||
|
$def = $this->filterDef($def);
|
||||||
$sql = array();
|
$sql = array();
|
||||||
|
|
||||||
foreach ($def['fields'] as $col => $colDef) {
|
foreach ($def['fields'] as $col => $colDef) {
|
||||||
@ -487,17 +488,19 @@ class Schema
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$old = $this->filterDef($old);
|
||||||
|
$def = $this->filterDef($def);
|
||||||
|
|
||||||
// @fixme check if not present
|
// @fixme check if not present
|
||||||
$fields = $this->diffArrays($old['fields'], $def['fields'], array($this, 'columnsEqual'));
|
$fields = $this->diffArrays($old['fields'], $def['fields'], array($this, 'columnsEqual'));
|
||||||
$uniques = $this->diffArrays($old['unique keys'], $def['unique keys']);
|
$uniques = $this->diffArrays($old['unique keys'], $def['unique keys']);
|
||||||
$indexes = $this->diffArrays($old['indexes'], $def['indexes']);
|
$indexes = $this->diffArrays($old['indexes'], $def['indexes']);
|
||||||
|
|
||||||
/*
|
$total = $fields['count'] + $uniques['count'] + $indexes['count'];
|
||||||
if (count($toadd) + count($todrop) + count($tomod) == 0) {
|
if ($total == 0) {
|
||||||
// nothing to do
|
// nothing to do
|
||||||
return true;
|
return array();
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// For efficiency, we want this all in one
|
// For efficiency, we want this all in one
|
||||||
// query, instead of using our methods.
|
// query, instead of using our methods.
|
||||||
@ -561,7 +564,8 @@ class Schema
|
|||||||
return array('add' => $toadd,
|
return array('add' => $toadd,
|
||||||
'del' => $todrop,
|
'del' => $todrop,
|
||||||
'mod' => $tomod,
|
'mod' => $tomod,
|
||||||
'keep' => $tokeep);
|
'keep' => $tokeep,
|
||||||
|
'count' => count($toadd) + count($todrop) + count($tomod));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -847,6 +851,20 @@ class Schema
|
|||||||
return $table;
|
return $table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the given table definition array to match features available
|
||||||
|
* in this database.
|
||||||
|
*
|
||||||
|
* This lets us strip out unsupported things like comments, foreign keys,
|
||||||
|
* or type variants that we wouldn't get back from getTableDef().
|
||||||
|
*
|
||||||
|
* @param array $tableDef
|
||||||
|
*/
|
||||||
|
function filterDef(array $tableDef)
|
||||||
|
{
|
||||||
|
return $tableDef;
|
||||||
|
}
|
||||||
|
|
||||||
function isNumericType($type)
|
function isNumericType($type)
|
||||||
{
|
{
|
||||||
$type = strtolower($type);
|
$type = strtolower($type);
|
||||||
|
@ -129,17 +129,19 @@ function dumpBuildTable($tableName)
|
|||||||
|
|
||||||
function dumpEnsureTable($tableName)
|
function dumpEnsureTable($tableName)
|
||||||
{
|
{
|
||||||
echo "-- \n";
|
|
||||||
echo "-- $tableName\n";
|
|
||||||
echo "-- \n";
|
|
||||||
|
|
||||||
$schema = Schema::get();
|
$schema = Schema::get();
|
||||||
$def = getCoreSchema($tableName);
|
$def = getCoreSchema($tableName);
|
||||||
$sql = $schema->buildEnsureTable($tableName, $def);
|
$sql = $schema->buildEnsureTable($tableName, $def);
|
||||||
$sql[] = '';
|
|
||||||
|
|
||||||
echo implode(";\n", $sql);
|
if ($sql) {
|
||||||
echo "\n";
|
echo "-- \n";
|
||||||
|
echo "-- $tableName\n";
|
||||||
|
echo "-- \n";
|
||||||
|
|
||||||
|
$sql[] = '';
|
||||||
|
echo implode(";\n", $sql);
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showDiff($a, $b)
|
function showDiff($a, $b)
|
||||||
|
Loading…
Reference in New Issue
Block a user