1import * as DynamoDB from "@distilled.cloud/aws/dynamodb";
2import * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Table } from "./Table.ts";
5
6export interface ExecuteStatementRequest
7 extends DynamoDB.ExecuteStatementInput {}
8
9/**
10 * Runtime binding for DynamoDB PartiQL `ExecuteStatement`.
11 *
12 * This binding scopes IAM to a specific table, but the statement text is still
13 * user-provided. Statements must only reference the bound table or its indexes.
14 * ### PartiQL
15 * **Example:** Execute a Statement Against One Table
16 * ```typescript
17 * const executeStatement = yield* AWS.DynamoDB.ExecuteStatement(table);
18 *
19 * const response = yield* executeStatement({
20 * Statement: `SELECT * FROM "${yield* table.tableName}" WHERE pk=?`,
21 * Parameters: [{ S: "user#1" }],
22 * });
23 * ```
24 *
25 * @binding
26 */
27export interface ExecuteStatement extends Binding.Service<
28 ExecuteStatement,
29 "AWS.DynamoDB.ExecuteStatement",
30 <T extends Table>(
31 table: T,
32 ) => Effect.Effect<
33 (
34 request: ExecuteStatementRequest,
35 ) => Effect.Effect<
36 DynamoDB.ExecuteStatementOutput,
37 DynamoDB.ExecuteStatementError
38 >
39 >
40> {}
41
42export const ExecuteStatement = Binding.Service<ExecuteStatement>(
43 "AWS.DynamoDB.ExecuteStatement",
44);