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

Diff for /mandoc/mandocdb.c between version 1.134 and 1.137

version 1.134, 2014/04/13 20:55:45 version 1.137, 2014/04/16 21:36:18
Line 100  struct inodev {
Line 100  struct inodev {
   
 struct  mpage {  struct  mpage {
         struct inodev    inodev;  /* used for hashing routine */          struct inodev    inodev;  /* used for hashing routine */
         int64_t          recno;   /* id in mpages SQL table */          int64_t          pageid;  /* pageid in mpages SQL table */
         enum form        form;    /* format from file content */          enum form        form;    /* format from file content */
         char            *sec;     /* section from file content */          char            *sec;     /* section from file content */
         char            *arch;    /* architecture from file content */          char            *arch;    /* architecture from file content */
Line 1099  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1099  mpages_merge(struct mchars *mc, struct mparse *mp)
                                          * to the target.                                           * to the target.
                                          */                                           */
   
                                         if (mpage_dest->recno)                                          if (mpage_dest->pageid)
                                                 dbadd_mlink(mlink);                                                  dbadd_mlink(mlink);
   
                                         if (NULL == mlink->next)                                          if (NULL == mlink->next)
Line 1154  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1154  mpages_merge(struct mchars *mc, struct mparse *mp)
                         putkey(mpage, mlink->name, NAME_FILE);                          putkey(mpage, mlink->name, NAME_FILE);
                 }                  }
   
                   assert(NULL == mpage->desc);
                 if (NULL != mdoc) {                  if (NULL != mdoc) {
                         if (NULL != (cp = mdoc_meta(mdoc)->name))                          if (NULL != (cp = mdoc_meta(mdoc)->name))
                                 putkey(mpage, cp, NAME_HEAD);                                  putkey(mpage, cp, NAME_HEAD);
                         assert(NULL == mpage->desc);  
                         parse_mdoc(mpage, mdoc_node(mdoc));                          parse_mdoc(mpage, mdoc_node(mdoc));
                         if (NULL == mpage->desc)  
                                 mpage->desc = mandoc_strdup(  
                                     mpage->mlinks->name);  
                 } else if (NULL != man)                  } else if (NULL != man)
                         parse_man(mpage, man_node(man));                          parse_man(mpage, man_node(man));
                 else                  else
                         parse_cat(mpage, fd[0]);                          parse_cat(mpage, fd[0]);
                   if (NULL == mpage->desc)
                           mpage->desc = mandoc_strdup(mpage->mlinks->name);
   
                 if (warnings && !use_all)                  if (warnings && !use_all)
                         for (mlink = mpage->mlinks; mlink;                          for (mlink = mpage->mlinks; mlink;
Line 1302  parse_cat(struct mpage *mpage, int fd)
Line 1301  parse_cat(struct mpage *mpage, int fd)
                 if (warnings)                  if (warnings)
                         say(mpage->mlinks->file,                          say(mpage->mlinks->file,
                             "Cannot find NAME section");                              "Cannot find NAME section");
                 assert(NULL == mpage->desc);  
                 mpage->desc = mandoc_strdup(mpage->mlinks->name);  
                 fclose(stream);                  fclose(stream);
                 free(title);                  free(title);
                 return;                  return;
Line 1342  parse_cat(struct mpage *mpage, int fd)
Line 1339  parse_cat(struct mpage *mpage, int fd)
                 plen -= 2;                  plen -= 2;
         }          }
   
         assert(NULL == mpage->desc);  
         mpage->desc = mandoc_strdup(p);          mpage->desc = mandoc_strdup(p);
         fclose(stream);          fclose(stream);
         free(title);          free(title);
Line 1482  parse_man(struct mpage *mpage, const struct man_node *
Line 1478  parse_man(struct mpage *mpage, const struct man_node *
                         while (' ' == *start)                          while (' ' == *start)
                                 start++;                                  start++;
   
                         assert(NULL == mpage->desc);  
                         mpage->desc = mandoc_strdup(start);                          mpage->desc = mandoc_strdup(start);
                         free(title);                          free(title);
                         return;                          return;
Line 1897  dbadd_mlink(const struct mlink *mlink)
Line 1892  dbadd_mlink(const struct mlink *mlink)
         SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mlink->dsec);          SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mlink->dsec);
         SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mlink->arch);          SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mlink->arch);
         SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mlink->name);          SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mlink->name);
         SQL_BIND_INT64(stmts[STMT_INSERT_LINK], i, mlink->mpage->recno);          SQL_BIND_INT64(stmts[STMT_INSERT_LINK], i, mlink->mpage->pageid);
         SQL_STEP(stmts[STMT_INSERT_LINK]);          SQL_STEP(stmts[STMT_INSERT_LINK]);
         sqlite3_reset(stmts[STMT_INSERT_LINK]);          sqlite3_reset(stmts[STMT_INSERT_LINK]);
 }  }
Line 1949  dbadd(struct mpage *mpage, struct mchars *mc)
Line 1944  dbadd(struct mpage *mpage, struct mchars *mc)
         SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->desc);          SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->desc);
         SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, FORM_SRC == mpage->form);          SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, FORM_SRC == mpage->form);
         SQL_STEP(stmts[STMT_INSERT_PAGE]);          SQL_STEP(stmts[STMT_INSERT_PAGE]);
         mpage->recno = sqlite3_last_insert_rowid(db);          mpage->pageid = sqlite3_last_insert_rowid(db);
         sqlite3_reset(stmts[STMT_INSERT_PAGE]);          sqlite3_reset(stmts[STMT_INSERT_PAGE]);
   
         while (NULL != mlink) {          while (NULL != mlink) {
Line 1966  dbadd(struct mpage *mpage, struct mchars *mc)
Line 1961  dbadd(struct mpage *mpage, struct mchars *mc)
                 i = 1;                  i = 1;
                 SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, key->mask);                  SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, key->mask);
                 SQL_BIND_TEXT(stmts[STMT_INSERT_NAME], i, key->rendered);                  SQL_BIND_TEXT(stmts[STMT_INSERT_NAME], i, key->rendered);
                 SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, mpage->recno);                  SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, mpage->pageid);
                 SQL_STEP(stmts[STMT_INSERT_NAME]);                  SQL_STEP(stmts[STMT_INSERT_NAME]);
                 sqlite3_reset(stmts[STMT_INSERT_NAME]);                  sqlite3_reset(stmts[STMT_INSERT_NAME]);
                 if (key->rendered != key->key)                  if (key->rendered != key->key)
Line 1981  dbadd(struct mpage *mpage, struct mchars *mc)
Line 1976  dbadd(struct mpage *mpage, struct mchars *mc)
                 i = 1;                  i = 1;
                 SQL_BIND_INT64(stmts[STMT_INSERT_KEY], i, key->mask);                  SQL_BIND_INT64(stmts[STMT_INSERT_KEY], i, key->mask);
                 SQL_BIND_TEXT(stmts[STMT_INSERT_KEY], i, key->rendered);                  SQL_BIND_TEXT(stmts[STMT_INSERT_KEY], i, key->rendered);
                 SQL_BIND_INT64(stmts[STMT_INSERT_KEY], i, mpage->recno);                  SQL_BIND_INT64(stmts[STMT_INSERT_KEY], i, mpage->pageid);
                 SQL_STEP(stmts[STMT_INSERT_KEY]);                  SQL_STEP(stmts[STMT_INSERT_KEY]);
                 sqlite3_reset(stmts[STMT_INSERT_KEY]);                  sqlite3_reset(stmts[STMT_INSERT_KEY]);
                 if (key->rendered != key->key)                  if (key->rendered != key->key)
Line 2177  create_tables:
Line 2172  create_tables:
         sql = "CREATE TABLE \"mpages\" (\n"          sql = "CREATE TABLE \"mpages\" (\n"
               " \"desc\" TEXT NOT NULL,\n"                " \"desc\" TEXT NOT NULL,\n"
               " \"form\" INTEGER NOT NULL,\n"                " \"form\" INTEGER NOT NULL,\n"
               " \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n"                " \"pageid\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n"
               ");\n"                ");\n"
               "\n"                "\n"
               "CREATE TABLE \"mlinks\" (\n"                "CREATE TABLE \"mlinks\" (\n"
               " \"sec\" TEXT NOT NULL,\n"                " \"sec\" TEXT NOT NULL,\n"
               " \"arch\" TEXT NOT NULL,\n"                " \"arch\" TEXT NOT NULL,\n"
               " \"name\" TEXT NOT NULL,\n"                " \"name\" TEXT NOT NULL,\n"
               " \"pageid\" INTEGER NOT NULL REFERENCES mpages(id) "                " \"pageid\" INTEGER NOT NULL REFERENCES mpages(pageid) "
                 "ON DELETE CASCADE\n"                  "ON DELETE CASCADE\n"
               ");\n"                ");\n"
                 "CREATE INDEX mlinks_pageid_idx ON mlinks (pageid);\n"
               "\n"                "\n"
               "CREATE TABLE \"names\" (\n"                "CREATE TABLE \"names\" (\n"
               " \"bits\" INTEGER NOT NULL,\n"                " \"bits\" INTEGER NOT NULL,\n"
               " \"name\" TEXT NOT NULL,\n"                " \"name\" TEXT NOT NULL,\n"
               " \"pageid\" INTEGER NOT NULL REFERENCES mpages(id) "                " \"pageid\" INTEGER NOT NULL REFERENCES mpages(pageid) "
                 "ON DELETE CASCADE\n"                  "ON DELETE CASCADE\n"
               ");\n"                ");\n"
               "\n"                "\n"
               "CREATE TABLE \"keys\" (\n"                "CREATE TABLE \"keys\" (\n"
               " \"bits\" INTEGER NOT NULL,\n"                " \"bits\" INTEGER NOT NULL,\n"
               " \"key\" TEXT NOT NULL,\n"                " \"key\" TEXT NOT NULL,\n"
               " \"pageid\" INTEGER NOT NULL REFERENCES mpages(id) "                " \"pageid\" INTEGER NOT NULL REFERENCES mpages(pageid) "
                 "ON DELETE CASCADE\n"                  "ON DELETE CASCADE\n"
               ");\n";                ");\n"
                 "CREATE INDEX keys_pageid_idx ON keys (pageid);\n";
   
         if (SQLITE_OK != sqlite3_exec(db, sql, NULL, NULL, NULL)) {          if (SQLITE_OK != sqlite3_exec(db, sql, NULL, NULL, NULL)) {
                 exitcode = (int)MANDOCLEVEL_SYSERR;                  exitcode = (int)MANDOCLEVEL_SYSERR;
Line 2210  create_tables:
Line 2207  create_tables:
   
 prepare_statements:  prepare_statements:
         SQL_EXEC("PRAGMA foreign_keys = ON");          SQL_EXEC("PRAGMA foreign_keys = ON");
         sql = "DELETE FROM mpages WHERE id IN "          sql = "DELETE FROM mpages WHERE pageid IN "
                 "(SELECT pageid FROM mlinks WHERE "                  "(SELECT pageid FROM mlinks WHERE "
                 "sec=? AND arch=? AND name=?)";                  "sec=? AND arch=? AND name=?)";
         sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_DELETE_PAGE], NULL);          sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_DELETE_PAGE], NULL);

Legend:
Removed from v.1.134  
changed lines
  Added in v.1.137

CVSweb