+sub database_graph_spr () {
+ $dbspr= shortest_path_reduction('db',$dbdists);
+}
+
+sub database_do_updates () {
+ my $addisland= $dbh->prepare(<<'END')
+ INSERT OR IGNORE INTO islands (islandname, archipelago) VALUES (?, ?);
+END
+ ;
+ foreach my $island (sort keys %wiisland2node) {
+ my $wiarch= wiisland2arch($island);
+ $addisland->execute($island, $wiarch);
+ }
+
+ db_doall(<<END)
+ DELETE FROM dists;
+ DELETE FROM routes;
+END
+ ;
+ my $adddist= $dbh->prepare(<<'END')
+ INSERT INTO dists VALUES
+ ((SELECT islandid FROM islands WHERE islandname == ?),
+ (SELECT islandid FROM islands WHERE islandname == ?),
+ ?);
+END
+ ;
+ my $addroute= $dbh->prepare(<<'END')
+ INSERT INTO routes VALUES
+ ((SELECT islandid FROM islands WHERE islandname == ?),
+ (SELECT islandid FROM islands WHERE islandname == ?),
+ ?);
+END
+ ;
+ foreach my $ia (sort keys %wiisland2node) {
+ my $na= $wiisland2node{$ia};
+ foreach my $ib (sort keys %wiisland2node) {
+ my $nb= $wiisland2node{$ib};
+ my $apdist= $ia eq $ib ? 0 : widist($na,$nb);
+ die "$ia $ib" unless defined $apdist;
+ my $sprdist= $wispr->get_edge_weight($ia,$ib);
+ die "$ia $ib $apdist $sprdist" if
+ defined($sprdist) && $sprdist != $apdist;
+
+ $adddist->execute($ia,$ib,$apdist);
+ $addroute->execute($ia,$ib,$sprdist) if defined $sprdist;
+ }
+ }
+
+ # select ia.islandname, ib.islandname, d.dist from dists as d, islands as ia on d.aiid = ia.islandid, islands as ib on d.biid = ib.islandid order by ia.islandname, ib.islandname;
+
+}
+
+#========== update _ocean-*.txt ==========