@@ -73,7 +73,7 @@ type SQLQueries interface {
7373 DeleteExtraNodeType (ctx context.Context , arg sqlc.DeleteExtraNodeTypeParams ) error
7474
7575 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 )
7777 DeleteNodeAddresses (ctx context.Context , nodeID int64 ) error
7878
7979 InsertNodeFeature (ctx context.Context , arg sqlc.InsertNodeFeatureParams ) error
@@ -321,10 +321,21 @@ func (s *SQLStore) AddrsForNode(ctx context.Context,
321321 known bool
322322 )
323323 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+ },
327331 )
332+ if errors .Is (err , sql .ErrNoRows ) {
333+ return nil
334+ }
335+
336+ known = true
337+
338+ addresses , err = getNodeAddresses (ctx , db , dbID )
328339 if err != nil {
329340 return fmt .Errorf ("unable to fetch node addresses: %w" ,
330341 err )
@@ -3381,7 +3392,7 @@ func buildNode(ctx context.Context, db SQLQueries, dbNode *sqlc.GraphNode) (
33813392 }
33823393
33833394 // Fetch the node's addresses.
3384- _ , node .Addresses , err = getNodeAddresses (ctx , db , pub [:] )
3395+ node .Addresses , err = getNodeAddresses (ctx , db , dbNode . ID )
33853396 if err != nil {
33863397 return nil , fmt .Errorf ("unable to fetch node(%d) " +
33873398 "addresses: %w" , dbNode .ID , err )
@@ -3685,42 +3696,26 @@ func upsertNodeAddresses(ctx context.Context, db SQLQueries, nodeID int64,
36853696 return nil
36863697}
36873698
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 ) {
36913702
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 )
37003706 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
37093708 }
37103709
37113710 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
37183713
3719- switch dbAddressType (addr .Type . Int16 ) {
3714+ switch dbAddressType (row .Type ) {
37203715 case addressTypeIPv4 :
37213716 tcp , err := net .ResolveTCPAddr ("tcp4" , address )
37223717 if err != nil {
3723- return false , nil , nil
3718+ return nil , err
37243719 }
37253720 tcp .IP = tcp .IP .To4 ()
37263721
@@ -3729,21 +3724,20 @@ func getNodeAddresses(ctx context.Context, db SQLQueries, nodePub []byte) (bool,
37293724 case addressTypeIPv6 :
37303725 tcp , err := net .ResolveTCPAddr ("tcp6" , address )
37313726 if err != nil {
3732- return false , nil , nil
3727+ return nil , err
37333728 }
37343729 addresses = append (addresses , tcp )
37353730
37363731 case addressTypeTorV3 , addressTypeTorV2 :
37373732 service , portStr , err := net .SplitHostPort (address )
37383733 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 )
37423736 }
37433737
37443738 port , err := strconv .Atoi (portStr )
37453739 if err != nil {
3746- return false , nil , err
3740+ return nil , err
37473741 }
37483742
37493743 addresses = append (addresses , & tor.OnionAddr {
@@ -3754,17 +3748,17 @@ func getNodeAddresses(ctx context.Context, db SQLQueries, nodePub []byte) (bool,
37543748 case addressTypeOpaque :
37553749 opaque , err := hex .DecodeString (address )
37563750 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 )
37593753 }
37603754
37613755 addresses = append (addresses , & lnwire.OpaqueAddrs {
37623756 Payload : opaque ,
37633757 })
37643758
37653759 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 )
37683762 }
37693763 }
37703764
@@ -3774,7 +3768,7 @@ func getNodeAddresses(ctx context.Context, db SQLQueries, nodePub []byte) (bool,
37743768 addresses = nil
37753769 }
37763770
3777- return true , addresses , nil
3771+ return addresses , nil
37783772}
37793773
37803774// upsertNodeExtraSignedFields updates the node's extra signed fields in the
0 commit comments