graph-adapter.go raw

   1  //go:build !(js && wasm)
   2  
   3  package database
   4  
   5  import (
   6  	"next.orly.dev/pkg/protocol/graph"
   7  )
   8  
   9  // GraphAdapter wraps a database instance and implements graph.GraphDatabase interface.
  10  type GraphAdapter struct {
  11  	db *D
  12  }
  13  
  14  // NewGraphAdapter creates a new GraphAdapter wrapping the given database.
  15  func NewGraphAdapter(db *D) *GraphAdapter {
  16  	return &GraphAdapter{db: db}
  17  }
  18  
  19  // TraversePubkeyPubkey implements graph.GraphDatabase.
  20  // Uses the ppg/gpp materialized index for single-hop prefix scans.
  21  func (a *GraphAdapter) TraversePubkeyPubkey(seedPubkey []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
  22  	return a.db.TraversePubkeyPubkey(seedPubkey, maxDepth, direction)
  23  }
  24  
  25  // TraversePubkeyEvent implements graph.GraphDatabase.
  26  func (a *GraphAdapter) TraversePubkeyEvent(seedPubkey []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
  27  	return a.db.TraversePubkeyEvent(seedPubkey, maxDepth, direction)
  28  }
  29  
  30  // TraverseEventEvent implements graph.GraphDatabase.
  31  func (a *GraphAdapter) TraverseEventEvent(seedEventID []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
  32  	return a.db.TraverseEventEventFromPubkey(seedEventID, maxDepth, direction)
  33  }
  34  
  35  // TraversePubkeyPubkeyBaseline implements graph.GraphDatabase.
  36  // Uses multi-hop NIP-01 queries (no ppg/gpp index) for benchmark comparison.
  37  func (a *GraphAdapter) TraversePubkeyPubkeyBaseline(seedPubkey []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
  38  	return a.db.TraversePubkeyPubkeyBaseline(seedPubkey, maxDepth, direction)
  39  }
  40  
  41  // Verify GraphAdapter implements graph.GraphDatabase
  42  var _ graph.GraphDatabase = (*GraphAdapter)(nil)
  43