chiark / gitweb /
new update-master-info seems to work
[ypp-sc-tools.db-live.git] / yarrg / yppedia-chart-parser
index 8eafa4cbf9293c78c278be570d8cbc12b751ba38..228d1e2c4fae0f47cd058df5f1cbad73d5378a8c 100755 (executable)
@@ -619,6 +619,82 @@ 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 ==========
+
+our $localtopo_path;
+
+sub localtopo_rewrite () {
+    $localtopo_path= '_ocean-'.(lc $ocean).'.txt';
+    my $fh= new IO::File "$localtopo_path.tmp", 'w';
+    print $fh "# autogenerated - do not edit\n" or die $!;
+    print $fh "ocean $ocean\n" or die $!;
+    my %arches;
+    foreach my $isle (sort keys %wtisland2arch) {
+       my $arch= $wtisland2arch{$isle};
+       push @{ $arches{$arch} }, $isle;
+    }
+    foreach my $arch (sort keys %arches) {
+       print $fh " $arch\n" or die $!;
+       foreach my $isle (@{ $arches{$arch} }) {
+           print $fh "  $isle\n" or die $!;
+       }
+    }
+    print $fh "\n" or die $!;
+    close $fh or die $!;
+}
+
+sub localtopo_commit () {
+    rename "$localtopo_path.tmp", $localtopo_path or die $!;
+}
+
 #========== main program ==========
 
 parse_info_serverside();