EdgeAIG's picture
download
raw
17.1 kB
import * as Context from "../../Context.ts";
import * as Effect from "../../Effect.ts";
import type * as Fiber from "../../Fiber.ts";
import * as Stream from "../../Stream.ts";
import type * as Tracer from "../../Tracer.ts";
import type { Acquirer, Row } from "./SqlConnection.ts";
import type { SqlError } from "./SqlError.ts";
declare const FragmentTypeId = "~effect/sql/Fragment";
/**
* Composable SQL fragment represented as low-level segments that can be
* interpolated into statements.
*
* @category models
* @since 4.0.0
*/
export interface Fragment {
readonly [FragmentTypeId]: typeof FragmentTypeId;
readonly segments: ReadonlyArray<Segment>;
}
/**
* Constructs a SQL `Fragment` from low-level statement segments.
*
* @category constructors
* @since 4.0.0
*/
export declare const fragment: (segments: ReadonlyArray<Segment>) => Fragment;
/**
* Supported SQL dialect identifiers used by statement compilers.
*
* @category models
* @since 4.0.0
*/
export type Dialect = "sqlite" | "pg" | "mysql" | "mssql" | "clickhouse";
/**
* Executable SQL statement that is also a `Fragment` and `Effect`, with helpers
* for raw execution, streaming, value rows, unprepared execution, no-transform
* execution, and compilation.
*
* @category models
* @since 4.0.0
*/
export interface Statement<A> extends Fragment, Effect.Effect<ReadonlyArray<A>, SqlError> {
readonly raw: Effect.Effect<unknown, SqlError>;
readonly withoutTransform: Effect.Effect<ReadonlyArray<A>, SqlError>;
readonly stream: Stream.Stream<A, SqlError>;
readonly values: Effect.Effect<ReadonlyArray<ReadonlyArray<unknown>>, SqlError>;
readonly unprepared: Effect.Effect<ReadonlyArray<A>, SqlError>;
readonly compile: (withoutTransform?: boolean | undefined) => readonly [
sql: string,
params: ReadonlyArray<unknown>
];
}
/**
* Hook that can rewrite or wrap a `Statement` before execution, using the
* current SQL constructor, fiber, and tracing span.
*
* @category models
* @since 4.0.0
*/
export type Transformer = (self: Statement<unknown>, sql: Constructor, fiber: Fiber.Fiber<unknown, unknown>, span: Tracer.Span) => Effect.Effect<Statement<unknown>>;
/**
* Context reference for an optional current SQL statement transformer applied
* before statement execution.
*
* @category transformer
* @since 4.0.0
*/
export declare const CurrentTransformer: Context.Reference<Transformer | undefined>;
/**
* Returns `true` when a value is a SQL `Fragment`.
*
* @category guards
* @since 4.0.0
*/
export declare const isFragment: (u: unknown) => u is Fragment;
/**
* Creates a type guard for custom SQL segments with the specified custom kind.
*
* @category guards
* @since 4.0.0
*/
export declare const isCustom: <A extends Custom<any, any, any, any>>(kind: A["kind"]) => (u: unknown) => u is A;
/**
* Union of low-level segment types that make up a SQL `Fragment`.
*
* @category models
* @since 4.0.0
*/
export type Segment = Literal | Identifier | Parameter | ArrayHelper | RecordInsertHelper | RecordUpdateHelper | RecordUpdateHelperSingle | Custom<any, any, any, any>;
/**
* Raw SQL literal segment. The literal text is inserted directly into the
* compiled SQL, while optional `params` are appended as bind parameters.
*
* @category models
* @since 4.0.0
*/
export interface Literal {
readonly _tag: "Literal";
readonly value: string;
readonly params?: ReadonlyArray<unknown> | undefined;
}
/**
* Constructs a raw SQL literal segment. The literal text is not escaped, so use
* bound parameters for untrusted values.
*
* @category constructors
* @since 4.0.0
*/
export declare const literal: (value: string, params?: ReadonlyArray<unknown> | undefined) => Literal;
/**
* SQL identifier segment whose value is escaped by the active dialect compiler.
*
* @category models
* @since 4.0.0
*/
export interface Identifier {
readonly _tag: "Identifier";
readonly value: string;
}
/**
* Constructs a SQL identifier segment that will be escaped by the active
* compiler.
*
* @category constructors
* @since 4.0.0
*/
export declare const identifier: (value: string) => Identifier;
/**
* Bound parameter segment whose value is emitted as a dialect-specific
* placeholder and bind value.
*
* @category models
* @since 4.0.0
*/
export interface Parameter {
readonly _tag: "Parameter";
readonly value: unknown;
}
/**
* Constructs a bound parameter segment for a statement value.
*
* @category constructors
* @since 4.0.0
*/
export declare const parameter: (value: unknown) => Parameter;
/**
* Helper segment for compiling an array of values, commonly used to produce
* placeholder lists for `IN` clauses.
*
* @category models
* @since 4.0.0
*/
export interface ArrayHelper {
readonly _tag: "ArrayHelper";
readonly value: ReadonlyArray<unknown | Fragment>;
}
/**
* Constructs an `ArrayHelper` segment for an array of values or fragments.
*
* @category constructors
* @since 4.0.0
*/
export declare const arrayHelper: (value: ReadonlyArray<unknown | Fragment>) => ArrayHelper;
/**
* Helper segment for compiling one or more record objects into an INSERT
* column/value clause, with optional returning output.
*
* @category models
* @since 4.0.0
*/
export interface RecordInsertHelper {
readonly _tag: "RecordInsertHelper";
readonly value: ReadonlyArray<Record<string, unknown>>;
readonly returning: (sql: string | Identifier | Fragment) => RecordInsertHelper;
}
/**
* Constructs a `RecordInsertHelper` from one or more row objects.
*
* @category constructors
* @since 4.0.0
*/
export declare const recordInsertHelper: (value: ReadonlyArray<Record<string, unknown>>) => RecordInsertHelper;
/**
* Helper segment for compiling multi-row update values with a table alias and
* optional returning output.
*
* @category models
* @since 4.0.0
*/
export interface RecordUpdateHelper {
readonly _tag: "RecordUpdateHelper";
readonly value: ReadonlyArray<Record<string, unknown>>;
readonly alias: string;
readonly returning: (sql: string | Identifier | Fragment) => RecordUpdateHelper;
}
/**
* Constructs a `RecordUpdateHelper` for multi-row update compilation using the
* provided alias.
*
* @category constructors
* @since 4.0.0
*/
export declare const recordUpdateHelper: (value: ReadonlyArray<Record<string, unknown>>, alias: string) => RecordUpdateHelper;
/**
* Helper segment for compiling a single record into update assignments,
* omitting selected columns and optionally returning output.
*
* @category models
* @since 4.0.0
*/
export interface RecordUpdateHelperSingle {
readonly _tag: "RecordUpdateHelperSingle";
readonly value: Record<string, unknown>;
readonly omit: ReadonlyArray<string>;
readonly returning: (sql: string | Identifier | Fragment) => RecordUpdateHelperSingle;
}
/**
* Constructs a `RecordUpdateHelperSingle` from a record and a list of columns
* to omit from the update.
*
* @category constructors
* @since 4.0.0
*/
export declare const recordUpdateHelperSingle: (value: Record<string, unknown>, omit: ReadonlyArray<string>) => RecordUpdateHelperSingle;
/**
* Custom SQL segment identified by `kind` and interpreted by the compiler's
* `onCustom` callback.
*
* @category models
* @since 4.0.0
*/
export interface Custom<T extends string = string, A = void, B = void, C = void> {
readonly _tag: "Custom";
readonly kind: T;
readonly paramA: A;
readonly paramB: B;
readonly paramC: C;
}
/**
* Creates a constructor for custom SQL segments of a specific kind handled by
* the active compiler.
*
* @category constructors
* @since 4.0.0
*/
export declare const custom: <C extends Custom<any, any, any, any>>(kind: C["kind"]) => (paramA: C["paramA"], paramB: C["paramB"], paramC: C["paramC"]) => C;
/**
* Names the primitive value categories recognized by SQL statement helpers and
* `primitiveKind`.
*
* @category models
* @since 4.0.0
*/
export type PrimitiveKind = "string" | "number" | "bigint" | "boolean" | "Date" | "null" | "Int8Array" | "Uint8Array";
/**
* Union of helper segment types accepted by the SQL statement constructor.
*
* @category models
* @since 4.0.0
*/
export type Helper = ArrayHelper | RecordInsertHelper | RecordUpdateHelper | RecordUpdateHelperSingle | Identifier | Custom;
/**
* SQL tagged-template constructor and helper API for building parameterized
* statements, escaped identifiers, fragments, record helpers, and
* dialect-specific branches. Raw helpers such as `unsafe` and `literal` insert
* SQL text directly.
*
* @category models
* @since 4.0.0
*/
export interface Constructor {
<A extends object = Row>(strings: TemplateStringsArray, ...args: Array<any>): Statement<A>;
(value: string): Identifier;
/**
* Create unsafe SQL query
*/
readonly unsafe: <A extends object>(sql: string, params?: ReadonlyArray<unknown> | undefined) => Statement<A>;
readonly literal: (sql: string) => Fragment;
readonly in: {
(value: ReadonlyArray<unknown>): ArrayHelper;
(column: string, value: ReadonlyArray<unknown>): Fragment;
};
readonly insert: {
(value: ReadonlyArray<Record<string, unknown>>): RecordInsertHelper;
(value: Record<string, unknown>): RecordInsertHelper;
};
/** Update a single row */
readonly update: <A extends Record<string, unknown>>(value: A, omit?: ReadonlyArray<keyof A>) => RecordUpdateHelperSingle;
/**
* Update multiple rows.
*
* **Gotchas**
*
* Not supported in sqlite.
*/
readonly updateValues: (value: ReadonlyArray<Record<string, unknown>>, alias: string) => RecordUpdateHelper;
/**
* Create an `AND` chain for a where clause
*/
readonly and: (clauses: ReadonlyArray<string | Fragment>) => Fragment;
/**
* Create an `OR` chain for a where clause
*/
readonly or: (clauses: ReadonlyArray<string | Fragment>) => Fragment;
/**
* Create comma seperated values, with an optional prefix.
*
* **When to use**
*
* Use when `ORDER BY` and `GROUP BY` clauses.
*/
readonly csv: {
(values: ReadonlyArray<string | Fragment>): Fragment;
(prefix: string, values: ReadonlyArray<string | Fragment>): Fragment;
};
readonly join: (literal: string, addParens?: boolean, fallback?: string) => (clauses: ReadonlyArray<string | Fragment>) => Fragment;
readonly onDialect: <A, B, C, D, E>(options: {
readonly sqlite: () => A;
readonly pg: () => B;
readonly mysql: () => C;
readonly mssql: () => D;
readonly clickhouse: () => E;
}) => A | B | C | D | E;
readonly onDialectOrElse: <A, B = never, C = never, D = never, E = never, F = never>(options: {
readonly orElse: () => A;
readonly sqlite?: () => B;
readonly pg?: () => C;
readonly mysql?: () => D;
readonly mssql?: () => E;
readonly clickhouse?: () => F;
}) => A | B | C | D | E | F;
}
/**
* Creates a cached SQL statement constructor from a connection acquirer,
* compiler, tracing attributes, and optional row transformation function.
*
* @category constructors
* @since 4.0.0
*/
export declare const make: (acquirer: Acquirer, compiler: Compiler, spanAttributes: ReadonlyArray<readonly [string, unknown]>, transformRows: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined) => Constructor;
/**
* Builds a `Statement` from template strings and arguments, preserving
* fragments and helper segments while converting ordinary interpolated values
* into bound parameters.
*
* @category constructors
* @since 4.0.0
*/
export declare const statement: <A = Row>(acquirer: Acquirer, compiler: Compiler, strings: TemplateStringsArray, args: Array<any>, spanAttributes: ReadonlyArray<readonly [string, unknown]>, transformRows: (<A_1 extends object>(row: ReadonlyArray<A_1>) => ReadonlyArray<A_1>) | undefined) => Statement<A>;
/**
* Creates a helper that joins SQL clauses with a literal separator, optionally
* wrapping multiple clauses in parentheses and using a fallback for an empty
* list.
*
* @category constructors
* @since 4.0.0
*/
export declare function join(lit: string, addParens?: boolean, fallback?: string): (clauses: ReadonlyArray<string | Fragment>) => Fragment;
/**
* Combines clauses with `AND`, parenthesizing multiple clauses and returning
* `1=1` when the list is empty.
*
* @category constructors
* @since 4.0.0
*/
export declare const and: (clauses: ReadonlyArray<string | Fragment>) => Fragment;
/**
* Combines clauses with `OR`, parenthesizing multiple clauses and returning
* `1=1` when the list is empty.
*
* @category constructors
* @since 4.0.0
*/
export declare const or: (clauses: ReadonlyArray<string | Fragment>) => Fragment;
/**
* Creates a comma-separated SQL fragment from values, optionally adding a
* prefix, and returns an empty fragment when no values are provided.
*
* @category constructors
* @since 4.0.0
*/
export declare const csv: {
/**
* Creates a comma-separated SQL fragment from values, optionally adding a
* prefix, and returns an empty fragment when no values are provided.
*
* @category constructors
* @since 4.0.0
*/
(values: ReadonlyArray<string | Fragment>): Fragment;
/**
* Creates a comma-separated SQL fragment from values, optionally adding a
* prefix, and returns an empty fragment when no values are provided.
*
* @category constructors
* @since 4.0.0
*/
(prefix: string, values: ReadonlyArray<string | Fragment>): Fragment;
};
/**
* Dialect-specific compiler that converts a SQL `Fragment` into SQL text and
* bind parameters, with a no-transform variant.
*
* @category compiler
* @since 4.0.0
*/
export interface Compiler {
readonly dialect: Dialect;
readonly compile: (statement: Fragment, withoutTransform: boolean) => readonly [sql: string, params: ReadonlyArray<unknown>];
readonly withoutTransform: this;
}
/**
* Callbacks used by `makeCompiler` to render dialect placeholders,
* identifiers, insert helpers, update helpers, and custom SQL segments.
*
* @category compiler
* @since 4.0.0
*/
export type CompilerOptions<C extends Custom<any, any, any, any> = any> = {
readonly dialect: Dialect;
readonly placeholder: (index: number, value: unknown) => string;
readonly onIdentifier: (value: string, withoutTransform: boolean) => string;
readonly onRecordUpdate: (placeholders: string, alias: string, columns: string, values: ReadonlyArray<ReadonlyArray<unknown>>, returning: readonly [sql: string, params: ReadonlyArray<unknown>] | undefined) => readonly [sql: string, params: ReadonlyArray<unknown>];
readonly onCustom: (type: C, placeholder: (u: unknown) => string, withoutTransform: boolean) => readonly [sql: string, params: ReadonlyArray<unknown>];
readonly onInsert?: (columns: ReadonlyArray<string>, placeholders: string, values: ReadonlyArray<ReadonlyArray<unknown>>, returning: readonly [sql: string, params: ReadonlyArray<unknown>] | undefined) => readonly [sql: string, binds: ReadonlyArray<unknown>];
readonly onRecordUpdateSingle?: (columns: ReadonlyArray<string>, values: ReadonlyArray<unknown>, returning: readonly [sql: string, params: ReadonlyArray<unknown>] | undefined) => readonly [sql: string, params: ReadonlyArray<unknown>];
};
/**
* Creates a dialect-specific SQL `Compiler` from rendering callbacks.
*
* @category compiler
* @since 4.0.0
*/
export declare const makeCompiler: <C extends Custom<any, any, any, any> = any>(options: CompilerOptions<C>) => Compiler;
/**
* Creates a SQLite compiler that uses `?` placeholders and quoted identifiers,
* optionally transforming identifier names before escaping.
*
* @category compiler
* @since 4.0.0
*/
export declare const makeCompilerSqlite: (transform?: ((_: string) => string) | undefined) => Compiler;
/**
* Creates an identifier escaping function that wraps names in the given
* delimiter, doubles delimiter characters, and escapes dots between identifier
* parts.
*
* @category constructors
* @since 4.0.0
*/
export declare function defaultEscape(c: string): (str: string) => string;
/**
* Classifies a JavaScript value as a SQL primitive kind, treating `undefined`
* as `null` and defaulting unrecognized objects to `string`.
*
* @category predicates
* @since 4.0.0
*/
export declare const primitiveKind: (value: unknown) => PrimitiveKind;
/**
* Builds value, object, and row-array transformers that rename object keys with
* the supplied function and optionally recurse into nested object arrays.
*
* @category transforming
* @since 4.0.0
*/
export declare const defaultTransforms: (transformer: (str: string) => string, nested?: boolean) => {
readonly value: (value: any) => any;
readonly object: (obj: Record<string, any>) => any;
readonly array: <A extends object>(rows: ReadonlyArray<A>) => ReadonlyArray<A>;
};
export {};
//# sourceMappingURL=Statement.d.ts.map

Xet Storage Details

Size:
17.1 kB
·
Xet hash:
daea3cd65e1777e8bb2e9564931a572f54d78d5a58b6fd1f7fc25637c031c218

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.