mirror of
https://github.com/lightninglabs/faraday.git
synced 2026-08-17 13:07:41 +02:00
Switches the GetChannelEvents query from a timestamp-ordered scan to an id-keyset cursor (WHERE id > $cursor ORDER BY id ASC LIMIT $n). The keyset cursor is stable under concurrent inserts and survives a future retention job that prunes the oldest rows: a positional OFFSET would silently skip events whenever rows below the cursor are deleted, while "id > $cursor" keeps advancing past whatever the caller has already seen. The id field is documented in the proto as a server-assigned monotonic identity, so callers persist last_id as their sync watermark. Adds a (channel_id, id) composite index to back the new query; the existing (channel_id, timestamp) index does not cover it and would force a per-channel filter after a global id scan.
29 lines
808 B
SQL
29 lines
808 B
SQL
-- name: InsertPeer :one
|
|
INSERT INTO peers (pubkey) VALUES ($1) RETURNING id;
|
|
|
|
-- name: GetPeerByPubKey :one
|
|
SELECT * FROM peers WHERE pubkey = $1;
|
|
|
|
-- name: InsertChannel :one
|
|
INSERT INTO channels (channel_point, short_channel_id, peer_id) VALUES ($1, $2, $3) RETURNING id;
|
|
|
|
-- name: GetChannelByChanPoint :one
|
|
SELECT * FROM channels WHERE channel_point = $1;
|
|
|
|
-- name: GetChannelByShortChanID :one
|
|
SELECT * FROM channels WHERE short_channel_id = $1;
|
|
|
|
-- name: InsertChannelEvent :exec
|
|
INSERT INTO channel_events (
|
|
channel_id, event_type, timestamp, local_balance_sat, remote_balance_sat,
|
|
is_sync
|
|
) VALUES ($1, $2, $3, $4, $5, $6);
|
|
|
|
-- name: GetChannelEvents :many
|
|
SELECT * FROM channel_events
|
|
WHERE channel_id = $1
|
|
AND id > $2
|
|
AND timestamp >= $3
|
|
AND timestamp < $4
|
|
ORDER BY id ASC
|
|
LIMIT $5;
|