1 import Base 2 import ./change_tick.bend as Tick 3 import ./decode_frame.bend as F 4 import ./decode_owned_journal.bend as Journal 5 import ./decode_requests.bend as Request 6 import ./component.bend as Cmp 7 import ./column.bend as Col 8 import ./compose.bend as Query 9 import ./capabilities.bend as Cap 10 import ./world.bend as W 11 import ./transaction.bend as T 12 import ./bundle_batch.bend as Batch 13 import ./decode_data.bend as D 14 import ./ordinary_declaration.bend as Identity 15 import ./persistence_declaration.bend as Declaration 16 17 type Output is Type:Written{} Refused{owner:Maybe<&1,P>,error:W.WorldError} 18 def written(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~Q:Type,~identity:Identity.Declaration,~project:P -> P & D.Raw,declaration:Declaration.Constructed,prepared:List>>,handle:W.Handle,error:Maybe<&2,W.WorldError>,cursor:Maybe<&2,Tick.Tick>,receipts:List,Request.Packet

,Q>>,pending:List>,result:Cmp.SetResult,E>,P>) -> F.Frame & Output

: 19 match result: 20 case Cmp.Written{tx}:(F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,error,cursor,receipts,pending},Written{}) 21 case Cmp.WriteRejected{tx,owner,+reason}:(F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,Query.first_error(error,reason),cursor,receipts,pending},Refused{Some{owner},reason}) 22 case Cmp.WriteFailure{tx,+reason}:(F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,Query.first_error(error,reason),cursor,receipts,pending},Refused{None{},reason}) 23 24 def set(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~Q:Type,~identity:Identity.Declaration,~project:P -> P & D.Raw,~Rest:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column,~put:Rest -> Col.Column -> Store,~view:P -> P & V,~family:Cmp.Family,frame:F.Frame,input:Query.Insert) -> F.Frame & Output

: 25 match frame input: 26 case F.Frame{Request.Owner{Batch.Batch{tx,prepared},declaration},handle,error,cursor,receipts,pending} Query.Insert{target,owner}:written(~S,~Store,~R,~E,~P,~Q,~identity,~project,declaration,prepared,handle,error,cursor,receipts,pending,Cmp.tx_set(~S,~Store,~R,~E,~Rest,~P,~V,~Token,~take,~put,~view,family,tx,target,owner)) 27 28 def grant(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~Q:Type,~identity:Identity.Declaration,~project:P -> P & D.Raw,~Rest:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column,~put:Rest -> Col.Column -> Store,~view:P -> P & V,~family:Cmp.Family) -> Cap.OwnedRequest,Query.Insert,Output

>: 29 Cap.OwnedRequest{frame => input => set(~S,~Store,~R,~E,~P,~Q,~identity,~project,~Rest,~V,~Token,~take,~put,~view,~family,frame,input)}