summaryrefslogtreecommitdiff
path: root/src/pq/pq_eval.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-06-10 21:53:08 +0200
committerChristian Grothoff <christian@grothoff.org>2017-06-10 21:53:18 +0200
commitd71e2f3b35de7fcce36806bdad44ecf4114f6740 (patch)
tree7609a2455317e58ddbfcd6a48548306ca812ec2a /src/pq/pq_eval.c
parent55b06f18c66ede06a2cf437b652de3a7c75c902a (diff)
downloadgnunet-d71e2f3b35de7fcce36806bdad44ecf4114f6740.tar.gz
gnunet-d71e2f3b35de7fcce36806bdad44ecf4114f6740.zip
handle UNIQUE violation nicely
Diffstat (limited to 'src/pq/pq_eval.c')
-rw-r--r--src/pq/pq_eval.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/pq/pq_eval.c b/src/pq/pq_eval.c
index 9296dce2e..b19742bba 100644
--- a/src/pq/pq_eval.c
+++ b/src/pq/pq_eval.c
@@ -93,6 +93,23 @@ GNUNET_PQ_eval_result (PGconn *connection,
93 PQerrorMessage (connection)); 93 PQerrorMessage (connection));
94 return GNUNET_PQ_STATUS_SOFT_ERROR; 94 return GNUNET_PQ_STATUS_SOFT_ERROR;
95 } 95 }
96 if (0 == strcmp (sqlstate,
97 PQ_DIAG_SQLSTATE_UNIQUE_VIOLATION))
98 {
99 /* Likely no need to retry, INSERT of "same" data. */
100 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG,
101 "pq",
102 "Query `%s' failed with unique violation: %s/%s/%s/%s/%s\n",
103 statement_name,
104 PQresultErrorField (result,
105 PG_DIAG_MESSAGE_PRIMARY),
106 PQresultErrorField (result,
107 PG_DIAG_MESSAGE_DETAIL),
108 PQresultErrorMessage (result),
109 PQresStatus (PQresultStatus (result)),
110 PQerrorMessage (connection));
111 return GNUNET_PQ_STATUS_SUCCESS_NO_RESULTS;
112 }
96 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, 113 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
97 "pq", 114 "pq",
98 "Query `%s' failed with result: %s/%s/%s/%s/%s\n", 115 "Query `%s' failed with result: %s/%s/%s/%s/%s\n",
@@ -121,7 +138,10 @@ GNUNET_PQ_eval_result (PGconn *connection,
121 * @return status code from the result, mapping PQ status 138 * @return status code from the result, mapping PQ status
122 * codes to `enum GNUNET_PQ_QueryStatus`. If the 139 * codes to `enum GNUNET_PQ_QueryStatus`. If the
123 * statement was a DELETE or UPDATE statement, the 140 * statement was a DELETE or UPDATE statement, the
124 * number of affected rows is returned. 141 * number of affected rows is returned.; if the
142 * statment was an INSERT statement, and no row
143 * was added due to a UNIQUE violation, we return
144 * zero; if INSERT was successful, we return one.
125 */ 145 */
126enum GNUNET_PQ_QueryStatus 146enum GNUNET_PQ_QueryStatus
127GNUNET_PQ_eval_prepared_non_select (PGconn *connection, 147GNUNET_PQ_eval_prepared_non_select (PGconn *connection,