@@ -73,7 +73,7 @@ type SQLQueries interface {
73
73
DeleteExtraNodeType (ctx context.Context , arg sqlc.DeleteExtraNodeTypeParams ) error
74
74
75
75
InsertNodeAddress (ctx context.Context , arg sqlc.InsertNodeAddressParams ) error
76
- GetNodeAddressesByPubKey (ctx context.Context , arg sqlc. GetNodeAddressesByPubKeyParams ) ([]sqlc.GetNodeAddressesByPubKeyRow , error )
76
+ GetNodeAddresses (ctx context.Context , nodeID int64 ) ([]sqlc.GetNodeAddressesRow , error )
77
77
DeleteNodeAddresses (ctx context.Context , nodeID int64 ) error
78
78
79
79
InsertNodeFeature (ctx context.Context , arg sqlc.InsertNodeFeatureParams ) error
@@ -321,10 +321,21 @@ func (s *SQLStore) AddrsForNode(ctx context.Context,
321
321
known bool
322
322
)
323
323
err := s .db .ExecTx (ctx , sqldb .ReadTxOpt (), func (db SQLQueries ) error {
324
- var err error
325
- known , addresses , err = getNodeAddresses (
326
- ctx , db , nodePub .SerializeCompressed (),
324
+ // First, check if the node exists and get its DB ID if it
325
+ // does.
326
+ dbID , err := db .GetNodeIDByPubKey (
327
+ ctx , sqlc.GetNodeIDByPubKeyParams {
328
+ Version : int16 (ProtocolV1 ),
329
+ PubKey : nodePub .SerializeCompressed (),
330
+ },
327
331
)
332
+ if errors .Is (err , sql .ErrNoRows ) {
333
+ return nil
334
+ }
335
+
336
+ known = true
337
+
338
+ addresses , err = getNodeAddresses (ctx , db , dbID )
328
339
if err != nil {
329
340
return fmt .Errorf ("unable to fetch node addresses: %w" ,
330
341
err )
@@ -3381,7 +3392,7 @@ func buildNode(ctx context.Context, db SQLQueries, dbNode *sqlc.GraphNode) (
3381
3392
}
3382
3393
3383
3394
// Fetch the node's addresses.
3384
- _ , node .Addresses , err = getNodeAddresses (ctx , db , pub [:] )
3395
+ node .Addresses , err = getNodeAddresses (ctx , db , dbNode . ID )
3385
3396
if err != nil {
3386
3397
return nil , fmt .Errorf ("unable to fetch node(%d) " +
3387
3398
"addresses: %w" , dbNode .ID , err )
@@ -3685,42 +3696,26 @@ func upsertNodeAddresses(ctx context.Context, db SQLQueries, nodeID int64,
3685
3696
return nil
3686
3697
}
3687
3698
3688
- // getNodeAddresses fetches the addresses for a node with the given public key .
3689
- func getNodeAddresses (ctx context.Context , db SQLQueries , nodePub [] byte ) (bool ,
3690
- []net. Addr , error ) {
3699
+ // getNodeAddresses fetches the addresses for a node with the given DB ID .
3700
+ func getNodeAddresses (ctx context.Context , db SQLQueries , id int64 ) ([]net. Addr ,
3701
+ error ) {
3691
3702
3692
- // GetNodeAddressesByPubKey ensures that the addresses for a given type
3693
- // are returned in the same order as they were inserted.
3694
- rows , err := db .GetNodeAddressesByPubKey (
3695
- ctx , sqlc.GetNodeAddressesByPubKeyParams {
3696
- Version : int16 (ProtocolV1 ),
3697
- PubKey : nodePub ,
3698
- },
3699
- )
3703
+ // GetNodeAddresses ensures that the addresses for a given type are
3704
+ // returned in the same order as they were inserted.
3705
+ rows , err := db .GetNodeAddresses (ctx , id )
3700
3706
if err != nil {
3701
- return false , nil , err
3702
- }
3703
-
3704
- // GetNodeAddressesByPubKey uses a left join so there should always be
3705
- // at least one row returned if the node exists even if it has no
3706
- // addresses.
3707
- if len (rows ) == 0 {
3708
- return false , nil , nil
3707
+ return nil , err
3709
3708
}
3710
3709
3711
3710
addresses := make ([]net.Addr , 0 , len (rows ))
3712
- for _ , addr := range rows {
3713
- if ! (addr .Type .Valid && addr .Address .Valid ) {
3714
- continue
3715
- }
3716
-
3717
- address := addr .Address .String
3711
+ for _ , row := range rows {
3712
+ address := row .Address
3718
3713
3719
- switch dbAddressType (addr .Type . Int16 ) {
3714
+ switch dbAddressType (row .Type ) {
3720
3715
case addressTypeIPv4 :
3721
3716
tcp , err := net .ResolveTCPAddr ("tcp4" , address )
3722
3717
if err != nil {
3723
- return false , nil , nil
3718
+ return nil , err
3724
3719
}
3725
3720
tcp .IP = tcp .IP .To4 ()
3726
3721
@@ -3729,21 +3724,20 @@ func getNodeAddresses(ctx context.Context, db SQLQueries, nodePub []byte) (bool,
3729
3724
case addressTypeIPv6 :
3730
3725
tcp , err := net .ResolveTCPAddr ("tcp6" , address )
3731
3726
if err != nil {
3732
- return false , nil , nil
3727
+ return nil , err
3733
3728
}
3734
3729
addresses = append (addresses , tcp )
3735
3730
3736
3731
case addressTypeTorV3 , addressTypeTorV2 :
3737
3732
service , portStr , err := net .SplitHostPort (address )
3738
3733
if err != nil {
3739
- return false , nil , fmt .Errorf ("unable to " +
3740
- "split tor v3 address: %v" ,
3741
- addr .Address )
3734
+ return nil , fmt .Errorf ("unable to " +
3735
+ "split tor v3 address: %v" , address )
3742
3736
}
3743
3737
3744
3738
port , err := strconv .Atoi (portStr )
3745
3739
if err != nil {
3746
- return false , nil , err
3740
+ return nil , err
3747
3741
}
3748
3742
3749
3743
addresses = append (addresses , & tor.OnionAddr {
@@ -3754,17 +3748,17 @@ func getNodeAddresses(ctx context.Context, db SQLQueries, nodePub []byte) (bool,
3754
3748
case addressTypeOpaque :
3755
3749
opaque , err := hex .DecodeString (address )
3756
3750
if err != nil {
3757
- return false , nil , fmt .Errorf ("unable to " +
3758
- "decode opaque address: %v" , addr )
3751
+ return nil , fmt .Errorf ("unable to " +
3752
+ "decode opaque address: %v" , address )
3759
3753
}
3760
3754
3761
3755
addresses = append (addresses , & lnwire.OpaqueAddrs {
3762
3756
Payload : opaque ,
3763
3757
})
3764
3758
3765
3759
default :
3766
- return false , nil , fmt .Errorf ("unknown address " +
3767
- "type: %v" , addr .Type )
3760
+ return nil , fmt .Errorf ("unknown address type: %v" ,
3761
+ row .Type )
3768
3762
}
3769
3763
}
3770
3764
@@ -3774,7 +3768,7 @@ func getNodeAddresses(ctx context.Context, db SQLQueries, nodePub []byte) (bool,
3774
3768
addresses = nil
3775
3769
}
3776
3770
3777
- return true , addresses , nil
3771
+ return addresses , nil
3778
3772
}
3779
3773
3780
3774
// upsertNodeExtraSignedFields updates the node's extra signed fields in the
0 commit comments