ssb: Deconstruct and instrument the channels unread query.
Some checks failed
Build Tilde Friends / Build-All (push) Has been cancelled
Some checks failed
Build Tilde Friends / Build-All (push) Has been cancelled
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "tildefriends-app",
|
"type": "tildefriends-app",
|
||||||
"emoji": "🦀",
|
"emoji": "🦀",
|
||||||
"previous": "&6gubt0zYLPpQepw+Cg/coZNek8Eem/BmHRP1G39IZcc=.sha256"
|
"previous": "&Rn4Eg5ev5qhrYRnwxPB0DiEwO7VdGMDGp7tL/W7bRZo=.sha256"
|
||||||
}
|
}
|
||||||
|
@ -350,10 +350,25 @@ class TfElement extends LitElement {
|
|||||||
return [cache.latest, cache.messages];
|
return [cache.latest, cache.messages];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async query_timed(sql, args) {
|
||||||
|
let start = new Date();
|
||||||
|
let result = await tfrpc.rpc.query(sql, args);
|
||||||
|
let end = new Date();
|
||||||
|
console.log((end - start) / 1000, sql);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
async load_channels_latest(following) {
|
async load_channels_latest(following) {
|
||||||
let start_time = new Date();
|
let start_time = new Date();
|
||||||
let latest_private = this.get_latest_private(following);
|
let latest_private = this.get_latest_private(following);
|
||||||
let channels = await tfrpc.rpc.query(
|
const k_args = [
|
||||||
|
JSON.stringify(this.channels),
|
||||||
|
JSON.stringify(following),
|
||||||
|
'"' + this.whoami.replace('"', '""') + '"',
|
||||||
|
this.whoami,
|
||||||
|
];
|
||||||
|
let channels = (await Promise.all([
|
||||||
|
this.query_timed(
|
||||||
`
|
`
|
||||||
SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages
|
SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages
|
||||||
JOIN json_each(?1) AS channels ON messages.content ->> 'channel' = channels.value
|
JOIN json_each(?1) AS channels ON messages.content ->> 'channel' = channels.value
|
||||||
@ -363,7 +378,11 @@ class TfElement extends LitElement {
|
|||||||
messages.content ->> 'root' IS NULL AND
|
messages.content ->> 'root' IS NULL AND
|
||||||
messages.author != ?4
|
messages.author != ?4
|
||||||
GROUP by channel
|
GROUP by channel
|
||||||
UNION
|
`,
|
||||||
|
k_args
|
||||||
|
),
|
||||||
|
this.query_timed(
|
||||||
|
`
|
||||||
SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages
|
SELECT channels.value AS channel, MAX(messages.rowid) AS rowid FROM messages
|
||||||
JOIN messages_refs ON messages.id = messages_refs.message
|
JOIN messages_refs ON messages.id = messages_refs.message
|
||||||
JOIN json_each(?1) AS channels ON messages_refs.ref = '#' || channels.value
|
JOIN json_each(?1) AS channels ON messages_refs.ref = '#' || channels.value
|
||||||
@ -373,32 +392,40 @@ class TfElement extends LitElement {
|
|||||||
messages.content ->> 'root' IS NULL AND
|
messages.content ->> 'root' IS NULL AND
|
||||||
messages.author != ?4
|
messages.author != ?4
|
||||||
GROUP by channel
|
GROUP by channel
|
||||||
UNION
|
`,
|
||||||
|
k_args
|
||||||
|
),
|
||||||
|
this.query_timed(
|
||||||
|
`
|
||||||
SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages
|
SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages
|
||||||
JOIN json_each(?2) AS following ON messages.author = following.value
|
JOIN json_each(?2) AS following ON messages.author = following.value
|
||||||
WHERE
|
WHERE
|
||||||
messages.content ->> 'type' = 'post' AND
|
messages.content ->> 'type' = 'post' AND
|
||||||
messages.content ->> 'root' IS NULL AND
|
messages.content ->> 'root' IS NULL AND
|
||||||
messages.author != ?4
|
messages.author != ?4
|
||||||
UNION
|
`,
|
||||||
|
k_args
|
||||||
|
),
|
||||||
|
this.query_timed(
|
||||||
|
`
|
||||||
SELECT '@' AS channel, MAX(messages.rowid) AS rowid FROM messages_fts(?3)
|
SELECT '@' AS channel, MAX(messages.rowid) AS rowid FROM messages_fts(?3)
|
||||||
JOIN messages ON messages.rowid = messages_fts.rowid
|
JOIN messages ON messages.rowid = messages_fts.rowid
|
||||||
JOIN json_each(?2) AS following ON messages.author = following.value
|
JOIN json_each(?2) AS following ON messages.author = following.value
|
||||||
WHERE messages.author != ?4
|
WHERE messages.author != ?4
|
||||||
UNION
|
`,
|
||||||
|
k_args
|
||||||
|
),
|
||||||
|
this.query_timed(
|
||||||
|
`
|
||||||
SELECT '👍' AS channel, MAX(messages.rowid) AS rowid FROM messages
|
SELECT '👍' AS channel, MAX(messages.rowid) AS rowid FROM messages
|
||||||
JOIN json_each(?2) AS following ON messages.author = following.value
|
JOIN json_each(?2) AS following ON messages.author = following.value
|
||||||
WHERE
|
WHERE
|
||||||
messages.content ->> 'type' = 'vote' AND
|
messages.content ->> 'type' = 'vote' AND
|
||||||
messages.author != ?4
|
messages.author != ?4
|
||||||
`,
|
`,
|
||||||
[
|
k_args
|
||||||
JSON.stringify(this.channels),
|
),
|
||||||
JSON.stringify(following),
|
])).flat();
|
||||||
'"' + this.whoami.replace('"', '""') + '"',
|
|
||||||
this.whoami,
|
|
||||||
]
|
|
||||||
);
|
|
||||||
let latest = {};
|
let latest = {};
|
||||||
for (let row of channels) {
|
for (let row of channels) {
|
||||||
if (!latest[row.channel]) {
|
if (!latest[row.channel]) {
|
||||||
|
Reference in New Issue
Block a user