From 72bf1d999706b8bd79dcf83550c0450729d286c9 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 26 Jul 2024 17:03:55 +0900 Subject: [PATCH] fix sort order, sort events by id after created_at https://github.com/nostr-protocol/nips/commit/9c54549f1842245b842d8a66f3bade744da24189 --- elasticsearch/query.go | 2 +- mysql/query.go | 2 +- opensearch/query.go | 4 ++-- postgresql/query.go | 2 +- postgresql/query_test.go | 12 ++++++------ postgresql/save.go | 2 +- sqlite3/query.go | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/elasticsearch/query.go b/elasticsearch/query.go index e840d9c..4676c07 100644 --- a/elasticsearch/query.go +++ b/elasticsearch/query.go @@ -155,7 +155,7 @@ func (ess *ElasticsearchStorage) QueryEvents(ctx context.Context, filter nostr.F es.Search.WithBody(bytes.NewReader(dsl)), es.Search.WithSize(limit), - es.Search.WithSort("event.created_at:desc"), + es.Search.WithSort("event.created_at:desc", "event.id"), ) if err != nil { log.Fatalf("Error getting response: %s", err) diff --git a/mysql/query.go b/mysql/query.go index 1f6523a..bed12b6 100644 --- a/mysql/query.go +++ b/mysql/query.go @@ -164,7 +164,7 @@ func (b MySQLBackend) queryEventsSql(filter nostr.Filter, doCount bool) (string, id, pubkey, created_at, kind, tags, content, sig FROM event WHERE `+ strings.Join(conditions, " AND ")+ - " ORDER BY created_at DESC LIMIT ?") + " ORDER BY created_at DESC, id LIMIT ?") } return query, params, nil diff --git a/opensearch/query.go b/opensearch/query.go index 164675b..a7fda2e 100644 --- a/opensearch/query.go +++ b/opensearch/query.go @@ -134,7 +134,7 @@ func (oss *OpensearchStorage) QueryEvents(ctx context.Context, filter nostr.Filt Body: bytes.NewReader(dsl), Params: opensearchapi.SearchParams{ Size: opensearchapi.ToPointer(limit), - Sort: []string{"event.created_at:desc"}, + Sort: []string{"event.created_at:desc", "event.id"}, }, }, ) @@ -155,7 +155,7 @@ func (oss *OpensearchStorage) QueryEvents(ctx context.Context, filter nostr.Filt } if ch != nil { close(ch) - ch = nil + ch = nil } }() diff --git a/postgresql/query.go b/postgresql/query.go index 3e4c94a..89cc11d 100644 --- a/postgresql/query.go +++ b/postgresql/query.go @@ -171,7 +171,7 @@ func (b PostgresBackend) queryEventsSql(filter nostr.Filter, doCount bool) (stri id, pubkey, created_at, kind, tags, content, sig FROM event WHERE `+ strings.Join(conditions, " AND ")+ - " ORDER BY created_at DESC LIMIT ?") + " ORDER BY created_at DESC, id LIMIT ?") } return query, params, nil diff --git a/postgresql/query_test.go b/postgresql/query_test.go index d8e0316..bbf864f 100644 --- a/postgresql/query_test.go +++ b/postgresql/query_test.go @@ -30,7 +30,7 @@ func TestQueryEventsSql(t *testing.T) { name: "empty filter", backend: defaultBackend, filter: nostr.Filter{}, - query: "SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE true ORDER BY created_at DESC LIMIT $1", + query: "SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE true ORDER BY created_at DESC, id LIMIT $1", params: []any{100}, err: nil, }, @@ -40,7 +40,7 @@ func TestQueryEventsSql(t *testing.T) { filter: nostr.Filter{ Limit: 50, }, - query: "SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE true ORDER BY created_at DESC LIMIT $1", + query: "SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE true ORDER BY created_at DESC, id LIMIT $1", params: []any{50}, err: nil, }, @@ -50,7 +50,7 @@ func TestQueryEventsSql(t *testing.T) { filter: nostr.Filter{ Limit: 2000, }, - query: "SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE true ORDER BY created_at DESC LIMIT $1", + query: "SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE true ORDER BY created_at DESC, id LIMIT $1", params: []any{100}, err: nil, }, @@ -63,7 +63,7 @@ func TestQueryEventsSql(t *testing.T) { query: `SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE id IN ($1) - ORDER BY created_at DESC LIMIT $2`, + ORDER BY created_at DESC, id LIMIT $2`, params: []any{"083ec57f36a7b39ab98a57bedab4f85355b2ee89e4b205bed58d7c3ef9edd294", 100}, err: nil, }, @@ -76,7 +76,7 @@ func TestQueryEventsSql(t *testing.T) { query: `SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE kind IN($1,$2,$3) - ORDER BY created_at DESC LIMIT $4`, + ORDER BY created_at DESC, id LIMIT $4`, params: []any{1, 2, 3, 100}, err: nil, }, @@ -89,7 +89,7 @@ func TestQueryEventsSql(t *testing.T) { query: `SELECT id, pubkey, created_at, kind, tags, content, sig FROM event WHERE pubkey IN ($1) - ORDER BY created_at DESC LIMIT $2`, + ORDER BY created_at DESC, id LIMIT $2`, params: []any{"7bdef7bdebb8721f77927d0e77c66059360fa62371fdf15f3add93923a613229", 100}, err: nil, }, diff --git a/postgresql/save.go b/postgresql/save.go index 2958767..31b45a6 100644 --- a/postgresql/save.go +++ b/postgresql/save.go @@ -38,7 +38,7 @@ func (b *PostgresBackend) AfterSave(evt *nostr.Event) { // delete all but the 100 most recent ones for each key b.DB.Exec(`DELETE FROM event WHERE pubkey = $1 AND kind = $2 AND created_at < ( SELECT created_at FROM event WHERE pubkey = $1 - ORDER BY created_at DESC OFFSET 100 LIMIT 1 + ORDER BY created_at DESC, id OFFSET 100 LIMIT 1 )`, evt.PubKey, evt.Kind) } diff --git a/sqlite3/query.go b/sqlite3/query.go index 5dde0da..6bc5cc1 100644 --- a/sqlite3/query.go +++ b/sqlite3/query.go @@ -165,7 +165,7 @@ func (b SQLite3Backend) queryEventsSql(filter nostr.Filter, doCount bool) (strin id, pubkey, created_at, kind, tags, content, sig FROM event WHERE `+ strings.Join(conditions, " AND ")+ - " ORDER BY created_at DESC LIMIT ?") + " ORDER BY created_at DESC, id LIMIT ?") } return query, params, nil