void get_papers_for_batch(PGconn *conn, struct batch *batch, char *electorate_table_name) /* load the batch structure pointed to by batch with paper data*/ { unsigned int i; PGresult *result; unsigned int num_rows,paper_id; result = SQL_query(conn, "SELECT id, " "index, " "supervisor_tick " "FROM paper " "WHERE batch_number= %u " "ORDER BY index;", batch->b.batch_number); num_rows = PQntuples(result); /* build a return structure */ for (i=0; i<num_rows; i++) { paper_id = atoi(PQgetvalue(result, i, 0)); batch->papers[i].p.index = atoi(PQgetvalue(result,i,1)); batch->papers[i].p.supervisor_tick = (*PQgetvalue(result, i, 2) == 't')?true:false; /* entries and sub-structures inserted into batch->papers */ batch->papers[i].entries = get_entries_for_paper(conn, paper_id,electorate_table_name); } PQclear(result); }
/* DDSv2C: Get Paper */ struct paper *get_paper(PGconn *conn, unsigned int batch_number, unsigned int paper_index) { struct paper *ret; unsigned int paper_id, electorate_code; char *electorate_name, *paper_table_name; struct predefined_batch *batch; /* get electorate code */ batch = resolve_batch_source(conn, batch_number); assert(batch); electorate_code = batch->electorate_code; /* get electorate name in order to access that Electorates paper and entry tables */ electorate_name = resolve_electorate_name(conn,electorate_code); paper_table_name = sprintf_malloc("%s_paper",electorate_name); /* find the (internal database) paper_id */ paper_id = SQL_singleton_int(conn, "SELECT id " "FROM %s " "WHERE batch_number = %u " "AND index = %u;", paper_table_name, batch_number, paper_index); ret = malloc(sizeof(*ret)); if (paper_id ==(unsigned int) -1) { /* new paper */ ret->p.index = paper_index; ret->p.supervisor_tick = false; ret->entries = NULL; } else { ret = malloc(sizeof(*ret)); ret->entries = get_entries_for_paper(conn, paper_id, electorate_name); } free(electorate_name); free(paper_table_name); free(batch); return ret; }
/* DDSv2C: Get Paper */ struct paper *get_paper(unsigned int batch_number, unsigned int paper_index) { PGconn *conn = connect_db_host(DATABASE_NAME, SERVER_ADDRESS); struct paper *ret; unsigned int paper_id, electorate_code; char *electorate_table_name; struct predefined_batch *batch; /* get electorate code */ batch = resolve_batch_source(conn, batch_number); electorate_code = batch->electorate_code; /* get electorate name in order to access that Electorates preference table */ electorate_table_name = resolve_electorate_name(conn,electorate_code); /* find the (internal database) paper_id */ paper_id = SQL_singleton_int(conn, "SELECT id " "FROM paper " "WHERE batch_number = %u " "AND index = %u;", batch_number, paper_index); ret = malloc(sizeof(*ret)); if (paper_id ==(unsigned int) -1) { /* new paper */ ret->p.index = paper_index; ret->p.supervisor_tick = false; ret->entries = NULL; } else { ret = malloc(sizeof(*ret)); ret->entries = get_entries_for_paper(conn, paper_id, electorate_table_name); } free(electorate_table_name); PQfinish(conn); return ret; }