diff src/cjr_print.sml @ 687:a3ddf05fb3e3

On start-up, delete/nullify rows mentioning clients or channels
author Adam Chlipala <adamc@hcoop.net>
date Thu, 02 Apr 2009 11:42:26 -0400
parents f0224c7f12bb
children 829887ca47a6
line wrap: on
line diff
--- a/src/cjr_print.sml	Thu Apr 02 10:57:14 2009 -0400
+++ b/src/cjr_print.sml	Thu Apr 02 11:42:26 2009 -0400
@@ -1937,128 +1937,138 @@
                             string x,
                             string " */",
                             newline]
-      | DDatabase (s, n) => box [string "static void uw_db_validate(uw_context);",
-                                 newline,
-                                 string "static void uw_db_prepare(uw_context);",
-                                 newline,
-                                 newline,
-                                 string "void uw_db_init(uw_context ctx) {",
-                                 newline,
-                                 string "PGconn *conn = PQconnectdb(\"",
-                                 string (String.toString s),
-                                 string "\");",
-                                 newline,
-                                 string "if (conn == NULL) uw_error(ctx, BOUNDED_RETRY, ",
-                                 string "\"libpq can't allocate a connection.\");",
-                                 newline,
-                                 string "if (PQstatus(conn) != CONNECTION_OK) {",
-                                 newline,
-                                 box [string "char msg[1024];",
-                                      newline,
-                                      string "strncpy(msg, PQerrorMessage(conn), 1024);",
-                                      newline,
-                                      string "msg[1023] = 0;",
-                                      newline,
-                                      string "PQfinish(conn);",
-                                      newline,
-                                      string "uw_error(ctx, BOUNDED_RETRY, ",
-                                      string "\"Connection to Postgres server failed: %s\", msg);"],
-                                 newline,
-                                 string "}",
-                                 newline,
-                                 string "uw_set_db(ctx, conn);",
-                                 newline,
-                                 string "uw_db_validate(ctx);",
-                                 newline,
-                                 string "uw_db_prepare(ctx);",
-                                 newline,
-                                 string "}",
-                                 newline,
-                                 newline,
-                                 string "void uw_db_close(uw_context ctx) {",
-                                 newline,
-                                 string "PQfinish(uw_get_db(ctx));",
-                                 newline,
-                                 string "}",
-                                 newline,
-                                 newline,
+      | DDatabase {name, expunge, initialize} =>
+        box [string "static void uw_db_validate(uw_context);",
+             newline,
+             string "static void uw_db_prepare(uw_context);",
+             newline,
+             newline,
+             string "void uw_db_init(uw_context ctx) {",
+             newline,
+             string "PGconn *conn = PQconnectdb(\"",
+             string (String.toString name),
+             string "\");",
+             newline,
+             string "if (conn == NULL) uw_error(ctx, BOUNDED_RETRY, ",
+             string "\"libpq can't allocate a connection.\");",
+             newline,
+             string "if (PQstatus(conn) != CONNECTION_OK) {",
+             newline,
+             box [string "char msg[1024];",
+                  newline,
+                  string "strncpy(msg, PQerrorMessage(conn), 1024);",
+                  newline,
+                  string "msg[1023] = 0;",
+                  newline,
+                  string "PQfinish(conn);",
+                  newline,
+                  string "uw_error(ctx, BOUNDED_RETRY, ",
+                  string "\"Connection to Postgres server failed: %s\", msg);"],
+             newline,
+             string "}",
+             newline,
+             string "uw_set_db(ctx, conn);",
+             newline,
+             string "uw_db_validate(ctx);",
+             newline,
+             string "uw_db_prepare(ctx);",
+             newline,
+             string "}",
+             newline,
+             newline,
+             string "void uw_db_close(uw_context ctx) {",
+             newline,
+             string "PQfinish(uw_get_db(ctx));",
+             newline,
+             string "}",
+             newline,
+             newline,
 
-                                 string "int uw_db_begin(uw_context ctx) {",
-                                 newline,
-                                 string "PGconn *conn = uw_get_db(ctx);",
-                                 newline,
-                                 string "PGresult *res = PQexec(conn, \"BEGIN ISOLATION LEVEL SERIALIZABLE\");",
-                                 newline,
-                                 newline,
-                                 string "if (res == NULL) return 1;",
-                                 newline,
-                                 newline,
-                                 string "if (PQresultStatus(res) != PGRES_COMMAND_OK) {",
-                                 box [string "PQclear(res);",
-                                      newline,
-                                      string "return 1;",
-                                      newline],
-                                 string "}",
-                                 newline,
-                                 string "return 0;",
-                                 newline,
-                                 string "}",
-                                 newline,
-                                 newline,
+             string "int uw_db_begin(uw_context ctx) {",
+             newline,
+             string "PGconn *conn = uw_get_db(ctx);",
+             newline,
+             string "PGresult *res = PQexec(conn, \"BEGIN ISOLATION LEVEL SERIALIZABLE\");",
+             newline,
+             newline,
+             string "if (res == NULL) return 1;",
+             newline,
+             newline,
+             string "if (PQresultStatus(res) != PGRES_COMMAND_OK) {",
+             box [string "PQclear(res);",
+                  newline,
+                  string "return 1;",
+                  newline],
+             string "}",
+             newline,
+             string "return 0;",
+             newline,
+             string "}",
+             newline,
+             newline,
 
-                                 string "int uw_db_commit(uw_context ctx) {",
-                                 newline,
-                                 string "PGconn *conn = uw_get_db(ctx);",
-                                 newline,
-                                 string "PGresult *res = PQexec(conn, \"COMMIT\");",
-                                 newline,
-                                 newline,
-                                 string "if (res == NULL) return 1;",
-                                 newline,
-                                 newline,
-                                 string "if (PQresultStatus(res) != PGRES_COMMAND_OK) {",
-                                 box [string "PQclear(res);",
-                                      newline,
-                                      string "return 1;",
-                                      newline],
-                                 string "}",
-                                 newline,
-                                 string "return 0;",
-                                 newline,
-                                 string "}",
-                                 newline,
-                                 newline,
+             string "int uw_db_commit(uw_context ctx) {",
+             newline,
+             string "PGconn *conn = uw_get_db(ctx);",
+             newline,
+             string "PGresult *res = PQexec(conn, \"COMMIT\");",
+             newline,
+             newline,
+             string "if (res == NULL) return 1;",
+             newline,
+             newline,
+             string "if (PQresultStatus(res) != PGRES_COMMAND_OK) {",
+             box [string "PQclear(res);",
+                  newline,
+                  string "return 1;",
+                  newline],
+             string "}",
+             newline,
+             string "return 0;",
+             newline,
+             string "}",
+             newline,
+             newline,
 
-                                 string "int uw_db_rollback(uw_context ctx) {",
-                                 newline,
-                                 string "PGconn *conn = uw_get_db(ctx);",
-                                 newline,
-                                 string "PGresult *res = PQexec(conn, \"ROLLBACK\");",
-                                 newline,
-                                 newline,
-                                 string "if (res == NULL) return 1;",
-                                 newline,
-                                 newline,
-                                 string "if (PQresultStatus(res) != PGRES_COMMAND_OK) {",
-                                 box [string "PQclear(res);",
-                                      newline,
-                                      string "return 1;",
-                                      newline],
-                                 string "}",
-                                 newline,
-                                 string "return 0;",
-                                 newline,
-                                 string "}",
-                                 newline,
-                                 newline,
+             string "int uw_db_rollback(uw_context ctx) {",
+             newline,
+             string "PGconn *conn = uw_get_db(ctx);",
+             newline,
+             string "PGresult *res = PQexec(conn, \"ROLLBACK\");",
+             newline,
+             newline,
+             string "if (res == NULL) return 1;",
+             newline,
+             newline,
+             string "if (PQresultStatus(res) != PGRES_COMMAND_OK) {",
+             box [string "PQclear(res);",
+                  newline,
+                  string "return 1;",
+                  newline],
+             string "}",
+             newline,
+             string "return 0;",
+             newline,
+             string "}",
+             newline,
+             newline,
 
-                                 string "void uw_expunger(uw_context ctx, uw_Basis_client cli) {",
-                                 newline,
-                                 box [p_enamed env n,
-                                      string "(ctx, cli);",
-                                      newline],
-                                 string "}",
-                                 newline]
+             string "void uw_expunger(uw_context ctx, uw_Basis_client cli) {",
+             newline,
+             box [p_enamed env expunge,
+                  string "(ctx, cli);",
+                  newline],
+             string "}",
+             newline,
+             newline,
+
+             string "void uw_initializer(uw_context ctx) {",
+             newline,
+             box [p_enamed env initialize,
+                  string "(ctx, uw_unit_v);",
+                  newline],
+             string "}",
+             newline]
 
       | DPreparedStatements [] =>
         box [string "static void uw_db_prepare(uw_context ctx) {",
@@ -2762,6 +2772,8 @@
                       string "int uw_db_rollback(uw_context ctx) { return 0; };",
                       newline,
                       string "void uw_expunger(uw_context ctx, uw_Basis_client cli) { };",
+                      newline,
+                      string "void uw_initializer(uw_context ctx) { };",
                       newline]]
     end