syndesizer: assert SQL results to a seperate cap

This commit is contained in:
Emery Hemingway 2024-01-16 20:21:52 +02:00
parent 028df08d66
commit ff1f1ac44b
6 changed files with 17 additions and 13 deletions

View File

@ -146,9 +146,11 @@ let ?sqlspace = dataspace
}> }>
] ]
$sqlspace <query example-row "SELECT id, name FROM stuff"> let ?tuplespace = dataspace
$sqlspace ? <example-row ?id ?name> [ $sqlspace <query example-row "SELECT id, name FROM stuff" $tuplespace>
$tuplespace ? <example-row ?id ?name> [
$log ! <log "-" { row: <example-row $id $name> }> $log ! <log "-" { row: <example-row $id $name> }>
] ]
``` ```
@ -193,9 +195,11 @@ let ?sqlspace = dataspace
}> }>
] ]
$sqlspace <query example-row "SELECT id, name FROM stuff"> let ?tuplespace = dataspace
$sqlspace ? <example-row ?id ?name> [ $sqlspace <query example-row "SELECT id, name FROM stuff" $tuplespace>
$tuplespace ? <example-row ?id ?name> [
$log ! <log "-" { row: <example-row $id $name> }> $log ! <log "-" { row: <example-row $id $name> }>
] ]
``` ```

View File

@ -1,6 +1,5 @@
version 1 . version 1 .
# When asserted the actor reponds with # When asserted the actor reponds to @target rows as records
# rows as records of the given label and # of the given label and row columns as record fields.
# row columns as record fields. Query = <query @label any @statement string @target #!any> .
Query = <query @label any @statement string> .

View File

@ -6,6 +6,7 @@ type
Query* {.preservesRecord: "query".} = object Query* {.preservesRecord: "query".} = object
`label`*: Value `label`*: Value
`statement`*: string `statement`*: string
`target`* {.preservesEmbedded.}: Value
proc `$`*(x: Query): string = proc `$`*(x: Query): string =
`$`(toPreserves(x)) `$`(toPreserves(x))

View File

@ -103,7 +103,7 @@ proc spawnPostgreActor*(turn: var Turn; root: Cap): Actor {.discardable.} =
statusHandle = publish(turn, ds, statusHandle = publish(turn, ds,
initRecord("status", toSymbol($status), msg.toPreserves)) initRecord("status", toSymbol($status), msg.toPreserves))
if status == CONNECTION_OK: if status == CONNECTION_OK:
during(turn, ds, ?:Query) do (label: Value, statement: string): during(turn, ds, ?:Query) do (label: Value, statement: string, target: Cap):
var res = PQexec(conn, statement) var res = PQexec(conn, statement)
var st = PQresultStatus(res) var st = PQresultStatus(res)
discard publish(turn, ds, toRecord( discard publish(turn, ds, toRecord(
@ -116,7 +116,7 @@ proc spawnPostgreActor*(turn: var Turn; root: Cap): Actor {.discardable.} =
var rec = initRecord(label, fields) var rec = initRecord(label, fields)
for f in 0..<fields: for f in 0..<fields:
rec[f] = toPreserves($PQgetvalue(res, r, f)) rec[f] = toPreserves($PQgetvalue(res, r, f))
discard publish(turn, ds, rec) discard publish(turn, target, rec)
PQclear(res) PQclear(res)
else: else:
stderr.writeLine "refusing to do anything when status is ", status stderr.writeLine "refusing to do anything when status is ", status

View File

@ -85,7 +85,7 @@ proc spawnSqliteActor*(turn: var Turn; root: Cap): Actor {.discardable.} =
if open_v2(path, addr db, SQLITE_OPEN_READONLY, nil) != SQLITE_OK: if open_v2(path, addr db, SQLITE_OPEN_READONLY, nil) != SQLITE_OK:
logError(db, path) logError(db, path)
else: else:
during(turn, ds, ?:Query) do (label: Value, statement: string): during(turn, ds, ?:Query) do (label: Value, statement: string, target: Cap):
var stmt: Stmt var stmt: Stmt
if prepare_v2(db, statement, statement.len.cint, addr stmt, nil) != SQLITE_OK: if prepare_v2(db, statement, statement.len.cint, addr stmt, nil) != SQLITE_OK:
logError(db, statement) logError(db, statement)
@ -95,7 +95,7 @@ proc spawnSqliteActor*(turn: var Turn; root: Cap): Actor {.discardable.} =
var res = step(stmt) var res = step(stmt)
while res == SQLITE_ROW: while res == SQLITE_ROW:
var rec = extractRecord(stmt, label, arity) var rec = extractRecord(stmt, label, arity)
discard publish(turn, ds, rec) discard publish(turn, target, rec)
res = step(stmt) res = step(stmt)
assert res != 100 assert res != 100
if res != SQLITE_DONE: if res != SQLITE_DONE:

View File

@ -1,6 +1,6 @@
# Package # Package
version = "20240114" version = "20240116"
author = "Emery Hemingway" author = "Emery Hemingway"
description = "Utilites for Syndicated Actors and Synit" description = "Utilites for Syndicated Actors and Synit"
license = "unlicense" license = "unlicense"