squid
Version:
Provides SQL tagged template strings and a schema definition function.
57 lines (56 loc) • 1.5 kB
TypeScript
import { QueryConfig } from "./config";
export interface SqlBuilder<T = any> {
$type: symbol;
values: T[];
buildText(nextParamID: number): string;
}
/**
* Generate the full SQL query.
*/
export declare function buildSql<T>(builder: SqlBuilder<T>): QueryConfig<T>;
/**
* Merge the given SqlBuilders, concatenating the text values and parametrized
* values.
*
* @example
* const builder = joinSql([rawSqlBuilder("foo = "), paramSqlBuilder("bar")])
* builder.buildFragment(1) ==> {
* text: "foo = $1",
* values: ["bar"]
* }
*
* @example
* const builder = joinSql(
* [rawSqlBuilder("foo"), paramSqlBuilder("bar")]
* " = "
* )
* builder.buildFragment(1) ==> {
* text: "foo = $1",
* values: ["bar"]
* }
*/
export declare function joinSql<T>(builders: Array<SqlBuilder<T>>, delimiter?: string): SqlBuilder<T>;
/**
* Convert the given value to a SqlBuilder if it's not already.
*/
export declare function toSqlBuilder<T>(value: SqlBuilder<T> | T): SqlBuilder<T>;
/**
* A SqlBuilder that renders the given value directly.
*
* @example
* rawSqlBuilder("hello").buildFragment(1) ==> {
* text: "hello",
* values: []
* }
*/
export declare function rawSqlBuilder(value: string): SqlBuilder<string>;
/**
* A SqlBuilder that marks the given value to be parametrized.
*
* @example
* paramSqlBuilder("hello").buildFragment(1) ==> {
* text: "$1",
* values: ["hello"]
* }
*/
export declare function paramSqlBuilder<T>(value: T): SqlBuilder<T>;