]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandocdb.c
Improve error handling in dbopen(). If PRAGMA SQL statements fail,
[mandoc.git] / mandocdb.c
index 4e4c37c67e22d969fc895922b19a257bcb080a71..f9e04602e7d5df27d2d1377f29da8643ca88c743 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mandocdb.c,v 1.144 2014/04/23 21:06:41 schwarze Exp $ */
+/*     $Id: mandocdb.c,v 1.146 2014/04/27 23:08:56 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -1996,6 +1996,8 @@ dbadd(struct mpage *mpage, struct mchars *mc)
        mlink = mpage->mlinks;
 
        if (nodb) {
+               if (0 == debug)
+                       return;
                while (NULL != mlink) {
                        fputs(mlink->name, stdout);
                        if (NULL == mlink->next ||
@@ -2207,7 +2209,7 @@ dbopen(int real)
                rc = sqlite3_open_v2(MANDOC_DB, &db, ofl, NULL);
                if (SQLITE_OK != rc) {
                        exitcode = (int)MANDOCLEVEL_SYSERR;
-                       say(MANDOC_DB, "%s", sqlite3_errmsg(db));
+                       say(MANDOC_DB, "%s", sqlite3_errstr(rc));
                        return(0);
                }
                goto prepare_statements;
@@ -2221,7 +2223,7 @@ dbopen(int real)
                goto create_tables;
        if (MPARSE_QUICK & mparse_options) {
                exitcode = (int)MANDOCLEVEL_SYSERR;
-               say(MANDOC_DB "~", "%s", sqlite3_errmsg(db));
+               say(MANDOC_DB "~", "%s", sqlite3_errstr(rc));
                return(0);
        }
 
@@ -2237,7 +2239,7 @@ dbopen(int real)
        rc = sqlite3_open_v2(tempfilename, &db, ofl, NULL);
        if (SQLITE_OK != rc) {
                exitcode = (int)MANDOCLEVEL_SYSERR;
-               say("", "%s: %s", tempfilename, sqlite3_errmsg(db));
+               say("", "%s: %s", tempfilename, sqlite3_errstr(rc));
                return(0);
        }
 
@@ -2275,11 +2277,20 @@ create_tables:
        if (SQLITE_OK != sqlite3_exec(db, sql, NULL, NULL, NULL)) {
                exitcode = (int)MANDOCLEVEL_SYSERR;
                say(MANDOC_DB, "%s", sqlite3_errmsg(db));
+               sqlite3_close(db);
                return(0);
        }
 
 prepare_statements:
-       SQL_EXEC("PRAGMA foreign_keys = ON");
+       if (SQLITE_OK != sqlite3_exec(db,
+           "PRAGMA foreign_keys = ON", NULL, NULL, NULL)) {
+               exitcode = (int)MANDOCLEVEL_SYSERR;
+               say(MANDOC_DB, "PRAGMA foreign_keys: %s",
+                   sqlite3_errmsg(db));
+               sqlite3_close(db);
+               return(0);
+       }
+
        sql = "DELETE FROM mpages WHERE pageid IN "
                "(SELECT pageid FROM mlinks WHERE "
                "sec=? AND arch=? AND name=?)";
@@ -2303,8 +2314,14 @@ prepare_statements:
         * synchronous mode for much better performance.
         */
 
-       if (real)
-               SQL_EXEC("PRAGMA synchronous = OFF");
+       if (real && SQLITE_OK != sqlite3_exec(db,
+           "PRAGMA synchronous = OFF", NULL, NULL, NULL)) {
+               exitcode = (int)MANDOCLEVEL_SYSERR;
+               say(MANDOC_DB, "PRAGMA synchronous: %s",
+               sqlite3_errmsg(db));
+               sqlite3_close(db);
+               return(0);
+       }
 #endif
 
        return(1);