Add search index (#15)
- Add utility rebuild script - Add Search to header - Add shell of search page - Add search query support to ItemList
This commit is contained in:
@@ -14,6 +14,31 @@ class Data {
|
||||
return $db;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the search index and synchronization triggers for the item table
|
||||
*
|
||||
* @param SQLite3 $db The database connection on which these will be created
|
||||
*/
|
||||
public static function createSearchIndex(SQLite3 $db): void {
|
||||
$db->exec("CREATE VIRTUAL TABLE item_search USING fts5(content, content='item', content_rowid='id')");
|
||||
$db->exec(<<<'SQL'
|
||||
CREATE TRIGGER item_ai AFTER INSERT ON item BEGIN
|
||||
INSERT INTO item_search (rowid, content) VALUES (new.id, new.content);
|
||||
END;
|
||||
SQL);
|
||||
$db->exec(<<<'SQL'
|
||||
CREATE TRIGGER item_au AFTER UPDATE ON item BEGIN
|
||||
INSERT INTO item_search (item_search, rowid, content) VALUES ('delete', old.id, old.content);
|
||||
INSERT INTO item_search (rowid, content) VALUES (new.id, new.content);
|
||||
END;
|
||||
SQL);
|
||||
$db->exec(<<<'SQL'
|
||||
CREATE TRIGGER item_ad AFTER DELETE ON item BEGIN
|
||||
INSERT INTO item_search (item_search, rowid, content) VALUES ('delete', old.id, old.content);
|
||||
END;
|
||||
SQL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure the expected tables exist
|
||||
*/
|
||||
@@ -23,17 +48,16 @@ class Data {
|
||||
$tableQuery = $db->query("SELECT name FROM sqlite_master WHERE type = 'table'");
|
||||
while ($table = $tableQuery->fetchArray(SQLITE3_NUM)) $tables[] = $table[0];
|
||||
if (!in_array('frc_user', $tables)) {
|
||||
$query = <<<'SQL'
|
||||
$db->exec(<<<'SQL'
|
||||
CREATE TABLE frc_user (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
email TEXT NOT NULL,
|
||||
password TEXT NOT NULL)
|
||||
SQL;
|
||||
$db->exec($query);
|
||||
SQL);
|
||||
$db->exec('CREATE INDEX idx_user_email ON frc_user (email)');
|
||||
}
|
||||
if (!in_array('feed', $tables)) {
|
||||
$query = <<<'SQL'
|
||||
$db->exec(<<<'SQL'
|
||||
CREATE TABLE feed (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL,
|
||||
@@ -42,11 +66,10 @@ class Data {
|
||||
updated_on TEXT,
|
||||
checked_on TEXT,
|
||||
FOREIGN KEY (user_id) REFERENCES frc_user (id))
|
||||
SQL;
|
||||
$db->exec($query);
|
||||
SQL);
|
||||
}
|
||||
if (!in_array('item', $tables)) {
|
||||
$query = <<<'SQL'
|
||||
$db->exec(<<<'SQL'
|
||||
CREATE TABLE item (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
feed_id INTEGER NOT NULL,
|
||||
@@ -59,8 +82,8 @@ class Data {
|
||||
is_read BOOLEAN NOT NULL DEFAULT 0,
|
||||
is_bookmarked BOOLEAN NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (feed_id) REFERENCES feed (id))
|
||||
SQL;
|
||||
$db->exec($query);
|
||||
SQL);
|
||||
self::createSearchIndex($db);
|
||||
}
|
||||
$db->close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user