///
import { DataSource, Pagination, DataResult, IncomingHttpHeaders } from '../../../models/index';
import { ComparisonPredicate, ComparisonOperator, LogicalOperator, BetweenPredicateInput, InPredicateInput, NullPredicateInput } from './commonTypes';
import { IJoinOnClause, JoinOnClauseOperation } from './joinOnClause';
import { IParameterizer } from '../parameterizer';
import { Builtin } from 'ts-essentials';
export declare enum SelectCommandType {
SELECT = "SELECT",
SELECT_DISTINCT = "SELECT_DISTINCT"
}
export declare enum AggregateFuncType {
COUNT = "COUNT",
SUM = "SUM",
AVG = "AVG",
MIN = "MIN",
MAX = "MAX"
}
export declare enum JoinCommandType {
INNER_JOIN = "INNER_JOIN",
LEFT_JOIN = "LEFT_JOIN",
RIGHT_JOIN = "RIGHT_JOIN",
FULL_JOIN = "FULL_JOIN"
}
export declare enum WherePredicate {
WRAPPED = "WRAPPED",
LIKE = "LIKE"
}
export interface AliasColumn {
name: string;
as?: string;
}
export interface SelectedColumn extends AliasColumn {
aggregateType?: AggregateFuncType;
}
export interface SelectClauseOperation {
command: SelectCommandType;
columns: Array;
}
export interface AliasDataQueryBuilder {
builder: IDataQueryBuilder;
as: string;
}
export interface JoinClauseOperation {
command: JoinCommandType;
onClauses: Array;
joinBuilder: AliasDataQueryBuilder;
}
export declare type JoinClauseCallback = (clause: IJoinOnClause) => void;
export interface WhereOperatorInput {
column: string;
operator: ComparisonOperator;
value: string | number | boolean | IDataQueryBuilder;
}
export declare type BuilderClauseCallback = (builder: IDataQueryBuilder) => void;
export declare type WhereInPredicateInput = InPredicateInput & {
values: string[] | number[] | IDataQueryBuilder;
};
export interface WhereLikePredicateInput {
column: string;
searchValue: string;
}
export declare type WherePredicateInput = WhereOperatorInput | BetweenPredicateInput | WhereInPredicateInput | NullPredicateInput | WhereLikePredicateInput | IDataQueryBuilder;
export interface WhereClauseOperation {
command: WherePredicate | ComparisonPredicate | LogicalOperator | null;
data?: WherePredicateInput | Array | AliasDataQueryBuilder;
}
export declare type GroupByClauseOperations = Array;
export interface HavingOperatorInput {
column: SelectedColumn;
operator: ComparisonOperator;
value: string | number | boolean | IDataQueryBuilder;
}
export declare type HavingInPredicateInput = InPredicateInput & {
column: SelectedColumn;
};
export interface HavingBetweenPredicateInput {
column: SelectedColumn;
min: number;
max: number;
}
export declare type HavingPredicateInput = HavingOperatorInput | HavingBetweenPredicateInput | HavingInPredicateInput | NullPredicateInput | IDataQueryBuilder;
export interface HavingClauseOperation {
command: ComparisonPredicate | LogicalOperator | null;
data?: HavingPredicateInput | AliasDataQueryBuilder;
}
export declare enum Direction {
ASC = "ASCENDING",
DESC = "DESCENDING"
}
export interface OrderByClauseOperation {
column: string;
direction: Direction;
}
export interface SQLClauseOperation {
select: SelectClauseOperation | null;
where: Array;
join: Array;
groupBy: GroupByClauseOperations;
having: Array;
orderBy: Array;
limit: number | null;
offset: number | null;
}
export declare type Parameterized = T extends Builtin ? string | null : T extends Record ? {
[K in keyof T]: Parameterized;
} : T;
export interface IDataQueryBuilder {
readonly statement: string;
readonly operations: SQLClauseOperation;
readonly dataSource: DataSource;
readonly identifier: string;
select(...columns: Array): IDataQueryBuilder;
distinct(...columns: Array): IDataQueryBuilder;
column(...columns: Array): IDataQueryBuilder;
first(...columns: Array): IDataQueryBuilder;
count(column: AliasColumn | string): IDataQueryBuilder;
min(column: AliasColumn | string): IDataQueryBuilder;
max(column: AliasColumn | string): IDataQueryBuilder;
sum(column: AliasColumn | string): IDataQueryBuilder;
avg(column: AliasColumn | string): IDataQueryBuilder;
innerJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): IDataQueryBuilder;
leftJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): IDataQueryBuilder;
rightJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): IDataQueryBuilder;
fullJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): IDataQueryBuilder;
where(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
whereNot(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
whereWrapped(builderCallback: BuilderClauseCallback): IDataQueryBuilder;
whereNotWrapped(builderCallback: BuilderClauseCallback): IDataQueryBuilder;
whereBetween(column: string, min: number, max: number): IDataQueryBuilder;
whereNotBetween(column: string, min: number, max: number): IDataQueryBuilder;
whereIn(column: string, values: string[] | number[] | IDataQueryBuilder): IDataQueryBuilder;
whereNotIn(column: string, values: string[] | number[] | IDataQueryBuilder): IDataQueryBuilder;
whereNull(column: string): IDataQueryBuilder;
whereNotNull(column: string): IDataQueryBuilder;
whereLike(column: string, searchValue: string): IDataQueryBuilder;
whereExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
whereNotExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
andWhere(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
andWhereNot(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
andWhereWrapped(builderCallback: BuilderClauseCallback): IDataQueryBuilder;
andWhereNotWrapped(builderCallback: BuilderClauseCallback): IDataQueryBuilder;
andWhereBetween(column: string, min: number, max: number): IDataQueryBuilder;
andWhereNotBetween(column: string, min: number, max: number): IDataQueryBuilder;
andWhereIn(column: string, values: string[] | number[] | IDataQueryBuilder): IDataQueryBuilder;
andWhereNotIn(column: string, values: string[] | number[] | IDataQueryBuilder): IDataQueryBuilder;
andWhereNull(column: string): IDataQueryBuilder;
andWhereNotNull(column: string): IDataQueryBuilder;
andWhereLike(column: string, searchValue: string): IDataQueryBuilder;
andWhereExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
andWhereNotExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
orWhere(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
orWhereNot(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
orWhereWrapped(builderCallback: BuilderClauseCallback): IDataQueryBuilder;
orWhereNotWrapped(builderCallback: BuilderClauseCallback): IDataQueryBuilder;
orWhereBetween(column: string, min: number, max: number): IDataQueryBuilder;
orWhereNotBetween(column: string, min: number, max: number): IDataQueryBuilder;
orWhereIn(column: string, values: string[] | number[] | IDataQueryBuilder): IDataQueryBuilder;
orWhereNotIn(column: string, values: string[] | number[] | IDataQueryBuilder): IDataQueryBuilder;
orWhereNull(column: string): IDataQueryBuilder;
orWhereNotNull(column: string): IDataQueryBuilder;
orWhereLike(column: string, searchValue: string): IDataQueryBuilder;
orWhereExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
orWhereNotExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
groupBy(...columns: string[]): IDataQueryBuilder;
having(column: SelectedColumn | string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
havingIn(column: SelectedColumn | string, values: number[] | string[]): IDataQueryBuilder;
havingNotIn(column: SelectedColumn | string, values: number[] | string[]): IDataQueryBuilder;
havingBetween(column: SelectedColumn | string, min: number, max: number): IDataQueryBuilder;
havingNotBetween(column: SelectedColumn | string, min: number, max: number): IDataQueryBuilder;
havingNull(column: string): IDataQueryBuilder;
havingNotNull(column: string): IDataQueryBuilder;
havingExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
havingNotExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
andHaving(column: SelectedColumn | string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
andHavingIn(column: SelectedColumn | string, values: number[] | string[]): IDataQueryBuilder;
andHavingNotIn(column: SelectedColumn | string, values: number[] | string[]): IDataQueryBuilder;
andHavingBetween(column: SelectedColumn | string, min: number, max: number): IDataQueryBuilder;
andHavingNotBetween(column: SelectedColumn | string, min: number, max: number): IDataQueryBuilder;
andHavingNull(column: string): IDataQueryBuilder;
andHavingNotNull(column: string): IDataQueryBuilder;
andHavingExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
andHavingNotExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
orHaving(column: SelectedColumn | string, operator: string, value: string | number | boolean | IDataQueryBuilder): IDataQueryBuilder;
orHavingIn(column: SelectedColumn | string, values: number[] | string[]): IDataQueryBuilder;
orHavingNotIn(column: SelectedColumn | string, values: number[] | string[]): IDataQueryBuilder;
orHavingBetween(column: SelectedColumn | string, min: number, max: number): IDataQueryBuilder;
orHavingNotBetween(column: SelectedColumn | string, min: number, max: number): IDataQueryBuilder;
orHavingNull(column: string): IDataQueryBuilder;
orHavingNotNull(column: string): IDataQueryBuilder;
orHavingExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
orHavingNotExists(subQueryBuilder: AliasDataQueryBuilder): IDataQueryBuilder;
orderBy(column: string, direction: Direction): IDataQueryBuilder;
limit(size: number): IDataQueryBuilder;
offset(move: number): IDataQueryBuilder;
take(size: number, move: number): IDataQueryBuilder;
paginate(pagination: Pagination): void;
setHeaders(headers: IncomingHttpHeaders): void;
value(): Promise;
clone(): IDataQueryBuilder;
parameterizeOperations(): Promise>>;
}
export declare class DataQueryBuilder implements IDataQueryBuilder {
readonly statement: string;
readonly operations: SQLClauseOperation;
readonly dataSource: DataSource;
pagination?: Pagination;
readonly identifier: string;
private profileName;
private parameterizer;
private headers;
constructor({ statement, operations, parameterizer, dataSource, profileName, headers, }: {
statement: string;
operations?: SQLClauseOperation;
parameterizer: IParameterizer;
dataSource: DataSource;
profileName: string;
headers: IncomingHttpHeaders;
});
select(...columns: Array): this;
distinct(...columns: Array): this;
column(...columns: Array): this;
first(...columns: Array): this;
count(column?: AliasColumn | string): this;
min(column: AliasColumn | string): this;
max(column: AliasColumn | string): this;
avg(column: AliasColumn | string): this;
sum(column: AliasColumn | string): this;
innerJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): this;
leftJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): this;
rightJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): this;
fullJoin(builder: AliasDataQueryBuilder, joinCallback: JoinClauseCallback): this;
where(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
whereNot(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
whereWrapped(builderCallback: BuilderClauseCallback): this;
whereNotWrapped(builderCallback: BuilderClauseCallback): this;
whereBetween(column: string, min: number, max: number): this;
whereNotBetween(column: string, min: number, max: number): this;
whereIn(column: string, values: string[] | number[] | IDataQueryBuilder): this;
whereNotIn(column: string, values: string[] | number[] | IDataQueryBuilder): this;
whereNull(column: string): this;
whereNotNull(column: string): this;
whereLike(column: string, searchValue: string): this;
whereExists(subQueryBuilder: AliasDataQueryBuilder): this;
whereNotExists(subQueryBuilder: AliasDataQueryBuilder): this;
andWhere(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
andWhereNot(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
andWhereWrapped(builderCallback: BuilderClauseCallback): this;
andWhereNotWrapped(builderCallback: BuilderClauseCallback): this;
andWhereBetween(column: string, min: number, max: number): this;
andWhereNotBetween(column: string, min: number, max: number): this;
andWhereIn(column: string, values: string[] | number[] | IDataQueryBuilder): this;
andWhereNotIn(column: string, values: string[] | number[] | IDataQueryBuilder): this;
andWhereNull(column: string): this;
andWhereNotNull(column: string): this;
andWhereLike(column: string, searchValue: string): this;
andWhereExists(subQueryBuilder: AliasDataQueryBuilder): this;
andWhereNotExists(subQueryBuilder: AliasDataQueryBuilder): this;
orWhere(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
orWhereNot(column: string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
orWhereWrapped(builderCallback: BuilderClauseCallback): this;
orWhereNotWrapped(builderCallback: BuilderClauseCallback): this;
orWhereBetween(column: string, min: number, max: number): this;
orWhereNotBetween(column: string, min: number, max: number): this;
orWhereIn(column: string, values: string[] | number[] | IDataQueryBuilder): this;
orWhereNotIn(column: string, values: string[] | number[] | IDataQueryBuilder): this;
orWhereNull(column: string): this;
orWhereNotNull(column: string): this;
orWhereLike(column: string, searchValue: string): this;
orWhereExists(subQueryBuilder: AliasDataQueryBuilder): this;
orWhereNotExists(subQueryBuilder: AliasDataQueryBuilder): this;
groupBy(...columns: string[]): this;
having(column: SelectedColumn | string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
havingIn(column: SelectedColumn | string, values: number[] | string[]): this;
havingNotIn(column: SelectedColumn | string, values: number[] | string[]): this;
havingBetween(column: SelectedColumn | string, min: number, max: number): this;
havingNotBetween(column: SelectedColumn | string, min: number, max: number): this;
havingNull(column: string): this;
havingNotNull(column: string): this;
havingExists(subQueryBuilder: AliasDataQueryBuilder): this;
havingNotExists(subQueryBuilder: AliasDataQueryBuilder): this;
andHaving(column: SelectedColumn | string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
andHavingIn(column: SelectedColumn | string, values: number[] | string[]): this;
andHavingNotIn(column: SelectedColumn | string, values: number[] | string[]): this;
andHavingBetween(column: SelectedColumn | string, min: number, max: number): this;
andHavingNotBetween(column: SelectedColumn | string, min: number, max: number): this;
andHavingNull(column: string): this;
andHavingNotNull(column: string): this;
andHavingExists(subQueryBuilder: AliasDataQueryBuilder): this;
andHavingNotExists(subQueryBuilder: AliasDataQueryBuilder): this;
orHaving(column: SelectedColumn | string, operator: string, value: string | number | boolean | IDataQueryBuilder): this;
orHavingIn(column: SelectedColumn | string, values: number[] | string[]): this;
orHavingNotIn(column: SelectedColumn | string, values: number[] | string[]): this;
orHavingBetween(column: SelectedColumn | string, min: number, max: number): this;
orHavingNotBetween(column: SelectedColumn | string, min: number, max: number): this;
orHavingNull(column: string): this;
orHavingNotNull(column: string): this;
orHavingExists(subQueryBuilder: AliasDataQueryBuilder): this;
orHavingNotExists(subQueryBuilder: AliasDataQueryBuilder): this;
orderBy(column: string, direction?: Direction): this;
limit(size: number): this;
offset(move: number): this;
take(size: number, move: number): this;
clone(): DataQueryBuilder;
paginate(pagination: Pagination): void;
setHeaders(headers: IncomingHttpHeaders): void;
parameterizeOperations(): Promise>>;
value(): Promise;
private recordSelect;
private recordJoin;
private recordWhere;
private recordHaving;
private parameterizeValue;
}