From d39534084f9df5a798ae8d2b6f61cd8a6ab4947d Mon Sep 17 00:00:00 2001 From: Rob Beer Date: Thu, 10 Sep 2026 15:33:12 +0100 Subject: [PATCH] Addressed load order to avoid referential integrity errors --- src/main/java/com/conveyal/gtfs/GTFSFeed.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/conveyal/gtfs/GTFSFeed.java b/src/main/java/com/conveyal/gtfs/GTFSFeed.java index 64016b19..c4673c4c 100644 --- a/src/main/java/com/conveyal/gtfs/GTFSFeed.java +++ b/src/main/java/com/conveyal/gtfs/GTFSFeed.java @@ -184,14 +184,17 @@ else if (feedId == null || feedId.isEmpty()) { fares = null; // free memory new Pattern.Loader(this).loadTable(zip); - new RouteNetwork.Loader(this).loadTable(zip); + // Route must be loaded before RouteNetwork because RouteNetwork references Route. new Route.Loader(this).loadTable(zip); + new RouteNetwork.Loader(this).loadTable(zip); if (!route_networks.isEmpty()) { Route.mergeRouteNetworks(routes, route_networks); } new ShapePoint.Loader(this).loadTable(zip); - new StopArea.Loader(this).loadTable(zip); + // Stop and Area must be loaded before StopArea because StopArea references both of them. new Stop.Loader(this).loadTable(zip); + new Area.Loader(this).loadTable(zip); + new StopArea.Loader(this).loadTable(zip); if (!stop_areas.isEmpty()) { Stop.mergeStopAreas(stops, stop_areas); } @@ -201,7 +204,6 @@ else if (feedId == null || feedId.isEmpty()) { new StopTime.Loader(this).loadTable(zip); // comment out this line for quick testing using NL feed // Fares v2. - new Area.Loader(this).loadTable(zip); new TimeFrame.Loader(this).loadTable(zip); new Network.Loader(this).loadTable(zip); new FareMedia.Loader(this).loadTable(zip);