138 lines
4.6 KiB
TypeScript
138 lines
4.6 KiB
TypeScript
import { type Dictionary, LockMode, type QueryFlag, RawQueryFragment, type Subquery } from '@mikro-orm/core';
|
|
import { QueryType } from './enums.js';
|
|
import type { AbstractSqlPlatform } from '../AbstractSqlPlatform.js';
|
|
/** Options for Common Table Expression (CTE) definitions. */
|
|
export interface CteOptions {
|
|
/** Column names for the CTE. */
|
|
columns?: string[];
|
|
/** PostgreSQL: MATERIALIZED / NOT MATERIALIZED */
|
|
materialized?: boolean;
|
|
}
|
|
interface CteClause extends CteOptions {
|
|
name: string;
|
|
sql: string;
|
|
params: unknown[];
|
|
recursive?: boolean;
|
|
}
|
|
interface Options {
|
|
tableName?: string | RawQueryFragment;
|
|
indexHint?: string;
|
|
select?: (string | RawQueryFragment)[];
|
|
distinct?: boolean;
|
|
distinctOn?: string[];
|
|
joins?: {
|
|
sql: string;
|
|
params: unknown[];
|
|
}[];
|
|
groupBy?: (string | RawQueryFragment)[];
|
|
where?: {
|
|
sql: string;
|
|
params: unknown[];
|
|
};
|
|
having?: {
|
|
sql: string;
|
|
params: unknown[];
|
|
};
|
|
orderBy?: string;
|
|
limit?: number;
|
|
offset?: number;
|
|
data?: Dictionary;
|
|
onConflict?: OnConflictClause;
|
|
lockMode?: LockMode;
|
|
lockTables?: string[];
|
|
returning?: (string | RawQueryFragment | [name: string, type: unknown])[];
|
|
comment?: string[];
|
|
hintComment?: string[];
|
|
flags?: Set<QueryFlag>;
|
|
wrap?: [prefix: string, suffix: string];
|
|
ctes?: CteClause[];
|
|
}
|
|
/** Options for specifying the target table in FROM/INTO clauses. */
|
|
export interface TableOptions {
|
|
schema?: string;
|
|
indexHint?: string;
|
|
alias?: string;
|
|
}
|
|
interface OnConflictClause {
|
|
fields: string[] | RawQueryFragment;
|
|
ignore?: boolean;
|
|
merge?: Dictionary | (string | RawQueryFragment)[];
|
|
where?: {
|
|
sql: string;
|
|
params: unknown[];
|
|
};
|
|
}
|
|
/** @internal */
|
|
export declare class NativeQueryBuilder implements Subquery {
|
|
protected readonly platform: AbstractSqlPlatform;
|
|
readonly __subquery: true;
|
|
protected type?: QueryType;
|
|
protected parts: string[];
|
|
protected params: unknown[];
|
|
protected options: Options;
|
|
constructor(platform: AbstractSqlPlatform);
|
|
select(fields: string | RawQueryFragment | (string | RawQueryFragment)[]): this;
|
|
count(fields?: string | RawQueryFragment | (string | RawQueryFragment)[], distinct?: boolean): this;
|
|
into(tableName: string | RawQueryFragment | NativeQueryBuilder, options?: TableOptions): this;
|
|
from(tableName: string | RawQueryFragment | NativeQueryBuilder, options?: TableOptions): this;
|
|
where(sql: string, params: unknown[]): this;
|
|
having(sql: string, params: unknown[]): this;
|
|
groupBy(groupBy: (string | RawQueryFragment)[]): this;
|
|
join(sql: string, params: unknown[]): this;
|
|
orderBy(orderBy: string): this;
|
|
/**
|
|
* The sub-query is compiled eagerly at call time — later mutations to the
|
|
* sub-query builder will not be reflected in this CTE.
|
|
*/
|
|
with(name: string, query: NativeQueryBuilder | RawQueryFragment, options?: CteOptions): this;
|
|
/**
|
|
* Adds a recursive CTE (`WITH RECURSIVE` on PostgreSQL/MySQL/SQLite, plain `WITH` on MSSQL).
|
|
* The sub-query is compiled eagerly — later mutations will not be reflected.
|
|
*/
|
|
withRecursive(name: string, query: NativeQueryBuilder | RawQueryFragment, options?: CteOptions): this;
|
|
private addCte;
|
|
toString(): string;
|
|
compile(): {
|
|
sql: string;
|
|
params: unknown[];
|
|
};
|
|
protected addLockClause(): void;
|
|
protected addOnConflictClause(): void;
|
|
protected combineParts(): {
|
|
sql: string;
|
|
params: unknown[];
|
|
};
|
|
limit(limit: number): this;
|
|
offset(offset: number): this;
|
|
insert(data: Dictionary): this;
|
|
update(data: Dictionary): this;
|
|
delete(): this;
|
|
truncate(): this;
|
|
distinct(): this;
|
|
distinctOn(fields: string[]): this;
|
|
onConflict(options: OnConflictClause): OnConflictClause;
|
|
returning(fields: (string | RawQueryFragment | [name: string, type: unknown])[]): this;
|
|
lockMode(lockMode: LockMode, lockTables?: string[]): this;
|
|
comment(comment: string | string[]): this;
|
|
hintComment(comment: string | string[]): this;
|
|
setFlags(flags: Set<QueryFlag>): this;
|
|
clear(clause: keyof Options): this;
|
|
wrap(prefix: string, suffix: string): this;
|
|
as(alias: string): this;
|
|
toRaw(): RawQueryFragment;
|
|
protected compileSelect(): void;
|
|
protected getFields(): string;
|
|
protected compileInsert(): void;
|
|
protected addOutputClause(type: 'inserted' | 'deleted'): void;
|
|
protected processInsertData(): string[];
|
|
protected compileUpdate(): void;
|
|
protected compileDelete(): void;
|
|
protected compileTruncate(): void;
|
|
protected addHintComment(): void;
|
|
protected compileCtes(): void;
|
|
protected getCteKeyword(hasRecursive: boolean): string;
|
|
protected getTableName(): string;
|
|
protected quote(id: string | RawQueryFragment | NativeQueryBuilder): string;
|
|
}
|
|
export {};
|