forked from cory/tildefriends
ssb: Faster *and* correct. I think.
This commit is contained in:
parent
ea60b165da
commit
8a66e74074
@ -165,20 +165,21 @@ class TfTabNewsFeedElement extends LitElement {
|
||||
all_news AS (
|
||||
SELECT messages.rowid, messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature
|
||||
FROM messages
|
||||
JOIN json_each(?) AS following ON messages.author = following.value
|
||||
WHERE timestamp >= 0 AND timestamp < ?3),
|
||||
JOIN json_each(?) AS following ON messages.author = following.value),
|
||||
news AS (
|
||||
SELECT * FROM all_news
|
||||
WHERE (?2 IS NULL OR all_news.timestamp >= ?2) AND all_news.timestamp < ?3
|
||||
WHERE all_news.timestamp < ?3 AND (?2 IS NULL OR all_news.timestamp >= ?2)
|
||||
ORDER BY timestamp DESC LIMIT 20
|
||||
),
|
||||
refs AS (
|
||||
SELECT refs_out.ref AS ref FROM messages_refs refs_out JOIN news ON refs_out.message = news.id
|
||||
UNION
|
||||
SELECT refs_in.message AS ref FROM messages_refs refs_in JOIN news ON refs_in.ref = news.id
|
||||
)
|
||||
SELECT TRUE AS is_primary, news.* FROM news
|
||||
UNION
|
||||
SELECT FALSE AS is_primary, messages.rowid, messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature
|
||||
FROM news
|
||||
JOIN messages_refs refs_in ON news.id = refs_in.ref
|
||||
JOIN messages_refs refs_out ON news.id = refs_out.message
|
||||
JOIN messages ON (messages.id = refs_out.ref OR messages.id = refs_in.message)
|
||||
SELECT FALSE AS is_primary, all_news.rowid, all_news.id, all_news.previous, all_news.author, all_news.sequence, all_news.timestamp, all_news.hash, json(all_news.content) AS content, all_news.signature
|
||||
FROM all_news JOIN refs ON all_news.id = refs.ref
|
||||
`,
|
||||
[JSON.stringify(this.following), start_time, end_time]
|
||||
);
|
||||
|
@ -289,8 +289,10 @@ void tf_ssb_db_init(tf_ssb_t* ssb)
|
||||
_tf_ssb_db_exec(db, "DROP TRIGGER IF EXISTS messages_ad_refs");
|
||||
_tf_ssb_db_exec(db, "CREATE TRIGGER IF NOT EXISTS messages_ad_refs AFTER DELETE ON messages BEGIN DELETE FROM messages_refs WHERE messages_refs.message = old.id; END");
|
||||
|
||||
_tf_ssb_db_exec(db, "CREATE INDEX IF NOT EXISTS messages_refs_message_idx ON messages_refs (message)");
|
||||
_tf_ssb_db_exec(db, "CREATE INDEX IF NOT EXISTS messages_refs_ref_idx ON messages_refs (ref)");
|
||||
_tf_ssb_db_exec(db, "DROP INDEX IF EXISTS messages_refs_message_idx");
|
||||
_tf_ssb_db_exec(db, "DROP INDEX IF EXISTS messages_refs_ref_idx");
|
||||
_tf_ssb_db_exec(db, "CREATE UNIQUE INDEX IF NOT EXISTS messages_refs_message_ref_idx ON messages_refs (message, ref)");
|
||||
_tf_ssb_db_exec(db, "CREATE UNIQUE INDEX IF NOT EXISTS messages_refs_ref_message_idx ON messages_refs (ref, message)");
|
||||
|
||||
if (!_tf_ssb_db_has_rows(db, "PRAGMA table_list('blobs_refs')"))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user