From 547b8361809179adc6aa16a20a265f777bfd4021 Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Fri, 30 May 2025 13:30:19 +0200 Subject: [PATCH] sqldb+graph/db: fix UpsertNode bug Account for the last_update field being null. --- graph/db/graph_test.go | 13 +------------ sqldb/sqlc/graph.sql.go | 3 ++- sqldb/sqlc/queries/graph.sql | 3 ++- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/graph/db/graph_test.go b/graph/db/graph_test.go index 49969ed7e..c8a5c54b2 100644 --- a/graph/db/graph_test.go +++ b/graph/db/graph_test.go @@ -3361,18 +3361,7 @@ func TestAddChannelEdgeShellNodes(t *testing.T) { require.ErrorIs(t, err, ErrEdgeAlreadyExist) // Show that updating the shell node to a full node record works. - err = graph.AddLightningNode(node2) - _, ok := graph.V1Store.(*KVStore) - if ok { - require.NoError(t, err) - } else { - // Currently the SQL UpsertNode query prevents us from updating - // the node record if the current record's last_update field - // is null (which is the case for node2). This is a bug that - // will be fixed in the following commit. - require.ErrorContains(t, graph.AddLightningNode(node2), - "sql: no rows in result set") - } + require.NoError(t, graph.AddLightningNode(node2)) } // TestNodePruningUpdateIndexDeletion tests that once a node has been removed diff --git a/sqldb/sqlc/graph.sql.go b/sqldb/sqlc/graph.sql.go index 0823132a3..2c42e535a 100644 --- a/sqldb/sqlc/graph.sql.go +++ b/sqldb/sqlc/graph.sql.go @@ -542,7 +542,8 @@ ON CONFLICT (pub_key, version) last_update = EXCLUDED.last_update, color = EXCLUDED.color, signature = EXCLUDED.signature -WHERE EXCLUDED.last_update > nodes.last_update +WHERE nodes.last_update IS NULL + OR EXCLUDED.last_update > nodes.last_update RETURNING id ` diff --git a/sqldb/sqlc/queries/graph.sql b/sqldb/sqlc/queries/graph.sql index dd96ac2f1..a11bc7d62 100644 --- a/sqldb/sqlc/queries/graph.sql +++ b/sqldb/sqlc/queries/graph.sql @@ -17,7 +17,8 @@ ON CONFLICT (pub_key, version) last_update = EXCLUDED.last_update, color = EXCLUDED.color, signature = EXCLUDED.signature -WHERE EXCLUDED.last_update > nodes.last_update +WHERE nodes.last_update IS NULL + OR EXCLUDED.last_update > nodes.last_update RETURNING id; -- name: GetNodeByPubKey :one