@@ -935,14 +935,14 @@
935 935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT ftsdocs.label,"
936 936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ftsdocs.url,"
937 937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" rank(matchinfo(ftsidx,'pcsx')),"
938 938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ftsdocs.type || ftsdocs.rid,"
939 939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" datetime(ftsdocs.mtime),"
940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " snippet(ftsidx,'<mark>','</mark>',' ... ',-1,35)"
940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " snippet(ftsidx,-1,'<mark>','</mark>',' ... ',35)"
941 941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM ftsidx CROSS JOIN ftsdocs"
942 942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE ftsidx MATCH %Q"
943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND ftsdocs.rowid=ftsidx.docid",
943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND ftsdocs.rowid=ftsidx.rowid",
944 944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPat
945 945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
946 946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(zPat);
947 947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( srchFlags!=SRCH_ALL ){
948 948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSep = " AND (";
@@ -1508,11 +1508,11 @@
1508 1508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The schema for the full-text index
1509 1509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1510 1510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zFtsSchema[] =
1511 1511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ -- One entry for each possible search result
1512 1512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE TABLE IF NOT EXISTS repository.ftsdocs(
1513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ rowid INTEGER PRIMARY KEY, -- Maps to the ftsidx.docid
1513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ rowid INTEGER PRIMARY KEY, -- Maps to the ftsidx.rowid
1514 1514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ type CHAR(1), -- Type of document
1515 1515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ rid INTEGER, -- BLOB.RID or TAG.TAGID for the document
1516 1516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ name TEXT, -- Additional document description
1517 1517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ idxed BOOLEAN, -- True if currently in the index
1518 1518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ label TEXT, -- Label to print on search results
@@ -1526,11 +1526,11 @@
1526 1526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE VIEW IF NOT EXISTS repository.ftscontent AS
1527 1527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ SELECT rowid, type, rid, name, idxed, label, url, mtime,
1528 1528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ title(type,rid,name) AS 'title', body(type,rid,name) AS 'body'
1529 1529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ FROM ftsdocs;
1530 1530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE VIRTUAL TABLE IF NOT EXISTS repository.ftsidx
1531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ USING fts4(content="ftscontent", title, body%s);
1531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ USING fts5(content="ftscontent", title, body%s);
1532 1532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
;
1533 1533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zFtsDrop[] =
1534 1534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ DROP TABLE IF EXISTS repository.ftsidx;
1535 1535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ DROP VIEW IF EXISTS repository.ftscontent;
1536 1536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ DROP TABLE IF EXISTS repository.ftsdocs;
@@ -1606,11 +1606,11 @@
1606 1606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zType[2];
1607 1607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zType[0] = cType;
1608 1608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zType[1] = 0;
1609 1609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_sql_setup(g.db);
1610 1610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM ftsidx WHERE docid IN"
1611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM ftsidx WHERE rowid IN"
1612 1612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT rowid FROM ftsdocs WHERE type=%Q AND rid=%d AND idxed)",
1613 1613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zType, rid
1614 1614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1615 1615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1616 1616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"REPLACE INTO ftsdocs(type,rid,name,idxed)"
@@ -1617,11 +1617,11 @@
1617 1617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" VALUES(%Q,%d,%Q,0)",
1618 1618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zType, rid, zName
1619 1619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1620 1620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cType=='w' || cType=='e' ){
1621 1621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM ftsidx WHERE docid IN"
1622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM ftsidx WHERE rowid IN"
1623 1623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT rowid FROM ftsdocs WHERE type='%c' AND name=%Q AND idxed)",
1624 1624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cType, zName
1625 1625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1626 1626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1627 1627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM ftsdocs WHERE type='%c' AND name=%Q AND rid!=%d",
@@ -1657,11 +1657,11 @@
1657 1657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE foci.checkinID=%d AND blob.uuid=foci.uuid"
1658 1658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND %z",
1659 1659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ckid, glob_expr("foci.filename", db_get("doc-glob",""))
1660 1660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1661 1661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM ftsidx WHERE docid IN"
1662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM ftsidx WHERE rowid IN"
1663 1663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT rowid FROM ftsdocs WHERE type='d'"
1664 1664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND rid NOT IN (SELECT rid FROM current_docs))"
1665 1665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1666 1666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1667 1667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM ftsdocs WHERE type='d'"
@@ -1676,11 +1676,11 @@
1676 1676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" %.17g"
1677 1677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM current_docs",
1678 1678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDocBr, rTime
1679 1679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1680 1680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,title,body)"
1681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(rowid,title,body)"
1682 1682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT rowid, label, bx FROM ftsdocs WHERE type='d' AND NOT idxed"
1683 1683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1684 1684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1685 1685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"UPDATE ftsdocs SET"
1686 1686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" idxed=1,"
@@ -1693,11 +1693,11 @@
1693 1693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1694 1694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 'c' terms in FTSDOCS
1695 1695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1696 1696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_checkin_index(void){
1697 1697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,title,body)"
1698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(rowid,title,body)"
1699 1699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT rowid, '', body('c',rid,NULL) FROM ftsdocs"
1700 1700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='c' AND NOT idxed;"
1701 1701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1702 1702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1703 1703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"UPDATE ftsdocs SET idxed=1, name=NULL,"
@@ -1716,11 +1716,11 @@
1716 1716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1717 1717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 't' terms in FTSDOCS
1718 1718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1719 1719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_ticket_index(void){
1720 1720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,title,body)"
1721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(rowid,title,body)"
1722 1722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT rowid, title('t',rid,NULL), body('t',rid,NULL) FROM ftsdocs"
1723 1723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='t' AND NOT idxed;"
1724 1724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1725 1725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_changes()==0 ) return;
1726 1726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
@@ -1739,11 +1739,11 @@
1739 1739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1740 1740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 'w' terms in FTSDOCS
1741 1741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1742 1742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_wiki_index(void){
1743 1743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,title,body)"
1744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(rowid,title,body)"
1745 1745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT rowid, title('w',rid,NULL),body('w',rid,NULL) FROM ftsdocs"
1746 1746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='w' AND NOT idxed;"
1747 1747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1748 1748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_changes()==0 ) return;
1749 1749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
@@ -1761,11 +1761,11 @@
1761 1761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1762 1762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 'f' terms in FTSDOCS
1763 1763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1764 1764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_forum_index(void){
1765 1765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,title,body)"
1766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(rowid,title,body)"
1767 1767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT rowid, title('f',rid,NULL),body('f',rid,NULL) FROM ftsdocs"
1768 1768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='f' AND NOT idxed;"
1769 1769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1770 1770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_changes()==0 ) return;
1771 1771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
@@ -1784,11 +1784,11 @@
1784 1784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1785 1785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 'e' terms in FTSDOCS
1786 1786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1787 1787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_technote_index(void){
1788 1788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,title,body)"
1789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(rowid,title,body)"
1790 1790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT rowid, title('e',rid,NULL),body('e',rid,NULL) FROM ftsdocs"
1791 1791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='e' AND NOT idxed;"
1792 1792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1793 1793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_changes()==0 ) return;
1794 1794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
@@ -1869,11 +1869,11 @@
1869 1869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1870 1870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The current search settings are displayed after any changes are applied.
1871 1871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Run this command with no arguments to simply see the settings.
1872 1872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1873 1873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void fts_config_cmd(void){
1874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const struct {
1874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const struct {
1875 1875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCmd;
1876 1876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
1877 1877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} aCmd[] = {
1878 1878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ 1, "reindex" },
1879 1879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ 2, "index" },
@@ -2002,24 +2002,24 @@
2002 2002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUrl = db_column_text(&q,4);
2003 2003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDocId = db_column_text(&q,0);
2004 2004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName;
2005 2005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z;
2006 2006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <table border=0>
2007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <tr><td align='right'>docid:<td> <td>%d(id)
2007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><td align='right'>rowid:<td> <td>%d(id)
2008 2008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align='right'>id:<td><td>%s(zDocId)
2009 2009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align='right'>name:<td><td>%h(db_column_text(&q,1))
2010 2010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align='right'>idxed:<td><td>%d(db_column_int(&q,2))
2011 2011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align='right'>label:<td><td>%h(db_column_text(&q,3))
2012 2012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align='right'>url:<td><td>
2013 2013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <a href='%R%s(zUrl)'>%h(zUrl)</a>
2014 2014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align='right'>mtime:<td><td>%s(db_column_text(&q,5))
2015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = db_text(0, "SELECT title FROM ftsidx WHERE docid=%d",id);
2015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = db_text(0, "SELECT title FROM ftsidx WHERE rowid=%d",id);
2016 2016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z && z[0] ){
2017 2017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align="right">title:<td><td>%h(z)
2018 2018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(z);
2019 2019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = db_text(0, "SELECT body FROM ftsidx WHERE docid=%d",id);
2020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = db_text(0, "SELECT body FROM ftsidx WHERE rowid=%d",id);
2021 2021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z && z[0] ){
2022 2022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <tr><td align="right" valign="top">body:<td><td>%h(z)
2023 2023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(z);
2024 2024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2025 2025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </table>
@@ -2103,5 +2103,382 @@
2103 2103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <th align="right">%d(cnt3)
2104 2104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </tfooter>
2105 2105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </table>
2106 2106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_finish_page();
2107 2107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
2111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The Fts5MatchinfoCtx bits were all taken verbatim from:
2112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** https://sqlite.org/src/finfo?name=ext/fts5/fts5_test_mi.c
2114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
2115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct Fts5MatchinfoCtx Fts5MatchinfoCtx;
2117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_AMALGAMATION
2119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef unsigned int u32;
2120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
2121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Fts5MatchinfoCtx {
2123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCol; /* Number of cols in FTS5 table */
2124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPhrase; /* Number of phrases in FTS5 query */
2125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zArg; /* nul-term'd copy of 2nd arg */
2126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRet; /* Number of elements in aRet[] */
2127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 *aRet; /* Array of 32-bit unsigned ints to return */
2128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
2129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
2132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return a pointer to the fts5_api pointer for database connection db.
2133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If an error occurs, return NULL and leave an error in the database
2134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** handle (accessible using sqlite3_errcode()/errmsg()).
2135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
2136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5_api_from_db(sqlite3 *db, fts5_api **ppApi){
2137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt = 0;
2138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
2139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppApi = 0;
2141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_prepare(db, "SELECT fts5(?1)", -1, &pStmt, 0);
2142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
2143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_pointer(pStmt, 1, (void*)ppApi, "fts5_api_ptr", 0);
2144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void)sqlite3_step(pStmt);
2145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_finalize(pStmt);
2146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
2149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
2153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Argument f should be a flag accepted by matchinfo() (a valid character
2154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the string passed as the second argument). If it is not, -1 is
2155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returned. Otherwise, if f is a valid matchinfo flag, the value returned
2156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is the number of 32-bit integers added to the output array if the
2157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table has nCol columns and the query nPhrase phrases.
2158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
2159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5MatchinfoFlagsize(int nCol, int nPhrase, char f){
2160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ret = -1;
2161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( f ){
2162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'p': ret = 1; break;
2163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'c': ret = 1; break;
2164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'x': ret = 3 * nCol * nPhrase; break;
2165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'y': ret = nCol * nPhrase; break;
2166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'b': ret = ((nCol + 31) / 32) * nPhrase; break;
2167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'n': ret = 1; break;
2168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'a': ret = nCol; break;
2169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'l': ret = nCol; break;
2170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 's': ret = nCol; break;
2171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return ret;
2173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5MatchinfoIter(
2176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Fts5ExtensionApi *pApi, /* API offered by current FTS version */
2177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pFts, /* First arg to pass to pApi functions */
2178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5MatchinfoCtx *p,
2179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int(*x)(const Fts5ExtensionApi*,Fts5Context*,Fts5MatchinfoCtx*,char,u32*)
2180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
2182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
2183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
2184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char f;
2185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; (f = p->zArg[i]); i++){
2186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = x(pApi, pFts, p, f, &p->aRet[n]);
2187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) break;
2188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n += fts5MatchinfoFlagsize(p->nCol, p->nPhrase, f);
2189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
2191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5MatchinfoXCb(
2194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Fts5ExtensionApi *pApi,
2195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pFts,
2196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUserData
2197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5PhraseIter iter;
2199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol, iOff;
2200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 *aOut = (u32*)pUserData;
2201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPrev = -1;
2202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pApi->xPhraseFirst(pFts, 0, &iter, &iCol, &iOff);
2204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCol>=0;
2205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pApi->xPhraseNext(pFts, &iter, &iCol, &iOff)
2206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[iCol*3+1]++;
2208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iCol!=iPrev ) aOut[iCol*3 + 2]++;
2209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iPrev = iCol;
2210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
2213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5MatchinfoGlobalCb(
2216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Fts5ExtensionApi *pApi,
2217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pFts,
2218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5MatchinfoCtx *p,
2219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char f,
2220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 *aOut
2221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
2223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( f ){
2224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'p':
2225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[0] = p->nPhrase;
2226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'c':
2229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[0] = p->nCol;
2230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'x': {
2233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
2234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<p->nPhrase && rc==SQLITE_OK; i++){
2235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pPtr = (void*)&aOut[i * p->nCol * 3];
2236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xQueryPhrase(pFts, i, pPtr, fts5MatchinfoXCb);
2237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'n': {
2242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nRow;
2243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xRowCount(pFts, &nRow);
2244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[0] = (u32)nRow;
2245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'a': {
2249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nRow = 0;
2250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xRowCount(pFts, &nRow);
2251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRow==0 ){
2252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(aOut, 0, sizeof(u32) * p->nCol);
2253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
2255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<p->nCol; i++){
2256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nToken;
2257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xColumnTotalSize(pFts, i, &nToken);
2258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK){
2259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[i] = (u32)((2*nToken + nRow) / (2*nRow));
2260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
2268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5MatchinfoLocalCb(
2271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Fts5ExtensionApi *pApi,
2272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pFts,
2273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5MatchinfoCtx *p,
2274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char f,
2275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 *aOut
2276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
2278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
2279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( f ){
2281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'b': {
2282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPhrase;
2283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nInt = ((p->nCol + 31) / 32) * p->nPhrase;
2284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nInt; i++) aOut[i] = 0;
2285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iPhrase=0; iPhrase<p->nPhrase; iPhrase++){
2287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5PhraseIter iter;
2288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol;
2289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pApi->xPhraseFirstColumn(pFts, iPhrase, &iter, &iCol);
2290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCol>=0;
2291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pApi->xPhraseNextColumn(pFts, &iter, &iCol)
2292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[iPhrase * ((p->nCol+31)/32) + iCol/32] |= ((u32)1 << iCol%32);
2294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'x':
2301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'y': {
2302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nMul = (f=='x' ? 3 : 1);
2303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPhrase;
2304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<(p->nCol*p->nPhrase); i++) aOut[i*nMul] = 0;
2306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iPhrase=0; iPhrase<p->nPhrase; iPhrase++){
2308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5PhraseIter iter;
2309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOff, iCol;
2310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pApi->xPhraseFirst(pFts, iPhrase, &iter, &iCol, &iOff);
2311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iOff>=0;
2312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pApi->xPhraseNext(pFts, &iter, &iCol, &iOff)
2313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[nMul * (iCol + iPhrase * p->nCol)]++;
2315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'l': {
2322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<p->nCol; i++){
2323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nToken;
2324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xColumnSize(pFts, i, &nToken);
2325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aOut[i] = (u32)nToken;
2326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 's': {
2331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nInst;
2332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(aOut, 0, sizeof(u32) * p->nCol);
2334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xInstCount(pFts, &nInst);
2336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<nInst; i++){
2337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPhrase, iOff, iCol = 0;
2338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iNextPhrase;
2339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iNextOff;
2340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 nSeq = 1;
2341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int j;
2342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xInst(pFts, i, &iPhrase, &iCol, &iOff);
2344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iNextPhrase = iPhrase+1;
2345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iNextOff = iOff+pApi->xPhraseSize(pFts, 0);
2346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=i+1; rc==SQLITE_OK && j<nInst; j++){
2347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ip, ic, io;
2348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xInst(pFts, j, &ip, &ic, &io);
2349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ic!=iCol || io>iNextOff ) break;
2350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ip==iNextPhrase && io==iNextOff ){
2351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSeq++;
2352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iNextPhrase = ip+1;
2353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iNextOff = io + pApi->xPhraseSize(pFts, ip);
2354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nSeq>aOut[iCol] ) aOut[iCol] = nSeq;
2358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
2361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
2364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static Fts5MatchinfoCtx *fts5MatchinfoNew(
2367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Fts5ExtensionApi *pApi, /* API offered by current FTS version */
2368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pFts, /* First arg to pass to pApi functions */
2369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx, /* Context for returning error message */
2370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zArg /* Matchinfo flag string */
2371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5MatchinfoCtx *p;
2373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCol;
2374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPhrase;
2375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
2376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nInt;
2377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nByte;
2378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
2379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nCol = pApi->xColumnCount(pFts);
2381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nPhrase = pApi->xPhraseCount(pFts);
2382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nInt = 0;
2384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; zArg[i]; i++){
2385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = fts5MatchinfoFlagsize(nCol, nPhrase, zArg[i]);
2386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n<0 ){
2387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zErr = sqlite3_mprintf("unrecognized matchinfo flag: %c", zArg[i]);
2388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error(pCtx, zErr, -1);
2389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zErr);
2390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
2391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nInt += n;
2393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nByte = sizeof(Fts5MatchinfoCtx) /* The struct itself */
2396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ + sizeof(u32) * nInt /* The p->aRet[] array */
2397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ + (i+1); /* The p->zArg string */
2398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = (Fts5MatchinfoCtx*)sqlite3_malloc64(nByte);
2399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 ){
2400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_nomem(pCtx);
2401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
2402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(p, 0, nByte);
2404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nCol = nCol;
2406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nPhrase = nPhrase;
2407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->aRet = (u32*)&p[1];
2408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nRet = nInt;
2409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->zArg = (char*)&p->aRet[nInt];
2410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(p->zArg, zArg, i);
2411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5MatchinfoIter(pApi, pFts, p, fts5MatchinfoGlobalCb);
2413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
2414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_code(pCtx, rc);
2415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(p);
2416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = 0;
2417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p;
2420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts5MatchinfoFunc(
2423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Fts5ExtensionApi *pApi, /* API offered by current FTS version */
2424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pFts, /* First arg to pass to pApi functions */
2425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx, /* Context for returning result/error */
2426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVal, /* Number of values in apVal[] array */
2427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal /* Array of trailing arguments */
2428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zArg;
2430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5MatchinfoCtx *p;
2431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
2432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nVal>0 ){
2434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zArg = (const char*)sqlite3_value_text(apVal[0]);
2435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zArg = "pcx";
2437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = (Fts5MatchinfoCtx*)pApi->xGetAuxdata(pFts, 0);
2440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 || sqlite3_stricmp(zArg, p->zArg) ){
2441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = fts5MatchinfoNew(pApi, pFts, pCtx, zArg);
2442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 ){
2443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_NOMEM;
2444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xSetAuxdata(pFts, p, sqlite3_free);
2446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
2450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5MatchinfoIter(pApi, pFts, p, fts5MatchinfoLocalCb);
2451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
2453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_code(pCtx, rc);
2454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* No errors has occured, so return a copy of the array of integers. */
2456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nByte = p->nRet * sizeof(u32);
2457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_blob(pCtx, (void*)p->aRet, nByte, SQLITE_TRANSIENT);
2458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int db_register_fts5(sqlite3 *db){
2462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Return code */
2463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_api *pApi; /* FTS5 API functions */
2464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Extract the FTS5 API pointer from the database handle. The
2466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts5_api_from_db() function above is copied verbatim from the
2467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FTS5 documentation. Refer there for details. */
2468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5_api_from_db(db, &pApi);
2469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
2470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If fts5_api_from_db() returns NULL, then either FTS5 is not registered
2472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with this database handle, or an error (OOM perhaps?) has occurred.
2473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Also check that the fts5_api object is version 2 or newer.
2475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
2476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pApi==0 || pApi->iVersion<2 ){
2477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_ERROR;
2478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Register the implementation of matchinfo() */
2481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xCreateFunction(pApi, "matchinfo", 0, fts5MatchinfoFunc, 0);
2482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
2484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2108 2485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!