aboutsummaryrefslogtreecommitdiffstats
path: root/docs/reactive-queries.puml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2025-12-01 18:34:31 -0300
committerGitHub <noreply@github.com>2025-12-01 18:34:31 -0300
commit8c8b32d59acc78c7c3e1e8ecae8492a1b728b482 (patch)
treeb218e550b2b09e4920af6e12db531bfd65f65929 /docs/reactive-queries.puml
parente03b7c75be589d12ddc97d074abd2e3a5c6b7cdf (diff)
downloadSakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.tar.gz
Sakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.zip
Diagrams (#18)
Diffstat (limited to 'docs/reactive-queries.puml')
-rw-r--r--docs/reactive-queries.puml51
1 files changed, 51 insertions, 0 deletions
diff --git a/docs/reactive-queries.puml b/docs/reactive-queries.puml
new file mode 100644
index 0000000..bcba5d5
--- /dev/null
+++ b/docs/reactive-queries.puml
@@ -0,0 +1,51 @@
+@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