[BACK]Return to mandocdb.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mandocdb.c between version 1.51 and 1.52

version 1.51, 2012/06/08 12:05:27 version 1.52, 2012/06/08 15:06:28
Line 60 
Line 60 
                 fprintf(stderr, ": %s\n", (_f)); \                  fprintf(stderr, ": %s\n", (_f)); \
         } while (/* CONSTCOND */ 0)          } while (/* CONSTCOND */ 0)
   
   #define SQL_EXEC(_v) \
           if (SQLITE_OK != sqlite3_exec(db, (_v), NULL, NULL, NULL)) \
                   fprintf(stderr, "%s\n", sqlite3_errmsg(db))
   #define SQL_BIND_TEXT(_s, _i, _v) \
           if (SQLITE_OK != sqlite3_bind_text \
                   ((_s), (_i)++, (_v), -1, SQLITE_STATIC)) \
                   fprintf(stderr, "%s\n", sqlite3_errmsg(db))
   #define SQL_BIND_INT(_s, _i, _v) \
           if (SQLITE_OK != sqlite3_bind_int \
                   ((_s), (_i)++, (_v))) \
                   fprintf(stderr, "%s\n", sqlite3_errmsg(db))
   #define SQL_BIND_INT64(_s, _i, _v) \
           if (SQLITE_OK != sqlite3_bind_int64 \
                   ((_s), (_i)++, (_v))) \
                   fprintf(stderr, "%s\n", sqlite3_errmsg(db))
   #define SQL_STEP(_s) \
           if (SQLITE_DONE != sqlite3_step((_s))) \
                   fprintf(stderr, "%s\n", sqlite3_errmsg(db))
   
 enum    op {  enum    op {
         OP_DEFAULT = 0, /* new dbs from dir list or default config */          OP_DEFAULT = 0, /* new dbs from dir list or default config */
         OP_CONFFILE, /* new databases from custom config file */          OP_CONFFILE, /* new databases from custom config file */
Line 479  main(int argc, char *argv[])
Line 498  main(int argc, char *argv[])
                                 goto out;                                  goto out;
                         if (0 == dbopen(dirs.paths[j], 0))                          if (0 == dbopen(dirs.paths[j], 0))
                                 goto out;                                  goto out;
   
                           /*
                            * Since we're opening up a new database, we can
                            * turn off synchronous mode for much better
                            * performance.
                            */
                           SQL_EXEC("PRAGMA synchronous = OFF");
   
                         if (0 == ofmerge(mc, mp, dirs.paths[j]))                          if (0 == ofmerge(mc, mp, dirs.paths[j]))
                                 goto out;                                  goto out;
                         dbclose(dirs.paths[j], 0);                          dbclose(dirs.paths[j], 0);
Line 1768  dbindex(struct mchars *mc, int form, 
Line 1795  dbindex(struct mchars *mc, int form, 
         struct str      *key;          struct str      *key;
         const char      *desc;          const char      *desc;
         int64_t          recno;          int64_t          recno;
           size_t           i;
   
         DEBUG(of->file, base, "Adding to index");          DEBUG(of->file, base, "Adding to index");
   
Line 1783  dbindex(struct mchars *mc, int form, 
Line 1811  dbindex(struct mchars *mc, int form, 
                 desc = key->utf8;                  desc = key->utf8;
         }          }
   
         sqlite3_exec(db, "BEGIN TRANSACTION", NULL, NULL, NULL);          SQL_EXEC("BEGIN TRANSACTION");
   
         sqlite3_bind_text          i = 1;
                 (stmts[STMT_INSERT_DOC], 1,          SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, of->file);
                  of->file, -1, SQLITE_STATIC);          SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, of->sec);
         sqlite3_bind_text          SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, of->arch);
                 (stmts[STMT_INSERT_DOC], 2,          SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, desc);
                  of->sec, -1, SQLITE_STATIC);          SQL_BIND_INT(stmts[STMT_INSERT_DOC], i, form);
         sqlite3_bind_text          SQL_STEP(stmts[STMT_INSERT_DOC]);
                 (stmts[STMT_INSERT_DOC], 3,  
                  of->arch, -1, SQLITE_STATIC);  
         sqlite3_bind_text  
                 (stmts[STMT_INSERT_DOC], 4,  
                  desc, -1, SQLITE_STATIC);  
         sqlite3_bind_int  
                 (stmts[STMT_INSERT_DOC], 5, form);  
         sqlite3_step(stmts[STMT_INSERT_DOC]);  
         recno = sqlite3_last_insert_rowid(db);          recno = sqlite3_last_insert_rowid(db);
         sqlite3_reset(stmts[STMT_INSERT_DOC]);          sqlite3_reset(stmts[STMT_INSERT_DOC]);
   
Line 1807  dbindex(struct mchars *mc, int form, 
Line 1827  dbindex(struct mchars *mc, int form, 
                 assert(key->of == of);                  assert(key->of == of);
                 if (NULL == key->utf8)                  if (NULL == key->utf8)
                         utf8key(mc, key);                          utf8key(mc, key);
                 sqlite3_bind_int64                  i = 1;
                         (stmts[STMT_INSERT_KEY], 1, key->mask);                  SQL_BIND_INT64(stmts[STMT_INSERT_KEY], i, key->mask);
                 sqlite3_bind_text                  SQL_BIND_TEXT(stmts[STMT_INSERT_KEY], i, key->utf8);
                         (stmts[STMT_INSERT_KEY], 2,                  SQL_BIND_INT64(stmts[STMT_INSERT_KEY], i, recno);
                          key->utf8, -1, SQLITE_STATIC);                  SQL_STEP(stmts[STMT_INSERT_KEY]);
                 sqlite3_bind_int64  
                         (stmts[STMT_INSERT_KEY], 3, recno);  
                 sqlite3_step(stmts[STMT_INSERT_KEY]);  
                 sqlite3_reset(stmts[STMT_INSERT_KEY]);                  sqlite3_reset(stmts[STMT_INSERT_KEY]);
         }          }
   
         sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL);          SQL_EXEC("END TRANSACTION");
   
 }  }
   
 static void  static void
 dbprune(const char *base)  dbprune(const char *base)
 {  {
         struct of       *of;          struct of       *of;
           size_t           i;
   
         if (nodb)          if (nodb)
                 return;                  return;
   
         for (of = ofs; NULL != of; of = of->next) {          for (of = ofs; NULL != of; of = of->next) {
                 sqlite3_bind_text                  i = 1;
                         (stmts[STMT_DELETE], 1,                  SQL_BIND_TEXT(stmts[STMT_DELETE], i, of->file);
                          of->file, -1, SQLITE_STATIC);                  SQL_STEP(stmts[STMT_DELETE]);
                 sqlite3_step(stmts[STMT_DELETE]);  
                 sqlite3_reset(stmts[STMT_DELETE]);                  sqlite3_reset(stmts[STMT_DELETE]);
                 DEBUG(of->file, base, "Deleted from index");                  DEBUG(of->file, base, "Deleted from index");
         }          }
Line 1901  dbopen(const char *base, int real)
Line 1917  dbopen(const char *base, int real)
         if ( ! real)          if ( ! real)
                 remove(file);                  remove(file);
   
         ofl = SQLITE_OPEN_PRIVATECACHE | SQLITE_OPEN_READWRITE |          ofl = SQLITE_OPEN_READWRITE |
                 (0 == real ? SQLITE_OPEN_EXCLUSIVE : 0);                  (0 == real ? SQLITE_OPEN_EXCLUSIVE : 0);
   
         rc = sqlite3_open_v2(file, &db, ofl, NULL);          rc = sqlite3_open_v2(file, &db, ofl, NULL);

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.52

CVSweb