silvie
Version:
Typescript Back-end Framework
399 lines (398 loc) • 19.4 kB
TypeScript
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;
}