diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-01-06 03:52:13 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-01-06 03:52:13 +0000 |
commit | 64f5d2e4e90fd817523e78c27a8ca9e758dc909d (patch) | |
tree | 684f847525f82c95870dc245169276285547407d | |
parent | bde6b6e5fe1b391dac65511440cb88c4501b17c6 (diff) | |
download | mandoc-64f5d2e4e90fd817523e78c27a8ca9e758dc909d.tar.gz |
Remove the redundant "file" column from the "mlinks" table.
The contents can easily be reconstructed from sec, arch, name, form.
Shrinks the database by another 3% in standard mode and 9% in -Q mode.
-rw-r--r-- | mandocdb.c | 4 | ||||
-rw-r--r-- | mansearch.c | 27 |
2 files changed, 19 insertions, 12 deletions
@@ -1756,7 +1756,6 @@ dbindex(const struct mpage *mpage, struct mchars *mc) for (mlink = mpage->mlinks; mlink; mlink = mlink->next) { i = 1; - SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mlink->file); 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->name); @@ -1890,7 +1889,6 @@ dbopen(int real) ");\n" "\n" "CREATE TABLE \"mlinks\" (\n" - " \"file\" TEXT NOT NULL,\n" " \"sec\" TEXT NOT NULL,\n" " \"arch\" TEXT NOT NULL,\n" " \"name\" TEXT NOT NULL,\n" @@ -1923,7 +1921,7 @@ prepare_statements: "(form) VALUES (?)"; sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_PAGE], NULL); sql = "INSERT INTO mlinks " - "(file,sec,arch,name,pageid) VALUES (?,?,?,?,?)"; + "(sec,arch,name,pageid) VALUES (?,?,?,?)"; sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_LINK], NULL); sql = "INSERT INTO keys " "(bits,key,pageid) VALUES (?,?,?)"; diff --git a/mansearch.c b/mansearch.c index 835cd436..6d0c49e7 100644 --- a/mansearch.c +++ b/mansearch.c @@ -125,7 +125,8 @@ static const struct type types[] = { }; static void buildnames(struct manpage *, sqlite3 *, - sqlite3_stmt *, uint64_t, const char *); + sqlite3_stmt *, uint64_t, + const char *, int form); static char *buildoutput(sqlite3 *, sqlite3_stmt *, uint64_t, uint64_t); static void *hash_alloc(size_t, void *); @@ -319,7 +320,8 @@ mansearch(const struct mansearch *search, } mpage = *res + cur; mpage->form = mp->form; - buildnames(mpage, db, s, mp->id, paths->paths[i]); + buildnames(mpage, db, s, mp->id, + paths->paths[i], mp->form); mpage->output = outbit ? buildoutput(db, s2, mp->id, outbit) : NULL; @@ -344,10 +346,10 @@ out: static void buildnames(struct manpage *mpage, sqlite3 *db, sqlite3_stmt *s, - uint64_t id, const char *path) + uint64_t id, const char *path, int form) { char *newnames; - const char *oldnames, *sep1, *name, *sec, *sep2, *arch; + const char *oldnames, *sep1, *name, *sec, *sep2, *arch, *fsec; size_t i; int c; @@ -365,9 +367,9 @@ buildnames(struct manpage *mpage, sqlite3 *db, sqlite3_stmt *s, oldnames = mpage->names; sep1 = ", "; } - sec = sqlite3_column_text(s, 1); - arch = sqlite3_column_text(s, 2); - name = sqlite3_column_text(s, 3); + sec = sqlite3_column_text(s, 0); + arch = sqlite3_column_text(s, 1); + name = sqlite3_column_text(s, 2); sep2 = '\0' == *arch ? "" : "/"; if (-1 == asprintf(&newnames, "%s%s%s(%s%s%s)", oldnames, sep1, name, sec, sep2, arch)) { @@ -382,8 +384,15 @@ buildnames(struct manpage *mpage, sqlite3 *db, sqlite3_stmt *s, if (NULL != mpage->file) continue; - name = sqlite3_column_text(s, 0); - if (-1 == asprintf(&mpage->file, "%s/%s", path, name)) { + if (form) { + sep1 = "man"; + fsec = sec; + } else { + sep1 = "cat"; + fsec = "0"; + } + if (-1 == asprintf(&mpage->file, "%s/%s%s%s%s/%s.%s", + path, sep1, sec, sep2, arch, name, fsec)) { perror(0); exit((int)MANDOCLEVEL_SYSERR); } |