syndesizer: assert SQL results to a seperate cap
This commit is contained in:
parent
028df08d66
commit
ff1f1ac44b
12
README.md
12
README.md
|
@ -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> }>
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
7
sql.prs
7
sql.prs
|
@ -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> .
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue