We have to create and populate the Notice_location table before constraint checking foreign keys.

This commit is contained in:
Mikael Nordfeldth 2016-06-25 13:01:56 +02:00
parent d0c26fb1a4
commit 3d6e25ee5f
1 changed files with 38 additions and 40 deletions

View File

@ -3081,6 +3081,44 @@ class Notice extends Managed_DataObject
$schema = Schema::get();
$schemadef = $schema->getTableDef($table);
// 2015-09-04 We move Notice location data to Notice_location
// First we see if we have to do this at all
if (isset($schemadef['fields']['lat'])
&& isset($schemadef['fields']['lon'])
&& isset($schemadef['fields']['location_id'])
&& isset($schemadef['fields']['location_ns'])) {
// Then we make sure the Notice_location table is created!
$schema->ensureTable('notice_location', Notice_location::schemaDef());
// Then we continue on our road to migration!
echo "\nFound old $table table, moving location data to 'notice_location' table... (this will probably take a LONG time, but can be aborted and continued)";
$notice = new Notice();
$notice->query(sprintf('SELECT id, lat, lon, location_id, location_ns FROM %1$s ' .
'WHERE lat IS NOT NULL ' .
'OR lon IS NOT NULL ' .
'OR location_id IS NOT NULL ' .
'OR location_ns IS NOT NULL',
$schema->quoteIdentifier($table)));
print "\nFound {$notice->N} notices with location data, inserting";
while ($notice->fetch()) {
$notloc = Notice_location::getKV('notice_id', $notice->id);
if ($notloc instanceof Notice_location) {
print "-";
continue;
}
$notloc = new Notice_location();
$notloc->notice_id = $notice->id;
$notloc->lat= $notice->lat;
$notloc->lon= $notice->lon;
$notloc->location_id= $notice->location_id;
$notloc->location_ns= $notice->location_ns;
$notloc->insert();
print ".";
}
print "\n";
}
/**
* Make sure constraints are met before upgrading, if foreign keys
* are not already in use.
@ -3153,45 +3191,5 @@ class Notice extends Managed_DataObject
unset($notice);
}
}
// 2015-09-04 We move Notice location data to Notice_location
// First we see if we have to do this at all
if (!isset($schemadef['fields']['lat'])
&& !isset($schemadef['fields']['lon'])
&& !isset($schemadef['fields']['location_id'])
&& !isset($schemadef['fields']['location_ns'])) {
// We have already removed the location fields, so no need to migrate.
return;
}
// Then we make sure the Notice_location table is created!
$schema->ensureTable('notice_location', Notice_location::schemaDef());
// Then we continue on our road to migration!
echo "\nFound old $table table, moving location data to 'notice_location' table... (this will probably take a LONG time, but can be aborted and continued)";
$notice = new Notice();
$notice->query(sprintf('SELECT id, lat, lon, location_id, location_ns FROM %1$s ' .
'WHERE lat IS NOT NULL ' .
'OR lon IS NOT NULL ' .
'OR location_id IS NOT NULL ' .
'OR location_ns IS NOT NULL',
$schema->quoteIdentifier($table)));
print "\nFound {$notice->N} notices with location data, inserting";
while ($notice->fetch()) {
$notloc = Notice_location::getKV('notice_id', $notice->id);
if ($notloc instanceof Notice_location) {
print "-";
continue;
}
$notloc = new Notice_location();
$notloc->notice_id = $notice->id;
$notloc->lat= $notice->lat;
$notloc->lon= $notice->lon;
$notloc->location_id= $notice->location_id;
$notloc->location_ns= $notice->location_ns;
$notloc->insert();
print ".";
}
print "\n";
}
}