diff --git a/racket/syndicate/actor.rkt b/racket/syndicate/actor.rkt index e7ed416..27c4f22 100644 --- a/racket/syndicate/actor.rkt +++ b/racket/syndicate/actor.rkt @@ -480,13 +480,13 @@ (define-syntax (query-value* stx) (syntax-parse stx - [(_ field-name absent-expr P expr on-add:on-add on-remove:on-remove) + [(_ field-name absent-expr P L:meta-level expr on-add:on-add on-remove:on-remove) (quasisyntax/loc stx (let () - (on (asserted P) #:priority *query-priority* + (on (asserted P #:meta-level L.level) #:priority *query-priority* #,@(schedule-query-handler-stxs (attribute on-add.expr)) (field-name expr)) - (on (retracted P) #:priority *query-priority* + (on (retracted P #:meta-level L.level) #:priority *query-priority* #,@(schedule-query-handler-stxs (attribute on-remove.expr)) (field-name absent-expr)) field-name))])) @@ -501,13 +501,13 @@ (define-syntax (query-set* stx) (syntax-parse stx - [(_ field-name P expr on-add:on-add on-remove:on-remove) + [(_ field-name P L:meta-level expr on-add:on-add on-remove:on-remove) (quasisyntax/loc stx (let () - (on (asserted P) #:priority *query-priority* + (on (asserted P #:meta-level L.level) #:priority *query-priority* #,@(schedule-query-handler-stxs (attribute on-add.expr)) (field-name (set-add (field-name) expr))) - (on (retracted P) #:priority *query-priority* + (on (retracted P #:meta-level L.level) #:priority *query-priority* #,@(schedule-query-handler-stxs (attribute on-remove.expr)) (field-name (set-remove (field-name) expr))) field-name))])) @@ -522,10 +522,10 @@ (define-syntax (query-hash* stx) (syntax-parse stx - [(_ field-name P key-expr value-expr on-add:on-add on-remove:on-remove) + [(_ field-name P L:meta-level key-expr value-expr on-add:on-add on-remove:on-remove) (quasisyntax/loc stx (let () - (on (asserted P) #:priority *query-priority* + (on (asserted P #:meta-level L.level) #:priority *query-priority* (let ((key key-expr)) (when (hash-has-key? (field-name) key) (log-warning "query-hash: field ~v with pattern ~v: overwriting existing entry ~v" @@ -534,7 +534,7 @@ key)) #,@(schedule-query-handler-stxs (attribute on-add.expr)) (field-name (hash-set (field-name) key value-expr)))) - (on (retracted P) #:priority *query-priority* + (on (retracted P #:meta-level L.level) #:priority *query-priority* #,@(schedule-query-handler-stxs (attribute on-remove.expr)) (field-name (hash-remove (field-name) key-expr))) field-name))])) @@ -549,13 +549,13 @@ (define-syntax (query-hash-set* stx) (syntax-parse stx - [(_ field-name P key-expr value-expr on-add:on-add on-remove:on-remove) + [(_ field-name P L:meta-level key-expr value-expr on-add:on-add on-remove:on-remove) (quasisyntax/loc stx (let () - (on (asserted P) #:priority *query-priority* + (on (asserted P #:meta-level L.level) #:priority *query-priority* #,@(schedule-query-handler-stxs (attribute on-add.expr)) (field-name (hashset-add (field-name) key-expr value-expr))) - (on (retracted P) #:priority *query-priority* + (on (retracted P #:meta-level L.level) #:priority *query-priority* #,@(schedule-query-handler-stxs (attribute on-remove.expr)) (field-name (hashset-remove (field-name) key-expr value-expr))) field-name))])) diff --git a/racket/syndicate/examples/actor/query-set.rkt b/racket/syndicate/examples/actor/query-set.rkt index db8676b..55d661e 100644 --- a/racket/syndicate/examples/actor/query-set.rkt +++ b/racket/syndicate/examples/actor/query-set.rkt @@ -44,6 +44,7 @@ (flush-output)))) (actor #:name 'mutator + (until (asserted 'observer-in-ds-ready)) (assert! `(item a 1)) (assert! `(item b 2)) (assert! `(item b 3)) @@ -54,3 +55,12 @@ (assert! `(item c 4)) (send! 'dump) (forever)) + +(dataspace (actor #:name 'observer-in-ds + (forever + (assert 'observer-in-ds-ready #:meta-level 1) + (on-start (log-info "observer-in-ds: STARTING")) + (define/query-set items `(item ,$a ,$b) #:meta-level 1 (list a b)) + (on (message 'dump #:meta-level 1) + (log-info "observer-in-ds: ~v" (items))))) + (forever))