UNPKG

@starbemtech/star-db-query-builder

Version:

A query builder to be used with mysql or postgres

89 lines (75 loc) 1.68 kB
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' }[] // eslint-disable-next-line @typescript-eslint/no-unused-vars 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 }