UNPKG

drizzle-orm

Version:

Drizzle ORM package for SQL databases

150 lines (149 loc) • 7.84 kB
import type { ColumnBuilderBase, ColumnBuilderBaseConfig, ColumnBuilderExtraConfig, ColumnBuilderRuntimeConfig, ColumnDataType, HasGenerated } from "../../column-builder.js"; import { ColumnBuilder } from "../../column-builder.js"; import type { ColumnBaseConfig } from "../../column.js"; import { Column } from "../../column.js"; import { entityKind } from "../../entity.js"; import type { Simplify, Update } from "../../utils.js"; import type { UpdateDeleteAction } from "../foreign-keys.js"; import type { AnyPgTable, PgTable } from "../table.js"; import type { SQL } from "../../sql/sql.js"; import type { PgIndexOpClass } from "../indexes.js"; export interface ReferenceConfig { ref: () => PgColumn; actions: { onUpdate?: UpdateDeleteAction; onDelete?: UpdateDeleteAction; }; } export interface PgColumnBuilderBase<T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>, TTypeConfig extends object = object> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'pg'; }> { } export declare abstract class PgColumnBuilder<T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>, TRuntimeConfig extends object = object, TTypeConfig extends object = object, TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg'; }, TExtraConfig> implements PgColumnBuilderBase<T, TTypeConfig> { private foreignKeyConfigs; static readonly [entityKind]: string; array<TSize extends number | undefined = undefined>(size?: TSize): PgArrayBuilder<{ name: T['name']; dataType: 'array'; columnType: 'PgArray'; data: T['data'][]; driverParam: T['driverParam'][] | string; enumValues: T['enumValues']; size: TSize; baseBuilder: T; } & (T extends { notNull: true; } ? { notNull: true; } : {}) & (T extends { hasDefault: true; } ? { hasDefault: true; } : {}), T>; references(ref: ReferenceConfig['ref'], actions?: ReferenceConfig['actions']): this; unique(name?: string, config?: { nulls: 'distinct' | 'not distinct'; }): this; generatedAlwaysAs(as: SQL | T['data'] | (() => SQL)): HasGenerated<this, { type: 'always'; }>; } export declare abstract class PgColumn<T extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>, TRuntimeConfig extends object = {}, TTypeConfig extends object = {}> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg'; }> { readonly table: PgTable; static readonly [entityKind]: string; constructor(table: PgTable, config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>); } export type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string; }; export declare class ExtraConfigColumn<T extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>> extends PgColumn<T, IndexedExtraConfigType> { static readonly [entityKind]: string; getSQLType(): string; indexConfig: IndexedExtraConfigType; defaultConfig: IndexedExtraConfigType; asc(): Omit<this, 'asc' | 'desc'>; desc(): Omit<this, 'asc' | 'desc'>; nullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'>; nullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'>; /** * ### PostgreSQL documentation quote * * > An operator class with optional parameters can be specified for each column of an index. * The operator class identifies the operators to be used by the index for that column. * For example, a B-tree index on four-byte integers would use the int4_ops class; * this operator class includes comparison functions for four-byte integers. * In practice the default operator class for the column's data type is usually sufficient. * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering. * For example, we might want to sort a complex-number data type either by absolute value or by real part. * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index. * More information about operator classes check: * * ### Useful links * https://www.postgresql.org/docs/current/sql-createindex.html * * https://www.postgresql.org/docs/current/indexes-opclass.html * * https://www.postgresql.org/docs/current/xindex.html * * ### Additional types * If you have the `pg_vector` extension installed in your database, you can use the * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types. * * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types** * * @param opClass * @returns */ op(opClass: PgIndexOpClass): Omit<this, 'op'>; } export declare class IndexedColumn { static readonly [entityKind]: string; constructor(name: string | undefined, keyAsName: boolean, type: string, indexConfig: IndexedExtraConfigType); name: string | undefined; keyAsName: boolean; type: string; indexConfig: IndexedExtraConfigType; } export type AnyPgColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = PgColumn<Required<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>>; export type PgArrayColumnBuilderBaseConfig = ColumnBuilderBaseConfig<'array', 'PgArray'> & { size: number | undefined; baseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>; }; export declare class PgArrayBuilder<T extends PgArrayColumnBuilderBaseConfig, TBase extends ColumnBuilderBaseConfig<ColumnDataType, string> | PgArrayColumnBuilderBaseConfig> extends PgColumnBuilder<T, { baseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<TBase, TBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any>; } ? TBaseBuilder : never> : PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>; size: T['size']; }, { baseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<TBase, TBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any>; } ? TBaseBuilder : never> : PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>; size: T['size']; }> { static readonly [entityKind] = "PgArrayBuilder"; constructor(name: string, baseBuilder: PgArrayBuilder<T, TBase>['config']['baseBuilder'], size: T['size']); } export declare class PgArray<T extends ColumnBaseConfig<'array', 'PgArray'> & { size: number | undefined; baseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>; }, TBase extends ColumnBuilderBaseConfig<ColumnDataType, string>> extends PgColumn<T, {}, { size: T['size']; baseBuilder: T['baseBuilder']; }> { readonly baseColumn: PgColumn; readonly range?: [number | undefined, number | undefined] | undefined; readonly size: T['size']; static readonly [entityKind]: string; constructor(table: AnyPgTable<{ name: T['tableName']; }>, config: PgArrayBuilder<T, TBase>['config'], baseColumn: PgColumn, range?: [number | undefined, number | undefined] | undefined); getSQLType(): string; mapFromDriverValue(value: unknown[] | string): T['data']; mapToDriverValue(value: unknown[], isNestedArray?: boolean): unknown[] | string; }