liquid_feedback_core
changeset 359:c37c0b4f2027
Write "final_suggestion_order_calculated" flag in "lf_update_suggestion_order"
author | jbe |
---|---|
date | Sun Mar 17 11:18:24 2013 +0100 (2013-03-17) |
parents | e22a4d2aea2d |
children | 47965760b1b8 |
files | lf_update_suggestion_order.c |
line diff
1.1 --- a/lf_update_suggestion_order.c Sun Mar 17 10:40:00 2013 +0100 1.2 +++ b/lf_update_suggestion_order.c Sun Mar 17 11:18:24 2013 +0100 1.3 @@ -143,13 +143,20 @@ 1.4 abort(); 1.5 } 1.6 1.7 -static int write_ranks(PGconn *db, char *escaped_initiative_id) { 1.8 +static int write_ranks(PGconn *db, char *escaped_initiative_id, int final) { 1.9 PGresult *res; 1.10 char *cmd; 1.11 int i; 1.12 - if (asprintf(&cmd, "BEGIN; UPDATE \"suggestion\" SET \"proportional_order\" = NULL WHERE \"initiative_id\" = %s", escaped_initiative_id) < 0) { 1.13 - fprintf(stderr, "Could not prepare query string in memory.\n"); 1.14 - abort(); 1.15 + if (final) { 1.16 + 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) { 1.17 + fprintf(stderr, "Could not prepare query string in memory.\n"); 1.18 + abort(); 1.19 + } 1.20 + } else { 1.21 + if (asprintf(&cmd, "BEGIN; UPDATE \"suggestion\" SET \"proportional_order\" = NULL WHERE \"initiative_id\" = %s", escaped_initiative_id) < 0) { 1.22 + fprintf(stderr, "Could not prepare query string in memory.\n"); 1.23 + abort(); 1.24 + } 1.25 } 1.26 res = PQexec(db, cmd); 1.27 free(cmd); 1.28 @@ -213,7 +220,7 @@ 1.29 } 1.30 } 1.31 1.32 -static int process_initiative(PGconn *db, PGresult *res, char *escaped_initiative_id) { 1.33 +static int process_initiative(PGconn *db, PGresult *res, char *escaped_initiative_id, int final) { 1.34 int err; 1.35 int ballot_count = 0; 1.36 struct ballot *ballots; 1.37 @@ -224,8 +231,19 @@ 1.38 char *old_member_id = NULL; 1.39 struct ballot *ballot; 1.40 int candidates_in_sections[4] = {0, }; 1.41 + tuple_count = PQntuples(res); 1.42 + if (!tuple_count) { 1.43 + if (final) { 1.44 + printf("No suggestions found, but marking initiative as finally calculated.\n"); 1.45 + err = write_ranks(db, escaped_initiative_id, final); 1.46 + printf("Done.\n"); 1.47 + return err; 1.48 + } else { 1.49 + printf("Nothing to do.\n"); 1.50 + return 0; 1.51 + } 1.52 + } 1.53 candidate_count = 0; 1.54 - tuple_count = PQntuples(res); 1.55 for (i=0; i<=tuple_count; i++) { 1.56 char *member_id, *suggestion_id; 1.57 if (i<tuple_count) { 1.58 @@ -336,7 +354,7 @@ 1.59 free(ballots); 1.60 1.61 printf("Writing ranks to database.\n"); 1.62 - err = write_ranks(db, escaped_initiative_id); 1.63 + err = write_ranks(db, escaped_initiative_id, final); 1.64 printf("Done.\n"); 1.65 1.66 free(candidates); 1.67 @@ -403,14 +421,20 @@ 1.68 fprintf(stderr, "Error while executing SQL command selecting initiatives to process:\n%s", PQresultErrorMessage(res)); 1.69 err = 1; 1.70 PQclear(res); 1.71 + } else if (PQnfields(res) < 2) { 1.72 + fprintf(stderr, "Too few columns returned by SQL command selecting initiatives to process.\n"); 1.73 + err = 1; 1.74 + PQclear(res); 1.75 } else { 1.76 count = PQntuples(res); 1.77 printf("Number of initiatives to process: %i\n", count); 1.78 for (i=0; i<count; i++) { 1.79 char *initiative_id, *escaped_initiative_id; 1.80 + int final; 1.81 char *cmd; 1.82 PGresult *res2; 1.83 initiative_id = PQgetvalue(res, i, 0); 1.84 + final = (PQgetvalue(res, i, 1)[0] == 't') ? 1 : 0; 1.85 printf("Processing initiative_id: %s\n", initiative_id); 1.86 escaped_initiative_id = escapeLiteral(db, initiative_id, strlen(initiative_id)); 1.87 if (!escaped_initiative_id) { 1.88 @@ -435,11 +459,7 @@ 1.89 err = 1; 1.90 PQclear(res2); 1.91 } else { 1.92 - if (PQntuples(res2) == 0) { 1.93 - printf("Nothing to do.\n"); 1.94 - } else { 1.95 - if (process_initiative(db, res2, escaped_initiative_id)) err = 1; 1.96 - } 1.97 + if (process_initiative(db, res2, escaped_initiative_id, final)) err = 1; 1.98 PQclear(res2); 1.99 } 1.100 freemem(escaped_initiative_id);