UNPKG

silvie

Version:

Typescript Back-end Framework

399 lines (398 loc) 19.4 kB
import { TTable, TColumn, TBaseValue, TOperator, ICondition } from "../condition"; import { IOrder, IGroup, IUnion, IJoin, ISelect, IAliasTable } from "./types"; import WhereConditionBuilder from "../condition/where"; import HavingConditionBuilder from "../condition/having"; import JoinConditionBuilder from "../condition/join"; export default class QueryBuilder { options: { table?: TTable; aliasTable?: IAliasTable; select: ISelect[]; selectInto?: string; processData: (data: any[], queryBuilder: QueryBuilder) => any[]; processFinalQuery?: (queryBuilder: QueryBuilder) => void; insert?: any[]; ignoreDuplicates?: boolean; update?: any[]; bulkUpdateData?: any[]; bulkUpdateKeys?: any[]; silentUpdate?: boolean; where: ICondition[]; having: ICondition[]; order: IOrder[]; group: IGroup[]; union: IUnion[]; join: IJoin[]; randomOrder?: boolean; randomSeed?: string; offset?: number; limit?: number; lock?: 'shared' | 'update'; useTimestamps: boolean; createTimestamp: string; updateTimestamp: string; useSoftDeletes: boolean; softDeleteTimestamp: string; withTrashed: boolean; onlyTrashed: boolean; fetchingRelations?: any[]; alongQueries: QueryBuilder[]; }; constructor(tableName?: string); /** * Extend the query builder options with a custom options object * @param opts */ extend(opts: any): QueryBuilder; /** * Create a new copy of the current query builder */ clone(): QueryBuilder; /** * Return all matching rows of this query */ get(): Promise<any>; /** * Return the first matching row of this query */ first(): Promise<any>; /** * Query database to see if there are any records matching this query */ exists(): Promise<boolean>; /** * Query database to see if there are no records matching this query */ doesntExist(): Promise<boolean>; /** * Query the database and return with an array of single field or a hashmap * @param keyColumn The column name to use for the keys * @param valueColumn If provided, it will be used to determine key, value pairs * @param overwrite Override the duplicate keys in a hashmap */ pluck(keyColumn: TColumn, valueColumn?: TColumn, overwrite?: boolean): Promise<any>; /** * Return the count of records matching this query */ count(): Promise<number>; /** * Calculate the average of the specified column * @param column */ average(column: TColumn): Promise<number>; /** * Calculate the summation of the specified column * @param column */ sum(column: TColumn): Promise<number>; /** * Find the minimum value of the specified column * @param column */ min(column: TColumn): Promise<any>; /** * Find the maximum value of the specified column * @param column */ max(column: TColumn): Promise<any>; /** * Insert the provided data into the table * @param data Inserting data * @param ignore Weather to ignore duplicate keys or not */ insert(data: any[], ignore?: boolean): Promise<any>; /** * Updates the table with the provided data * @param data Updating data * @param silent Weather to keep the update time field or not */ update(data: any, silent?: boolean): Promise<any>; /** * Update multiple records in the table * @param data Updating data * @param keys Keys used to find the matching row * @param silent Weather to keep the update time or not */ bulkUpdate(data: any[], keys?: string[], silent?: boolean): Promise<any>; /** * Delete the rows matching this query * @param soft Weather to use soft deletes or not */ delete(soft?: boolean): Promise<any>; /** * Enabled soft deletes for the current query builder instance */ useSoftDeletes(): QueryBuilder; /** * Soft delete the rows matching this query */ softDelete(): Promise<any>; /** * Undelete the soft deleted rows matching this query */ restore(): Promise<any>; /** * Include soft deleted records in the result */ withTrashed(): this; /** * Filter results to soft deleted records */ onlyTrashed(): this; /** * Exclude soft deleted records from the result */ withoutTrashed(): this; /** * Set a shared lock on this query */ sharedLock(): QueryBuilder; /** * Set a lock for update on this query */ lockForUpdate(): QueryBuilder; /** * Remove the previously set locks */ clearLock(): QueryBuilder; /** * Set the result of this query into a variable * @param variableName */ into(variableName: string): QueryBuilder; /** * Select the current query fields from another query builder * @param queryBuilder Query builder to select from * @param alias Alias name of the resulting table */ fromAliasTable(queryBuilder: QueryBuilder, alias: string): QueryBuilder; /** * Select a set of columns from the table * @param columns */ select(...columns: TColumn[]): QueryBuilder; /** * Select a query builder as a sub selection * @param queryBuilder Query builder to use in selection * @param alias Alias name for the sub selection */ selectSub(queryBuilder: QueryBuilder, alias: string): QueryBuilder; /** * Add a raw query as a selection * @param query Query string * @param params Binding parameters */ selectRaw(query: string, params?: TBaseValue[]): QueryBuilder; /** * Order the results by a column * @param column * @param direction */ orderBy(column: TColumn | QueryBuilder, direction?: 'asc' | 'desc' | 'ASC' | 'DESC'): QueryBuilder; /** * Add a raw query to the order * @param query * @param params */ orderByRaw(query: string, params?: TBaseValue[]): QueryBuilder; /** * Clear previously set orders or set a fresh order * @param column * @param direction */ reorder(column?: TColumn | QueryBuilder, direction?: 'asc' | 'desc' | 'ASC' | 'DESC'): QueryBuilder; /** * Randomize the result order * @param seed Seed to use in the random function */ shuffle(seed?: string): QueryBuilder; /** * Skip the first n rows * @param count */ offset(count: number): QueryBuilder; /** * Skip the first n rows * @param count */ skip(count: number): QueryBuilder; /** * Take the next m rows * @param count */ limit(count: number): QueryBuilder; /** * Take the next m rows * @param count */ take(count: number): QueryBuilder; private baseAggregate; /** * Select the count of matching rows in the field set * @param alias */ selectCount(alias: string): QueryBuilder; /** * Select the average of specified column in the field set * @param column Column to get average * @param alias Alias name for the new field */ selectAverage(column: TColumn, alias: string): QueryBuilder; /** * Select the average of specified column in the field set * @param column Column to get summation * @param alias Alias name for the new field */ selectSum(column: TColumn, alias: string): QueryBuilder; /** * Select the minimum value of specified column in the field set * @param column Column to get summation * @param alias Alias name for the new field */ selectMin(column: TColumn, alias: string): QueryBuilder; /** * Select the maximum value of specified column in the field set * @param column Column to get summation * @param alias Alias name for the new field */ selectMax(column: TColumn, alias: string): QueryBuilder; /** * Group the results by the specified columns * @param columns */ groupBy(...columns: TColumn[]): QueryBuilder; /** * Group the results by the specified raw query * @param query * @param params */ groupByRaw(query: string, params?: TBaseValue[]): QueryBuilder; /** * Union the selection with a query builder instance * @param queryBuilder * @param all */ union(queryBuilder: QueryBuilder, all?: boolean): QueryBuilder; /** * Union the selection with a raw query * @param query * @param params * @param all */ unionRaw(query: string, params?: TBaseValue[], all?: boolean): QueryBuilder; private baseJoin; /** * Inner join the current query with another table or query builder * @param table Joining table or QueryBuilder instance * @param column1 Condition's first column or condition builder callback function * @param operator Custom operator or condition's second column * @param column2 Condition's second column or alias name * @param alias Alias name for the joining table */ join(table: TTable | QueryBuilder, column1: TColumn | ((conditionBuilder: JoinConditionBuilder) => void), operator?: TOperator | TColumn, column2?: TColumn, alias?: string): QueryBuilder; /** * Left join the current query with another table or query builder * @param table Joining table or QueryBuilder instance * @param column1 Condition's first column or condition builder callback function * @param operator Custom operator or condition's second column * @param column2 Condition's second column or alias name * @param alias Alias name for the joining table */ leftJoin(table: TTable | QueryBuilder, column1: TColumn | ((conditionBuilder: JoinConditionBuilder) => void), operator?: TOperator | TColumn, column2?: TColumn, alias?: string): QueryBuilder; /** * Right join the current query with another table or query builder * @param table Joining table or QueryBuilder instance * @param column1 Condition's first column or condition builder callback function * @param operator Custom operator or condition's second column * @param column2 Condition's second column or alias name * @param alias Alias name for the joining table */ rightJoin(table: TTable | QueryBuilder, column1: TColumn | ((conditionBuilder: JoinConditionBuilder) => void), operator?: TOperator | TColumn, column2?: TColumn, alias?: string): QueryBuilder; /** * Cross join the current query with another table or query builder * @param table Joining table or QueryBuilder instance * @param column1 Condition's first column or condition builder callback function * @param operator Custom operator or condition's second column * @param column2 Condition's second column or alias name * @param alias Alias name for the joining table */ crossJoin(table: TTable | QueryBuilder, column1: TColumn | ((conditionBuilder: JoinConditionBuilder) => void), operator?: TOperator | TColumn, column2?: TColumn, alias?: string): QueryBuilder; /** * Outer join the current query with another table or query builder * @param table Joining table or QueryBuilder instance * @param column1 Condition's first column or condition builder callback function * @param operator Custom operator or condition's second column * @param column2 Condition's second column or alias name * @param alias Alias name for the joining table */ outerJoin(table: TTable | QueryBuilder, column1: TColumn | ((conditionBuilder: JoinConditionBuilder) => void), operator?: TOperator | TColumn, column2?: TColumn, alias?: string): QueryBuilder; private baseWhere; where(column: TColumn | QueryBuilder | ((conditionBuilder: WhereConditionBuilder) => void), operator?: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orWhere(column: TColumn | QueryBuilder | ((conditionBuilder: WhereConditionBuilder) => void), operator?: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; whereNull(column: TColumn | QueryBuilder): QueryBuilder; orWhereNull(column: TColumn | QueryBuilder): QueryBuilder; whereNotNull(column: TColumn | QueryBuilder): QueryBuilder; orWhereNotNull(column: TColumn | QueryBuilder): QueryBuilder; whereBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; orWhereBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; whereNotBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; orWhereNotBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; whereIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; orWhereIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; whereNotIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; orWhereNotIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; whereLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; orWhereLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; whereNotLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; orWhereNotLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; whereColumn(firstColumn: TColumn, operator: TOperator | TColumn, secondColumn?: TColumn): QueryBuilder; orWhereColumn(firstColumn: TColumn, operator: TOperator | TColumn, secondColumn?: TColumn): QueryBuilder; whereDate(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orWhereDate(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; whereYear(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orWhereYear(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; whereMonth(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orWhereMonth(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; whereDay(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orWhereDay(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; whereTime(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orWhereTime(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; whereRaw(query: string, params?: TBaseValue[]): QueryBuilder; orWhereRaw(query: string, params?: TBaseValue[]): QueryBuilder; groupWhereConditions(): this; private baseHaving; having(column: TColumn | QueryBuilder | ((conditionBuilder: HavingConditionBuilder) => void), operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orHaving(column: TColumn | QueryBuilder | ((conditionBuilder: HavingConditionBuilder) => void), operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; havingNull(column: TColumn | QueryBuilder): QueryBuilder; orHavingNull(column: TColumn | QueryBuilder): QueryBuilder; havingNotNull(column: TColumn | QueryBuilder): QueryBuilder; orHavingNotNull(column: TColumn | QueryBuilder): QueryBuilder; havingBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; orHavingBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; havingNotBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; orHavingNotBetween(column: TColumn | QueryBuilder, values: [TBaseValue, TBaseValue] | QueryBuilder): QueryBuilder; havingIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; orHavingIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; havingNotIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; orHavingNotIn(column: TColumn | QueryBuilder, values: TBaseValue[] | QueryBuilder): QueryBuilder; havingLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; orHavingLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; havingNotLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; orHavingNotLike(column: TColumn | QueryBuilder, value: string): QueryBuilder; havingColumn(firstColumn: TColumn, operator: TOperator | TColumn, secondColumn?: TColumn): QueryBuilder; orHavingColumn(firstColumn: TColumn, operator: TOperator | TColumn, secondColumn?: TColumn): QueryBuilder; havingDate(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orHavingDate(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; havingYear(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orHavingYear(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; havingMonth(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orHavingMonth(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; havingDay(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orHavingDay(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; havingTime(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; orHavingTime(column: TColumn | QueryBuilder, operator: TOperator | TBaseValue | QueryBuilder, value?: TBaseValue | QueryBuilder): QueryBuilder; havingRaw(query: string, params?: TBaseValue[]): QueryBuilder; orHavingRaw(query: string, params?: TBaseValue[]): QueryBuilder; groupHavingConditions(): this; alongWith(queryBuilder: QueryBuilder): QueryBuilder; }