version 1.36, 2014/11/11 19:03:10 |
version 1.37, 2014/11/18 01:14:40 |
|
|
|
|
struct match { |
struct match { |
uint64_t pageid; /* identifier in database */ |
uint64_t pageid; /* identifier in database */ |
|
uint64_t bits; /* name type mask */ |
char *desc; /* manual page description */ |
char *desc; /* manual page description */ |
int form; /* bit field: formatted, zipped? */ |
int form; /* bit field: formatted, zipped? */ |
}; |
}; |
|
|
mp = mandoc_calloc(1, sizeof(struct match)); |
mp = mandoc_calloc(1, sizeof(struct match)); |
mp->pageid = pageid; |
mp->pageid = pageid; |
mp->form = sqlite3_column_int(s, 1); |
mp->form = sqlite3_column_int(s, 1); |
|
mp->bits = sqlite3_column_int64(s, 3); |
if (TYPE_Nd == outbit) |
if (TYPE_Nd == outbit) |
mp->desc = mandoc_strdup((const char *) |
mp->desc = mandoc_strdup((const char *) |
sqlite3_column_text(s, 0)); |
sqlite3_column_text(s, 0)); |
|
|
} |
} |
mpage = *res + cur; |
mpage = *res + cur; |
mpage->ipath = i; |
mpage->ipath = i; |
|
mpage->bits = mp->bits; |
mpage->sec = 10; |
mpage->sec = 10; |
mpage->form = mp->form; |
mpage->form = mp->form; |
buildnames(mpage, db, s, mp->pageid, |
buildnames(mpage, db, s, mp->pageid, |
|
|
|
|
mp1 = vp1; |
mp1 = vp1; |
mp2 = vp2; |
mp2 = vp2; |
diff = mp1->sec - mp2->sec; |
return( (diff = mp2->bits - mp1->bits) ? diff : |
return(diff ? diff : strcasecmp(mp1->names, mp2->names)); |
(diff = mp1->sec - mp2->sec) ? diff : |
|
strcasecmp(mp1->names, mp2->names)); |
} |
} |
|
|
static void |
static void |
|
|
size_t sz; |
size_t sz; |
int needop; |
int needop; |
|
|
sql = mandoc_strdup( |
sql = mandoc_strdup(e->equal ? |
"SELECT desc, form, pageid FROM mpages WHERE "); |
"SELECT desc, form, pageid, bits " |
|
"FROM mpages NATURAL JOIN names WHERE " : |
|
"SELECT desc, form, pageid, 0 FROM mpages WHERE "); |
sz = strlen(sql); |
sz = strlen(sql); |
|
|
for (needop = 0; NULL != e; e = e->next) { |
for (needop = 0; NULL != e; e = e->next) { |
|
|
? "pageid IN (SELECT pageid FROM names " |
? "pageid IN (SELECT pageid FROM names " |
"WHERE name REGEXP ?)" |
"WHERE name REGEXP ?)" |
: e->equal |
: e->equal |
? "pageid IN (SELECT pageid FROM names " |
? "name = ? " |
"WHERE name = ?)" |
|
: "pageid IN (SELECT pageid FROM names " |
: "pageid IN (SELECT pageid FROM names " |
"WHERE name MATCH ?)") |
"WHERE name MATCH ?)") |
: (NULL == e->substr |
: (NULL == e->substr |