mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-05 13:02:34 +02:00
sqldb+graph/db: source nodes table, queries and CRUD
In this commit, we add the `source_nodes` table. It points to entries in the `nodes` table. This table will store one entry per protocol version that we are announcing a node_announcement on. With this commit, we can run the TestSourceNode unit test against our SQL backends.
This commit is contained in:
@ -10,6 +10,22 @@ import (
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
const addSourceNode = `-- name: AddSourceNode :exec
|
||||
/* ─────────────────────────────────────────────
|
||||
source_nodes table queries
|
||||
─────────────────────────────────────────────
|
||||
*/
|
||||
|
||||
INSERT INTO source_nodes (node_id)
|
||||
VALUES ($1)
|
||||
ON CONFLICT (node_id) DO NOTHING
|
||||
`
|
||||
|
||||
func (q *Queries) AddSourceNode(ctx context.Context, nodeID int64) error {
|
||||
_, err := q.db.ExecContext(ctx, addSourceNode, nodeID)
|
||||
return err
|
||||
}
|
||||
|
||||
const deleteExtraNodeType = `-- name: DeleteExtraNodeType :exec
|
||||
DELETE FROM node_extra_types
|
||||
WHERE node_id = $1
|
||||
@ -272,6 +288,41 @@ func (q *Queries) GetNodesByLastUpdateRange(ctx context.Context, arg GetNodesByL
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getSourceNodesByVersion = `-- name: GetSourceNodesByVersion :many
|
||||
SELECT sn.node_id, n.pub_key
|
||||
FROM source_nodes sn
|
||||
JOIN nodes n ON sn.node_id = n.id
|
||||
WHERE n.version = $1
|
||||
`
|
||||
|
||||
type GetSourceNodesByVersionRow struct {
|
||||
NodeID int64
|
||||
PubKey []byte
|
||||
}
|
||||
|
||||
func (q *Queries) GetSourceNodesByVersion(ctx context.Context, version int16) ([]GetSourceNodesByVersionRow, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getSourceNodesByVersion, version)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []GetSourceNodesByVersionRow
|
||||
for rows.Next() {
|
||||
var i GetSourceNodesByVersionRow
|
||||
if err := rows.Scan(&i.NodeID, &i.PubKey); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const insertNodeAddress = `-- name: InsertNodeAddress :exec
|
||||
/* ─────────────────────────────────────────────
|
||||
node_addresses table queries
|
||||
|
@ -3,8 +3,10 @@ DROP INDEX IF EXISTS nodes_unique;
|
||||
DROP INDEX IF EXISTS node_extra_types_unique;
|
||||
DROP INDEX IF EXISTS node_features_unique;
|
||||
DROP INDEX IF EXISTS node_addresses_unique;
|
||||
DROP INDEX IF EXISTS source_nodes_unique;
|
||||
|
||||
-- Drop tables in order of reverse dependencies.
|
||||
DROP TABLE IF EXISTS source_nodes;
|
||||
DROP TABLE IF EXISTS node_addresses;
|
||||
DROP TABLE IF EXISTS node_features;
|
||||
DROP TABLE IF EXISTS node_extra_types;
|
||||
|
@ -87,4 +87,11 @@ CREATE TABLE IF NOT EXISTS node_addresses (
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS node_addresses_unique ON node_addresses (
|
||||
node_id, type, position
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS source_nodes (
|
||||
node_id BIGINT NOT NULL REFERENCES nodes (id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS source_nodes_unique ON source_nodes (
|
||||
node_id
|
||||
);
|
@ -130,3 +130,7 @@ type NodeFeature struct {
|
||||
NodeID int64
|
||||
FeatureBit int32
|
||||
}
|
||||
|
||||
type SourceNode struct {
|
||||
NodeID int64
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
)
|
||||
|
||||
type Querier interface {
|
||||
AddSourceNode(ctx context.Context, nodeID int64) error
|
||||
ClearKVInvoiceHashIndex(ctx context.Context) error
|
||||
DeleteCanceledInvoices(ctx context.Context) (sql.Result, error)
|
||||
DeleteExtraNodeType(ctx context.Context, arg DeleteExtraNodeTypeParams) error
|
||||
@ -41,6 +42,7 @@ type Querier interface {
|
||||
GetNodeFeatures(ctx context.Context, nodeID int64) ([]NodeFeature, error)
|
||||
GetNodeFeaturesByPubKey(ctx context.Context, arg GetNodeFeaturesByPubKeyParams) ([]int32, error)
|
||||
GetNodesByLastUpdateRange(ctx context.Context, arg GetNodesByLastUpdateRangeParams) ([]Node, error)
|
||||
GetSourceNodesByVersion(ctx context.Context, version int16) ([]GetSourceNodesByVersionRow, error)
|
||||
InsertAMPSubInvoice(ctx context.Context, arg InsertAMPSubInvoiceParams) error
|
||||
InsertAMPSubInvoiceHTLC(ctx context.Context, arg InsertAMPSubInvoiceHTLCParams) error
|
||||
InsertInvoice(ctx context.Context, arg InsertInvoiceParams) (int64, error)
|
||||
|
@ -116,3 +116,19 @@ WHERE node_id = $1;
|
||||
DELETE FROM node_extra_types
|
||||
WHERE node_id = $1
|
||||
AND type = $2;
|
||||
|
||||
/* ─────────────────────────────────────────────
|
||||
source_nodes table queries
|
||||
─────────────────────────────────────────────
|
||||
*/
|
||||
|
||||
-- name: AddSourceNode :exec
|
||||
INSERT INTO source_nodes (node_id)
|
||||
VALUES ($1)
|
||||
ON CONFLICT (node_id) DO NOTHING;
|
||||
|
||||
-- name: GetSourceNodesByVersion :many
|
||||
SELECT sn.node_id, n.pub_key
|
||||
FROM source_nodes sn
|
||||
JOIN nodes n ON sn.node_id = n.id
|
||||
WHERE n.version = $1;
|
||||
|
Reference in New Issue
Block a user