]> git.sesse.net Git - remoteglot/blobdiff - remoteglot.pl
Use the UPSERT functionality from PostgreSQL 9.5.
[remoteglot] / remoteglot.pl
index d4a0d73183a2388c5f8930e922680cc3e80fedaf..c35a0518694789ad9c37452599226fd65977033a 100755 (executable)
@@ -289,13 +289,19 @@ sub handle_pgn {
                        my $pos = Position->start_pos($pgn->white, $pgn->black);
                        my $moves = $pgn->moves;
                        my @uci_moves = ();
+                       my @repretty_moves = ();
                        for my $move (@$moves) {
-                               my $uci_move;
-                               ($pos, $uci_move) = $pos->make_pretty_move($move);
+                               my ($npos, $uci_move) = $pos->make_pretty_move($move);
                                push @uci_moves, $uci_move;
+
+                               # Re-prettyprint the move.
+                               my ($from_col, $from_row, $to_col, $to_row, $promo) = parse_uci_move($uci_move);
+                               my ($pretty, undef) = $pos->{'board'}->prettyprint_move($from_row, $from_col, $to_row, $to_col, $promo);
+                               push @repretty_moves, $pretty;
+                               $pos = $npos;
                        }
                        $pos->{'result'} = $pgn->result;
-                       $pos->{'pretty_history'} = $moves;
+                       $pos->{'pretty_history'} = \@repretty_moves;
 
                        extract_clock($pgn, $pos);
 
@@ -892,12 +898,16 @@ sub output_json {
                    ($new_depth == $old_depth && $new_nodes >= $old_nodes)) {
                        atomic_set_contents($filename, $encoded);
                        if (defined($json->{'plot_score'})) {
-                               local $dbh->{AutoCommit} = 0;
-                               $dbh->do('DELETE FROM scores WHERE id=?', undef, $id);
-                               $dbh->do('INSERT INTO scores (id, plot_score, short_score, engine, depth, nodes) VALUES (?,?,?,?,?,?)', undef,
+                               $dbh->do('INSERT INTO scores (id, plot_score, short_score, engine, depth, nodes) VALUES (?,?,?,?,?,?) ' .
+                                        '    ON CONFLICT (id) DO UPDATE SET ' .
+                                        '        plot_score=EXCLUDED.plot_score, ' .
+                                        '        short_score=EXCLUDED.short_score, ' .
+                                        '        engine=EXCLUDED.engine, ' .
+                                        '        depth=EXCLUDED.depth, ' .
+                                        '        nodes=EXCLUDED.nodes',
+                                       undef,
                                        $id, $json->{'plot_score'}, $json->{'short_score'},
                                        $json->{'engine'}{'name'}, $new_depth, $new_nodes);
-                               $dbh->commit;
                        }
                }
        }