Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ The model is intentionally SQL-shaped. If a step needs arbitrary code, a non-HTT
-- A durable function that processes data in steps
SELECT df.start(
'SELECT id FROM documents WHERE processed = false LIMIT 100' |=> 'batch'
~> 'UPDATE documents SET processed = true WHERE id = ANY($batch)'
~> 'UPDATE documents SET processed = true WHERE id IN (SELECT id FROM $batch.*)'
);
```

Expand Down
20 changes: 10 additions & 10 deletions USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ Access specific columns by name instead of just the first column:
```sql
SELECT df.start(
$$SELECT 42 AS id, 'Alice' AS name$$ |=> 'user'
~> $$SELECT $user.id, $user.name$$ -- access specific columns
~> $$SELECT $user.id AS id, $user.name AS name$$ -- access specific columns
);
```

Expand Down Expand Up @@ -557,11 +557,11 @@ Use `df.if_rows()` to branch based on whether a named result has rows — withou

```sql
SELECT df.start(
$$SELECT id FROM orders WHERE status = 'pending'$$ |=> 'pending'
$$SELECT id FROM playground.orders WHERE status = 'pending'$$ |=> 'pending'
~> df.if_rows(
'pending', -- result name
$$UPDATE orders SET status = 'processing' WHERE id = $pending.id$$, -- then
$$INSERT INTO logs (msg) VALUES ('No pending orders')$$ -- else
$$UPDATE playground.orders SET status = 'processing' WHERE id = $pending.id$$, -- then
$$INSERT INTO playground.logs (msg) VALUES ('No pending orders')$$ -- else
),
'check-pending'
);
Expand Down Expand Up @@ -877,7 +877,7 @@ SELECT df.setvar('batch_size', '100');
-- Start the pipeline
SELECT df.start(
'SELECT * FROM {source_table} LIMIT {batch_size}::int' |=> 'batch'
~> 'INSERT INTO {target_table} SELECT * FROM ($batch) AS source',
~> 'INSERT INTO {target_table} SELECT * FROM $batch.*',
'etl-pipeline'
);
```
Expand Down Expand Up @@ -1136,13 +1136,13 @@ If the signal times out:

```sql
SELECT df.start(
'SELECT order_id, total FROM orders WHERE id = 1' |=> 'order'
'SELECT id, total FROM orders WHERE id = 1' |=> 'order'
~> df.wait_for_signal('approval', 86400) |=> 'sig' -- 24h timeout
~> df.if(
'SELECT NOT ($sig::jsonb->>''timed_out'')::boolean
AND ($sig::jsonb->''data''->>''approved'')::boolean',
'UPDATE orders SET status = ''approved'' WHERE id = $order_id',
'UPDATE orders SET status = ''rejected'' WHERE id = $order_id'
'UPDATE orders SET status = ''approved'' WHERE id = $order.id',
'UPDATE orders SET status = ''rejected'' WHERE id = $order.id'
),
'order-approval'
);
Expand All @@ -1157,13 +1157,13 @@ Wait for multiple approvals using `df.join3()`:

```sql
SELECT df.start(
'SELECT doc_id FROM documents WHERE id = 1' |=> 'doc'
'SELECT id FROM documents WHERE id = 1' |=> 'doc'
~> df.join3(
df.wait_for_signal('legal_approval'),
df.wait_for_signal('tech_approval'),
df.wait_for_signal('mgmt_approval')
) |=> 'approvals'
~> 'UPDATE documents SET status = ''approved'' WHERE id = $doc_id',
~> 'UPDATE documents SET status = ''approved'' WHERE id = $doc.id',
'multi-approval'
);

Expand Down
23 changes: 11 additions & 12 deletions docs/spec-signals.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ The `df.wait_for_signal()` function returns a JSON object:

```sql
SELECT df.start(
'SELECT order_id FROM orders WHERE id = 1' |=> 'order'
'SELECT id FROM orders WHERE id = 1' |=> 'order'
~> df.wait_for_signal('approval') |=> 'sig'
~> 'INSERT INTO audit_log VALUES ($order_id, $sig::jsonb->''data''->>''approver'')',
~> 'INSERT INTO audit_log VALUES ($order.id, $sig::jsonb->''data''->>''approver'')',
'order-approval'
);

Expand All @@ -82,18 +82,18 @@ SELECT df.signal('a1b2c3d4', 'approval', '{"approved": true, "approver": "jane"}

```sql
SELECT df.start(
'SELECT order_id FROM orders WHERE id = 1' |=> 'order'
'SELECT id FROM orders WHERE id = 1' |=> 'order'
~> df.wait_for_signal('approval', 86400) |=> 'sig' -- 24 hour timeout
~> df.if(
'SELECT NOT ($sig::jsonb->>''timed_out'')::boolean',
-- Signal received
df.if(
'SELECT ($sig::jsonb->''data''->>''approved'')::boolean',
'UPDATE orders SET status = ''approved'' WHERE id = $order_id',
'UPDATE orders SET status = ''rejected'' WHERE id = $order_id'
'UPDATE orders SET status = ''approved'' WHERE id = $order.id',
'UPDATE orders SET status = ''rejected'' WHERE id = $order.id'
),
-- Timed out
'UPDATE orders SET status = ''expired'' WHERE id = $order_id'
'UPDATE orders SET status = ''expired'' WHERE id = $order.id'
),
'order-with-timeout'
);
Expand All @@ -103,13 +103,13 @@ SELECT df.start(

```sql
SELECT df.start(
'SELECT doc_id FROM documents WHERE id = 1' |=> 'doc'
'SELECT id FROM documents WHERE id = 1' |=> 'doc'
~> df.join3(
df.wait_for_signal('legal_approval'),
df.wait_for_signal('tech_approval'),
df.wait_for_signal('mgmt_approval')
) |=> 'approvals'
~> 'UPDATE documents SET status = ''approved'' WHERE id = $doc_id',
~> 'UPDATE documents SET status = ''approved'' WHERE id = $doc.id',
'multi-approval'
);

Expand Down Expand Up @@ -635,13 +635,13 @@ SELECT df.signal('instance_id', 'signal_name', '{"data": "value"}');

```sql
SELECT df.start(
'SELECT order_id, total FROM orders WHERE id = 1' |=> 'order'
'SELECT id, total FROM orders WHERE id = 1' |=> 'order'
~> df.wait_for_signal('approval', 86400) |=> 'sig'
~> df.if(
'SELECT NOT ($sig::jsonb->>''timed_out'')::boolean
AND ($sig::jsonb->''data''->>''approved'')::boolean',
'UPDATE orders SET status = ''approved'' WHERE id = $order_id',
'UPDATE orders SET status = ''rejected'' WHERE id = $order_id'
'UPDATE orders SET status = ''approved'' WHERE id = $order.id',
'UPDATE orders SET status = ''rejected'' WHERE id = $order.id'
),
'order-approval'
);
Expand Down Expand Up @@ -675,4 +675,3 @@ SELECT df.signal('a1b2c3d4', 'approval', '{"approved": true}');
- [x] Add to Quick Reference Card

**Implementation completed: December 2024**

2 changes: 1 addition & 1 deletion examples/azure-http-domains/scripts/smoke_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the PostgreSQL License.

# Offline syntax validation for all scripts and SQL in this example.
# Offline validation for shell syntax and required service files in this example.
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
Expand Down
Loading