import { SqlValuesDataset } from "./SqlValuesDataset.ts"; import { TemplateSqlStatement } from "./ValueSqlTemplate.ts"; import { AssertJsType, ObjectToValueKeys } from "./type.ts"; export { TemplateSqlStatement } from "./ValueSqlTemplate.ts"; export type { SqlValuesDataset } from "./SqlValuesDataset.ts"; /** @public js 对象到编码函数的映射*/ export type JsObjectMapSql = Map any, SqlValueEncoder>; /** @public 将 js 值转为 SQl 字符串的函数*/ export type SqlValueEncoder = (this: SqlValuesCreator, value: T) => string; /** @public */ export type SqlValueFn = SqlValuesCreator & { /** * 安全将 JS 对象转为 SQL 的字符值的形式,可避免 SQL 注入。 * undefined 将被转换为 DEFAULT * @param assertType - 如果断言了基本类型,并且值的基本类型与断言的类型不一致,则会抛出异常。 如果不是基本类型,则 value 会被传递给指定的转义器 */ (value: any, assertType?: AssertJsType): string; }; /** * SQL value 生成器 * @public */ export declare class SqlValuesCreator { static create(map?: JsObjectMapSql): SqlValueFn; /** * 将字符串转为 SQL 的字符串值的形式(单引号会被转义)。 * @example 输入 a'b'c , 返回 a''b''c. */ static string(value: string): string; /** * @param map - 自定义对象转换 */ constructor(map?: JsObjectMapSql); /** 设置转换器 */ setTransformer(type: new (...args: any[]) => any, encoder?: SqlValueEncoder): void; setTransformer(map: JsObjectMapSql): void; private readonly _map; /** * 将 JS 对象转为 SQL 的字符值的形式 。 undefined 将被转换为 DEFAULT * ```ts * const v=SqlValuesCreator.create() * v() 和 v.toSqlStr() 是等价的 * ``` */ toSqlStr(value: any, assertJsType?: AssertJsType): string; /** @alpha */ gen(split: TemplateStringsArray, ...values: any[]): TemplateSqlStatement; /** 获取值对应已定义的类 */ getClassType(value: object): undefined | (new (...args: unknown[]) => unknown); protected defaultObject(value: object): string; /** * 将对象列表转为 SQL 的 VALUES。如果 objectList 中有某个对象的属性值为 undefined,则会被转换为 "DEFAULT" * @example 返回的文本示例: " (...),(...) " * @param columns - 选择的键。如果指定了 columns, 值为 undefined 的属性将自动填充为 null; 如果未指定 columns,将选择 objectList 所有不是 undefined 项的键的并集 */ createImplicitValues(objectList: T, columns?: ObjectToValueKeys): SqlValuesDataset; createImplicitValues(objectList: T[], columns?: ObjectToValueKeys): SqlValuesDataset; /** * 将对象列表转为 SQL 的 VALUES。如果 objectList 中有某个对象的属性值为 undefined,则会被转换为 "NULL" * @example 返回的文本示例: " (...),(...) " * @param columns - 选择的键。 */ createExplicitValues(objectList: T, columns?: ObjectToValueKeys): SqlValuesDataset; createExplicitValues(objectList: T[], columns?: ObjectToValueKeys): SqlValuesDataset; private _objectListToValues; private _objectToValue; /** * 将数组列表转为 SQL 的一个 value * @example * ```ts * v.toValues([1, "abc", null, undefined, { key: "value" }]) // `1,'abc',NULL,DEFAULT,'{"key":"value"}'` * ``` */ toValues(values: readonly any[]): string; }