diff src/postgres.sml @ 1938:d02c1a0d8082

Proper handling of serialization failures during SQL COMMIT
author Adam Chlipala <adam@chlipala.net>
date Mon, 23 Dec 2013 15:59:17 +0000
parents 6745eafff617
children 0992323fa264
line wrap: on
line diff
--- a/src/postgres.sml	Tue Dec 17 20:12:33 2013 -0500
+++ b/src/postgres.sml	Mon Dec 23 15:59:17 2013 +0000
@@ -438,7 +438,23 @@
          newline,
          newline,
          string "if (PQresultStatus(res) != PGRES_COMMAND_OK) {",
-         box [string "PQclear(res);",
+         box [string "if (!strcmp(PQresultErrorField(res, PG_DIAG_SQLSTATE), \"40001\")) {",
+              box [newline,
+                   string "PQclear(res);",
+                   newline,
+                   string "return -1;",
+                   newline],
+              string "}",
+              newline,
+              string "if (!strcmp(PQresultErrorField(res, PG_DIAG_SQLSTATE), \"40P01\")) {",
+              box [newline,
+                   string "PQclear(res);",
+                   newline,
+                   string "return -1;",
+                   newline],
+              string "}",
+              newline,
+	      string "PQclear(res);",
               newline,
               string "return 1;",
               newline],