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    }

Impressum / About Us