aboutsummaryrefslogblamecommitdiffstats
path: root/docs/reactive-queries.puml
blob: bcba5d53b0a2749edfc11011744baff93e7768ff (plain) (tree)


















































                                                       
@startuml reactive-queries
!theme plain
title Reactive Queries (Live Subscriptions)

participant "Client" as C
participant "Subscription Manager" as SM
participant "Domino" as D
database "employee relation" as E

C -> SM: subscribe(query: "age > 30")
activate SM
SM -> D: register_subscription(employee, predicate)
activate D
D -> E: initial query
E --> D: [{name: "Alice", age: 35}]
D --> SM: initial results
SM --> C: [{name: "Alice", age: 35}]
deactivate D
deactivate SM

... time passes ...

C -> D: insert(employee, {name: "Bob", age: 32})
activate D
D -> D: check affected subscriptions
D -> D: evaluate predicate on new tuple\n(32 > 30? yes)
D -> SM: notify(subscription_id, {inserted: "Bob"})
activate SM
SM -> C: delta: {inserted: {name: "Bob", age: 32}}
deactivate SM
deactivate D

C -> D: insert(employee, {name: "Charlie", age: 25})
activate D
D -> D: evaluate predicate\n(25 > 30? no)
D -> D: no notification needed
deactivate D

note right of SM
  Subscription tracks:
  - Relation(s) to watch
  - Filter predicate
  - Client callback

  On mutation:
  1. Check which subscriptions affected
  2. Evaluate predicate on changed tuples
  3. Send delta (not full re-query)
end note

@enduml