liquid_feedback_core
changeset 345:2ea60e88265a
Compatibility for PostgreSQL 8.4 in lf_update.c
author | jbe |
---|---|
date | Thu Feb 21 20:01:28 2013 +0100 (2013-02-21) |
parents | 978950dd9e32 |
children | 6c8209b711af |
files | lf_update.c |
line diff
1.1 --- a/lf_update.c Thu Feb 21 18:03:15 2013 +0100 1.2 +++ b/lf_update.c Thu Feb 21 20:01:28 2013 +0100 1.3 @@ -3,6 +3,26 @@ 1.4 #include <string.h> 1.5 #include <libpq-fe.h> 1.6 1.7 +static char *escapeLiteral(PGconn *conn, const char *str, size_t len) { 1.8 + // provides compatibility for PostgreSQL versions prior 9.0 1.9 + // in future: return PQescapeLiteral(conn, str, len); 1.10 + char *res; 1.11 + size_t res_len; 1.12 + res = malloc(2*len+3); 1.13 + res[0] = '\''; 1.14 + res_len = PQescapeStringConn(conn, res+1, str, len, NULL); 1.15 + res[res_len+1] = '\''; 1.16 + res[res_len+2] = 0; 1.17 + return res; 1.18 +} 1.19 + 1.20 +static void freemem(void *ptr) { 1.21 + // to be used for "escapeLiteral" function 1.22 + // provides compatibility for PostgreSQL versions prior 9.0 1.23 + // in future: PQfreemem(ptr); 1.24 + free(ptr); 1.25 +} 1.26 + 1.27 int main(int argc, char **argv) { 1.28 1.29 // variable declarations: 1.30 @@ -117,7 +137,7 @@ 1.31 PGresult *res2, *old_res2; 1.32 int j; 1.33 issue_id = PQgetvalue(res, i, 0); 1.34 - escaped_issue_id = PQescapeLiteral(db, issue_id, strlen(issue_id)); 1.35 + escaped_issue_id = escapeLiteral(db, issue_id, strlen(issue_id)); 1.36 old_res2 = NULL; 1.37 for (j=0; ; j++) { 1.38 if (j >= 20) { // safety to avoid endless loops 1.39 @@ -138,15 +158,15 @@ 1.40 } else { 1.41 char *persist, *escaped_persist, *cmd; 1.42 persist = PQgetvalue(old_res2, 0, 0); 1.43 - escaped_persist = PQescapeLiteral(db, persist, strlen(persist)); 1.44 + escaped_persist = escapeLiteral(db, persist, strlen(persist)); 1.45 if (asprintf(&cmd, "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT \"check_issue\"(%s, %s::\"check_issue_persistence\")", escaped_issue_id, escaped_persist) < 0) { 1.46 - PQfreemem(escaped_persist); 1.47 + freemem(escaped_persist); 1.48 fprintf(stderr, "Could not prepare query string in memory.\n"); 1.49 err = 1; 1.50 PQclear(old_res2); 1.51 break; 1.52 } 1.53 - PQfreemem(escaped_persist); 1.54 + freemem(escaped_persist); 1.55 res2 = PQexec(db, cmd); 1.56 free(cmd); 1.57 PQclear(old_res2); 1.58 @@ -172,7 +192,7 @@ 1.59 } 1.60 } 1.61 } 1.62 - PQfreemem(escaped_issue_id); 1.63 + freemem(escaped_issue_id); 1.64 } 1.65 PQclear(res); 1.66 }