version 1.80, 2013/12/26 23:35:59 |
version 1.81, 2013/12/27 01:16:54 |
|
|
}; |
}; |
|
|
enum stmt { |
enum stmt { |
STMT_DELETE = 0, /* delete manpage */ |
STMT_DELETE_PAGE = 0, /* delete mpage */ |
STMT_INSERT_DOC, /* insert manpage */ |
STMT_INSERT_PAGE, /* insert mpage */ |
STMT_INSERT_KEY, /* insert parsed key */ |
STMT_INSERT_LINK, /* insert mlink */ |
|
STMT_INSERT_KEY, /* insert parsed key */ |
STMT__MAX |
STMT__MAX |
}; |
}; |
|
|
Line 1814 dbindex(struct mchars *mc, int form, const struct mpag |
|
Line 1815 dbindex(struct mchars *mc, int form, const struct mpag |
|
SQL_EXEC("BEGIN TRANSACTION"); |
SQL_EXEC("BEGIN TRANSACTION"); |
|
|
i = 1; |
i = 1; |
SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, mpage->file); |
/* |
SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, mpage->sec); |
* XXX The following three lines are obsolete |
SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, mpage->arch); |
* and only kept for backward compatibility |
SQL_BIND_TEXT(stmts[STMT_INSERT_DOC], i, desc); |
* until apropos(1) and friends have caught up. |
SQL_BIND_INT(stmts[STMT_INSERT_DOC], i, form); |
*/ |
SQL_STEP(stmts[STMT_INSERT_DOC]); |
SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->file); |
|
SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->sec); |
|
SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->arch); |
|
SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, desc); |
|
SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, form); |
|
SQL_STEP(stmts[STMT_INSERT_PAGE]); |
recno = sqlite3_last_insert_rowid(db); |
recno = sqlite3_last_insert_rowid(db); |
sqlite3_reset(stmts[STMT_INSERT_DOC]); |
sqlite3_reset(stmts[STMT_INSERT_PAGE]); |
|
|
|
i = 1; |
|
SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mpage->sec); |
|
SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mpage->arch); |
|
SQL_BIND_TEXT(stmts[STMT_INSERT_LINK], i, mpage->file); |
|
SQL_BIND_INT64(stmts[STMT_INSERT_LINK], i, recno); |
|
SQL_STEP(stmts[STMT_INSERT_LINK]); |
|
sqlite3_reset(stmts[STMT_INSERT_LINK]); |
|
|
for (key = ohash_first(&strings, &slot); NULL != key; |
for (key = ohash_first(&strings, &slot); NULL != key; |
key = ohash_next(&strings, &slot)) { |
key = ohash_next(&strings, &slot)) { |
assert(key->mpage == mpage); |
assert(key->mpage == mpage); |
|
|
mpage = ohash_first(&mpages, &slot); |
mpage = ohash_first(&mpages, &slot); |
while (NULL != mpage) { |
while (NULL != mpage) { |
i = 1; |
i = 1; |
SQL_BIND_TEXT(stmts[STMT_DELETE], i, mpage->file); |
SQL_BIND_TEXT(stmts[STMT_DELETE_PAGE], i, mpage->file); |
SQL_STEP(stmts[STMT_DELETE]); |
SQL_STEP(stmts[STMT_DELETE_PAGE]); |
sqlite3_reset(stmts[STMT_DELETE]); |
sqlite3_reset(stmts[STMT_DELETE_PAGE]); |
if (verb) |
if (verb) |
say(mpage->file, "Deleted from index"); |
say(mpage->file, "Deleted from index"); |
mpage = ohash_next(&mpages, &slot); |
mpage = ohash_next(&mpages, &slot); |
Line 1940 dbopen(int real) |
|
Line 1954 dbopen(int real) |
|
return(0); |
return(0); |
} |
} |
|
|
sql = "CREATE TABLE \"docs\" (\n" |
/* |
|
* XXX The first three columns in table mpages are obsolete |
|
* and only kept for backward compatibility |
|
* until apropos(1) and friends have caught up. |
|
*/ |
|
sql = "CREATE TABLE \"mpages\" (\n" |
" \"file\" TEXT NOT NULL,\n" |
" \"file\" TEXT NOT NULL,\n" |
" \"sec\" TEXT NOT NULL,\n" |
" \"sec\" TEXT NOT NULL,\n" |
" \"arch\" TEXT NOT NULL,\n" |
" \"arch\" TEXT NOT NULL,\n" |
Line 1949 dbopen(int real) |
|
Line 1968 dbopen(int real) |
|
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n" |
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n" |
");\n" |
");\n" |
"\n" |
"\n" |
|
"CREATE TABLE \"mlinks\" (\n" |
|
" \"sec\" TEXT NOT NULL,\n" |
|
" \"arch\" TEXT NOT NULL,\n" |
|
" \"name\" TEXT NOT NULL,\n" |
|
" \"pageid\" INTEGER NOT NULL REFERENCES mpages(id) " |
|
"ON DELETE CASCADE,\n" |
|
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\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" |
" \"docid\" INTEGER NOT NULL REFERENCES docs(id) " |
" \"pageid\" INTEGER NOT NULL REFERENCES mpages(id) " |
"ON DELETE CASCADE,\n" |
"ON DELETE CASCADE,\n" |
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n" |
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n" |
");\n" |
");\n" |
"\n" |
"\n" |
Line 1967 dbopen(int real) |
|
Line 1995 dbopen(int real) |
|
|
|
prepare_statements: |
prepare_statements: |
SQL_EXEC("PRAGMA foreign_keys = ON"); |
SQL_EXEC("PRAGMA foreign_keys = ON"); |
sql = "DELETE FROM docs where file=?"; |
sql = "DELETE FROM mpages where file=?"; |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_DELETE], NULL); |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_DELETE_PAGE], NULL); |
sql = "INSERT INTO docs " |
sql = "INSERT INTO mpages " |
"(file,sec,arch,desc,form) VALUES (?,?,?,?,?)"; |
"(file,sec,arch,desc,form) VALUES (?,?,?,?,?)"; |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_DOC], NULL); |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_PAGE], NULL); |
|
sql = "INSERT INTO mlinks " |
|
"(sec,arch,name,pageid) VALUES (?,?,?,?)"; |
|
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_LINK], NULL); |
sql = "INSERT INTO keys " |
sql = "INSERT INTO keys " |
"(bits,key,docid) VALUES (?,?,?)"; |
"(bits,key,pageid) VALUES (?,?,?)"; |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_KEY], NULL); |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_KEY], NULL); |
|
|
#ifndef __APPLE__ |
#ifndef __APPLE__ |