UNPKG

ts-sql-query

Version:

Type-safe SQL query builder like QueryDSL or JOOQ in Java or Linq in .Net for TypeScript with MariaDB, MySql, Oracle, PostgreSql, Sqlite and SqlServer support.

117 lines (116 loc) 5.89 kB
import type { AnyDB } from "../databases"; import { RawFragment } from "./RawFragment"; import type { database, noTableOrViewRequired, oldValues, outerJoinAlias, outerJoinDatabase, outerJoinTableOrView, resolvedShape, tableOrView, tableOrViewAlias, tableOrViewCustomName, tableOrViewRef, tableOrViewRefType, type, valuesForInsert } from "./symbols"; export interface ITableOrViewRef<DB extends AnyDB> { [database]: DB; [tableOrViewRefType]: 'tableOrViewRef'; } export interface OfDB<DB extends AnyDB> { [database]: DB; } export interface ITableOrView<REF extends ITableOrViewRef<AnyDB>> extends OfDB<REF[typeof database]> { [tableOrViewRef]: REF; } export interface ITableOrViewOf<DB extends AnyDB, REF extends ITableOrViewRef<DB>> extends ITableOrView<REF> { } interface Column { [type]: 'column'; } export interface HasIsValue { _isValue(value: any): boolean; } export interface HasAddWiths { __addWiths(sqlBuilder: HasIsValue, withs: Array<IWithView<any>>): void; __registerTableOrView(sqlBuilder: HasIsValue, requiredTablesOrViews: Set<ITableOrView<any>>): void; __registerRequiredColumn(sqlBuilder: HasIsValue, requiredColumns: Set<Column>, onlyForTablesOrViews: Set<ITableOrView<any>>): void; __getOldValues(sqlBuilder: HasIsValue): ITableOrView<any> | undefined; __getValuesForInsert(sqlBuilder: HasIsValue): ITableOrView<any> | undefined; __isAllowed(sqlBuilder: HasIsValue): boolean; } export declare function __addWiths(value: any, sqlBuilder: HasIsValue, withs: Array<IWithView<any>>): void; export declare function __registerTableOrView(value: any, sqlBuilder: HasIsValue, requiredTablesOrViews: Set<ITableOrView<any>>): void; export declare function __registerRequiredColumn(value: any, sqlBuilder: HasIsValue, requiredColumns: Set<Column>, onlyForTablesOrViews: Set<ITableOrView<any>>): void; export declare function __getOldValues(value: any, sqlBuilder: HasIsValue): ITableOrView<any> | undefined; export declare function __getValuesForInsert(value: any, sqlBuilder: HasIsValue): ITableOrView<any> | undefined; export declare function __isAllowed(value: any, sqlBuilder: HasIsValue): boolean; export interface __ITableOrViewPrivate extends HasAddWiths { __name: string; __as?: string; __type: 'table' | 'view' | 'with' | 'values'; __forUseInLeftJoin?: boolean; __template?: RawFragment<any>; __customizationName?: string; __oldValues?: boolean; __valuesForInsert?: boolean; __hasExternalDependencies?: boolean; } export declare function __getTableOrViewPrivate(table: ITableOrView<any> | OuterJoinSource<any, any>): __ITableOrViewPrivate; export interface ITable<REF extends ITableOrViewRef<AnyDB>> extends ITableOrView<REF> { [type]: 'table'; } export interface ITableOf<DB extends AnyDB, REF extends ITableOrViewRef<DB>> extends ITable<REF> { } export interface ITableOfDB<DB extends AnyDB> extends ITable<ITableOrViewRef<DB>> { } export interface IView<REF extends ITableOrViewRef<AnyDB>> extends ITableOrView<REF> { [type]: 'view'; } export interface IValues<REF extends ITableOrViewRef<AnyDB>> extends ITableOrView<REF> { [type]: 'values'; } export interface IWithView<REF extends ITableOrViewRef<AnyDB>> extends ITableOrView<REF> { [type]: 'with'; } export interface NoTableOrViewRequired<DB extends AnyDB> extends ITableOrViewRef<DB> { [noTableOrViewRequired]: 'NoTableOrViewRequired'; } export interface NoTableOrViewRequiredView<DB extends AnyDB> extends IView<NoTableOrViewRequired<DB>> { [noTableOrViewRequired]: 'NoTableOrViewRequiredView'; } export interface OLD<REF extends ITableOrViewRef<AnyDB>> extends ITableOrViewRef<REF[typeof database]> { [tableOrViewRef]: REF; [oldValues]: 'OldValues'; } export interface OldTableOrView<TABLE_OR_VIEW extends ITableOrView<any>> extends ITableOrView<OLD<TABLE_OR_VIEW[typeof tableOrViewRef]>> { [tableOrView]: TABLE_OR_VIEW; [oldValues]: 'OldValuesTableOrView'; } export interface VALUES_FOR_INSERT<REF extends ITableOrViewRef<AnyDB>> extends ITableOrViewRef<REF[typeof database]> { [tableOrViewRef]: REF; [valuesForInsert]: 'ValuesForInsert'; } export interface ValuesForInsertTableOrView<TABLE_OR_VIEW extends ITableOrView<any>> extends ITableOrView<OLD<TABLE_OR_VIEW[typeof tableOrViewRef]>> { [tableOrView]: TABLE_OR_VIEW; [valuesForInsert]: 'ValuesForInsertTableOrView'; } export interface TABLE_OR_VIEW_ALIAS<REF extends ITableOrViewRef<AnyDB>, ALIAS> extends ITableOrViewRef<REF[typeof database]> { [tableOrViewAlias]: ALIAS; [tableOrViewRef]: REF; } export interface CUSTOMIZED_TABLE_OR_VIEW<REF extends ITableOrViewRef<AnyDB>, NAME> extends ITableOrViewRef<REF[typeof database]> { [tableOrViewCustomName]: NAME; [tableOrViewRef]: REF; } export interface TableOrViewAlias<TABLE_OR_VIEW extends ITableOrView<any>, ALIAS> extends ITableOrView<TABLE_OR_VIEW_ALIAS<TABLE_OR_VIEW[typeof tableOrViewRef], ALIAS>> { [tableOrView]: TABLE_OR_VIEW; [tableOrViewAlias]: ALIAS; } export interface OuterJoinSource<TABLE_OR_VIEW extends ITableOrView<any>, ALIAS> { [outerJoinDatabase]: TABLE_OR_VIEW[typeof database]; [outerJoinTableOrView]: TABLE_OR_VIEW; [outerJoinAlias]: ALIAS; } export interface OUTER_JOIN_SOURCE<REF extends ITableOrViewRef<AnyDB>, ALIAS> extends ITableOrViewRef<REF[typeof database]> { [outerJoinDatabase]: REF[typeof database]; [outerJoinTableOrView]: REF; [outerJoinAlias]: ALIAS; } export interface ITableOrViewOuterJoin<TABLE_OR_VIEW extends ITableOrView<any>, ALIAS> extends ITableOrView<OUTER_JOIN_SOURCE<TABLE_OR_VIEW[typeof tableOrViewRef], ALIAS>> { [tableOrView]: TABLE_OR_VIEW; [tableOrViewAlias]: ALIAS; [outerJoinAlias]: ALIAS; } export interface ResolvedShape<TABLE extends ITableOrView<any>> extends ITableOfDB<TABLE[typeof database]> { [resolvedShape]: 'resolvedShape'; } export {};