fix v55 migration: we also need to sync hafas->iris in some cases
This commit is contained in:
parent
f18423c74d
commit
5554deed5f
1 changed files with 66 additions and 7 deletions
|
@ -7,6 +7,7 @@ use Mojo::Base 'Mojolicious::Command';
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use File::Slurp qw(read_file);
|
use File::Slurp qw(read_file);
|
||||||
|
use List::Util qw();
|
||||||
use JSON;
|
use JSON;
|
||||||
use Travel::Status::DE::HAFAS;
|
use Travel::Status::DE::HAFAS;
|
||||||
use Travel::Status::DE::IRIS::Stations;
|
use Travel::Status::DE::IRIS::Stations;
|
||||||
|
@ -2401,6 +2402,65 @@ my @migrations = (
|
||||||
printf( " %2.0f%% complete\n", $count * 100 / $total );
|
printf( " %2.0f%% complete\n", $count * 100 / $total );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Occasionally, IRIS checkins refer to stations that are not part of
|
||||||
|
# the Travel::Status::DE::IRIS database. Add those as HAFAS stops to
|
||||||
|
# satisfy the upcoming foreign key constraints.
|
||||||
|
|
||||||
|
my %iris_has_eva;
|
||||||
|
$res = $db->query(qq{select eva from stations where source = 0;});
|
||||||
|
while ( my $row = $res->hash ) {
|
||||||
|
$iris_has_eva{ $row->{eva} } = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
my %hafas_by_eva;
|
||||||
|
$res = $db->query(qq{select * from stations where source = 1;});
|
||||||
|
while ( my $row = $res->hash ) {
|
||||||
|
$hafas_by_eva{ $row->{eva} } = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @iris_ref_stations;
|
||||||
|
$res
|
||||||
|
= $db->query(
|
||||||
|
qq{select distinct checkin_station_id from journeys where backend_id = 0;}
|
||||||
|
);
|
||||||
|
while ( my $row = $res->hash ) {
|
||||||
|
push( @iris_ref_stations, $row->{checkin_station_id} );
|
||||||
|
}
|
||||||
|
$res
|
||||||
|
= $db->query(
|
||||||
|
qq{select distinct checkout_station_id from journeys where backend_id = 0;}
|
||||||
|
);
|
||||||
|
while ( my $row = $res->hash ) {
|
||||||
|
push( @iris_ref_stations, $row->{checkout_station_id} );
|
||||||
|
}
|
||||||
|
$res
|
||||||
|
= $db->query(
|
||||||
|
qq{select distinct checkin_station_id from in_transit where backend_id = 0;}
|
||||||
|
);
|
||||||
|
while ( my $row = $res->hash ) {
|
||||||
|
push( @iris_ref_stations, $row->{checkin_station_id} );
|
||||||
|
}
|
||||||
|
$res
|
||||||
|
= $db->query(
|
||||||
|
qq{select distinct checkout_station_id from in_transit where backend_id = 0;}
|
||||||
|
);
|
||||||
|
while ( my $row = $res->hash ) {
|
||||||
|
if ( $row->{checkout_station_id} ) {
|
||||||
|
push( @iris_ref_stations, $row->{checkout_station_id} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@iris_ref_stations = List::Util::uniq @iris_ref_stations;
|
||||||
|
|
||||||
|
for my $station (@iris_ref_stations) {
|
||||||
|
if ( not $iris_has_eva{$station} ) {
|
||||||
|
$hafas_by_eva{$station}{source} = 0;
|
||||||
|
$hafas_by_eva{$station}{archived} = 1;
|
||||||
|
$db->insert( 'stations', $hafas_by_eva{$station} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$db->query(
|
$db->query(
|
||||||
qq{
|
qq{
|
||||||
alter table in_transit add constraint in_transit_checkin_eva_fk
|
alter table in_transit add constraint in_transit_checkin_eva_fk
|
||||||
|
@ -2732,7 +2792,7 @@ sub sync_stations {
|
||||||
|
|
||||||
sub sync_backends {
|
sub sync_backends {
|
||||||
my ($db) = @_;
|
my ($db) = @_;
|
||||||
for my $service ( Travel::Status::DE::HAFAS::get_services()) {
|
for my $service ( Travel::Status::DE::HAFAS::get_services() ) {
|
||||||
$db->insert(
|
$db->insert(
|
||||||
'backends',
|
'backends',
|
||||||
{
|
{
|
||||||
|
@ -2848,7 +2908,6 @@ sub migrate_db {
|
||||||
sync_backends($db);
|
sync_backends($db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$db->update( 'schema_version',
|
$db->update( 'schema_version',
|
||||||
{ travelynx => $self->app->config->{version} } );
|
{ travelynx => $self->app->config->{version} } );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue