sqlite hintsdb: safer create of table
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 7 Jun 2024 19:12:27 +0000 (20:12 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Fri, 7 Jun 2024 19:12:27 +0000 (20:12 +0100)
src/src/dbfn.c
src/src/hintsdb.h

index 6b2027aa9fefa2b561ce4aafa78e9a0124c4a726..5f30ccf58760c1ad7652e0c34a251f48163137f7 100644 (file)
@@ -67,6 +67,8 @@ Arguments:
   name     The single-component name of one of Exim's database files.
   flags    Either O_RDONLY or O_RDWR, indicating the type of open required;
              O_RDWR implies "create if necessary"
   name     The single-component name of one of Exim's database files.
   flags    Either O_RDONLY or O_RDWR, indicating the type of open required;
              O_RDWR implies "create if necessary"
+XXX this is a mess.  hintsdb.h has grown lots of code expecting O_CREAT
+XXX with the obvious semantics, and not that described above.
   dbblock  Points to an open_db block to be filled in.
   lof      If TRUE, write to the log for actual open failures (locking failures
            are always logged).
   dbblock  Points to an open_db block to be filled in.
   lof      If TRUE, write to the log for actual open failures (locking failures
            are always logged).
index 545c83dbd74467e72f1ef5b2dde23b41af03a02c..17b5c243c07d764d355909e84249bfccb02ca2ba 100644 (file)
@@ -87,7 +87,8 @@ if ((ret = sqlite3_open_v2(CCS name, &dbp, sflags, NULL)) == SQLITE_OK)
   sqlite3_busy_timeout(dbp, 5000);
   if (flags & O_CREAT)
     ret == sqlite3_exec(dbp,
   sqlite3_busy_timeout(dbp, 5000);
   if (flags & O_CREAT)
     ret == sqlite3_exec(dbp,
-           "CREATE TABLE tbl (ky TEXT PRIMARY KEY, dat BLOB);", NULL, NULL, NULL);
+           "CREATE TABLE IF NOT EXISTS tbl (ky TEXT PRIMARY KEY, dat BLOB);",
+           NULL, NULL, NULL);
   }
 //else
 //  fprintf(stderr, "sqlite3_open_v2: %s\n", sqlite3_errmsg(dbp));
   }
 //else
 //  fprintf(stderr, "sqlite3_open_v2: %s\n", sqlite3_errmsg(dbp));