@starbemtech/star-db-query-builder
Version:
A query builder to be used with mysql or postgres
63 lines (62 loc) • 1.68 kB
TypeScript
import { IDatabaseClient } from '../db/IDatabaseClient';
export interface RetryOptions {
retries?: number;
factor?: number;
minTimeout?: number;
maxTimeout?: number;
randomize?: boolean;
}
export interface QueryExec {
text: string;
values?: any[];
}
type SimpleValue = string | number | boolean | Date;
export interface OperatorCondition {
operator: 'ILIKE' | 'LIKE' | '=' | '>' | '<' | 'IN' | 'BETWEEN' | '!=' | '<=' | '>=' | 'NOT IN' | 'LIKE' | 'NOT LIKE' | 'IS NULL' | 'IS NOT NULL' | 'NOT EXISTS';
value: SimpleValue | SimpleValue[];
}
export type LogicalOperator = 'OR' | 'AND';
export type Condition<T> = OperatorCondition | LogicalCondition<T>;
interface LogicalCondition<T> {
OR?: Conditions<T>[];
AND?: Conditions<T>[];
JOINS?: Conditions<object>;
notExists?: OperatorCondition;
}
export type Conditions<T> = {
[P in keyof T]?: Condition<T[P]>;
} & LogicalCondition<T>;
export type DBClients = 'pg' | 'mysql';
export type OrderBy = {
field: string;
direction: 'ASC' | 'DESC';
}[];
export interface QueryParams<T> {
tableName: string;
dbClient: IDatabaseClient;
id?: string;
select?: string[];
where?: Conditions<T>;
orderBy?: OrderBy;
groupBy?: string[];
limit?: number;
offset?: number;
joins?: JoinClause[];
unaccent?: boolean;
}
interface JoinClause {
type: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
table: string;
on: string;
}
export interface QueryBuilder {
select: string[];
from?: string;
joins?: JoinClause[];
where?: string;
groupBy?: string[];
orderBy?: string;
limit?: string;
offset?: string;
}
export {};