# HG changeset patch # User jbe # Date 1363515504 -3600 # Node ID c37c0b4f2027470573e2951532d4950ae475ccd7 # Parent e22a4d2aea2d470a35e45ccb7b1dc30bfc2d43f1 Write "final_suggestion_order_calculated" flag in "lf_update_suggestion_order" diff -r e22a4d2aea2d -r c37c0b4f2027 lf_update_suggestion_order.c --- a/lf_update_suggestion_order.c Sun Mar 17 10:40:00 2013 +0100 +++ b/lf_update_suggestion_order.c Sun Mar 17 11:18:24 2013 +0100 @@ -143,13 +143,20 @@ abort(); } -static int write_ranks(PGconn *db, char *escaped_initiative_id) { +static int write_ranks(PGconn *db, char *escaped_initiative_id, int final) { PGresult *res; char *cmd; int i; - if (asprintf(&cmd, "BEGIN; UPDATE \"suggestion\" SET \"proportional_order\" = NULL WHERE \"initiative_id\" = %s", escaped_initiative_id) < 0) { - fprintf(stderr, "Could not prepare query string in memory.\n"); - abort(); + if (final) { + if (asprintf(&cmd, "BEGIN; UPDATE \"initiative\" SET \"final_suggestion_order_calculated\" = TRUE WHERE \"id\" = %s; UPDATE \"suggestion\" SET \"proportional_order\" = NULL WHERE \"initiative_id\" = %s", escaped_initiative_id, escaped_initiative_id) < 0) { + fprintf(stderr, "Could not prepare query string in memory.\n"); + abort(); + } + } else { + if (asprintf(&cmd, "BEGIN; UPDATE \"suggestion\" SET \"proportional_order\" = NULL WHERE \"initiative_id\" = %s", escaped_initiative_id) < 0) { + fprintf(stderr, "Could not prepare query string in memory.\n"); + abort(); + } } res = PQexec(db, cmd); free(cmd); @@ -213,7 +220,7 @@ } } -static int process_initiative(PGconn *db, PGresult *res, char *escaped_initiative_id) { +static int process_initiative(PGconn *db, PGresult *res, char *escaped_initiative_id, int final) { int err; int ballot_count = 0; struct ballot *ballots; @@ -224,8 +231,19 @@ char *old_member_id = NULL; struct ballot *ballot; int candidates_in_sections[4] = {0, }; + tuple_count = PQntuples(res); + if (!tuple_count) { + if (final) { + printf("No suggestions found, but marking initiative as finally calculated.\n"); + err = write_ranks(db, escaped_initiative_id, final); + printf("Done.\n"); + return err; + } else { + printf("Nothing to do.\n"); + return 0; + } + } candidate_count = 0; - tuple_count = PQntuples(res); for (i=0; i<=tuple_count; i++) { char *member_id, *suggestion_id; if (i