329 lines
7.5 KiB
TypeScript
329 lines
7.5 KiB
TypeScript
|
import { IncludeOptions } from '..';
|
||
|
import { Connection } from './connection-manager';
|
||
|
import {
|
||
|
Model, ModelType
|
||
|
} from './model';
|
||
|
import { Sequelize } from './sequelize';
|
||
|
import QueryTypes = require('./query-types');
|
||
|
|
||
|
type BindOrReplacements = { [key: string]: unknown } | unknown[];
|
||
|
type FieldMap = { [key: string]: string };
|
||
|
|
||
|
|
||
|
export interface AbstractQueryGroupJoinDataOptions {
|
||
|
checkExisting: boolean;
|
||
|
}
|
||
|
|
||
|
export interface AbstractQueryOptions {
|
||
|
instance?: Model;
|
||
|
model?: ModelType;
|
||
|
type?: QueryTypes;
|
||
|
|
||
|
fieldMap?: boolean;
|
||
|
plain: boolean;
|
||
|
raw: boolean;
|
||
|
nest: boolean;
|
||
|
hasJoin: boolean;
|
||
|
|
||
|
/**
|
||
|
* A function that gets executed while running the query to log the sql.
|
||
|
*/
|
||
|
logging?: boolean | ((sql: string, timing?: number) => void);
|
||
|
|
||
|
include: boolean;
|
||
|
includeNames: unknown[];
|
||
|
includeMap: any;
|
||
|
|
||
|
originalAttributes: unknown[];
|
||
|
attributes: unknown[];
|
||
|
}
|
||
|
|
||
|
export interface AbstractQueryFormatBindOptions {
|
||
|
/**
|
||
|
* skip unescaping $$
|
||
|
*/
|
||
|
skipUnescape: boolean;
|
||
|
|
||
|
/**
|
||
|
* do not replace (but do unescape $$)
|
||
|
*/
|
||
|
skipValueReplace: boolean;
|
||
|
}
|
||
|
|
||
|
type replacementFuncType = ((match: string, key: string, values: unknown[], timeZone?: string, dialect?: string, options?: AbstractQueryFormatBindOptions) => undefined | string);
|
||
|
|
||
|
/**
|
||
|
* An abstract class that Sequelize uses to add query support for a dialect.
|
||
|
*
|
||
|
* This interface is only exposed when running before/afterQuery lifecycle events.
|
||
|
*/
|
||
|
export class AbstractQuery {
|
||
|
/**
|
||
|
* Returns a unique identifier assigned to a query internally by Sequelize.
|
||
|
*/
|
||
|
public uuid: unknown;
|
||
|
|
||
|
/**
|
||
|
* A Sequelize connection instance.
|
||
|
*
|
||
|
* @type {Connection}
|
||
|
* @memberof AbstractQuery
|
||
|
*/
|
||
|
public connection: Connection;
|
||
|
|
||
|
/**
|
||
|
* If provided, returns the model instance.
|
||
|
*
|
||
|
* @type {Model}
|
||
|
* @memberof AbstractQuery
|
||
|
*/
|
||
|
public instance: Model;
|
||
|
|
||
|
/**
|
||
|
* Model type definition.
|
||
|
*
|
||
|
* @type {ModelType}
|
||
|
* @memberof AbstractQuery
|
||
|
*/
|
||
|
public model: ModelType;
|
||
|
|
||
|
/**
|
||
|
* Returns the current sequelize instance.
|
||
|
*/
|
||
|
public sequelize: Sequelize;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @type {AbstractQueryOptions}
|
||
|
* @memberof AbstractQuery
|
||
|
*/
|
||
|
public options: AbstractQueryOptions;
|
||
|
|
||
|
constructor(connection: Connection, sequelize: Sequelize, options?: AbstractQueryOptions);
|
||
|
|
||
|
/**
|
||
|
* rewrite query with parameters
|
||
|
*
|
||
|
* Examples:
|
||
|
*
|
||
|
* query.formatBindParameters('select $1 as foo', ['fooval']);
|
||
|
*
|
||
|
* query.formatBindParameters('select $foo as foo', { foo: 'fooval' });
|
||
|
*
|
||
|
* Options
|
||
|
* skipUnescape: bool, skip unescaping $$
|
||
|
* skipValueReplace: bool, do not replace (but do unescape $$). Check correct syntax and if all values are available
|
||
|
*
|
||
|
* @param {string} sql
|
||
|
* @param {object|Array} values
|
||
|
* @param {string} dialect
|
||
|
* @param {Function} [replacementFunc]
|
||
|
* @param {object} [options]
|
||
|
* @private
|
||
|
*/
|
||
|
static formatBindParameters(sql: string, values: object | Array<object>, dialect: string, replacementFunc: replacementFuncType, options: AbstractQueryFormatBindOptions): undefined | [string, unknown[]];
|
||
|
|
||
|
/**
|
||
|
* Execute the passed sql query.
|
||
|
*
|
||
|
* Examples:
|
||
|
*
|
||
|
* query.run('SELECT 1')
|
||
|
*
|
||
|
* @private
|
||
|
*/
|
||
|
private run(): Error
|
||
|
|
||
|
/**
|
||
|
* Check the logging option of the instance and print deprecation warnings.
|
||
|
*
|
||
|
* @private
|
||
|
*/
|
||
|
private checkLoggingOption(): void;
|
||
|
|
||
|
/**
|
||
|
* Get the attributes of an insert query, which contains the just inserted id.
|
||
|
*
|
||
|
* @returns {string} The field name.
|
||
|
* @private
|
||
|
*/
|
||
|
private getInsertIdField(): string;
|
||
|
|
||
|
/**
|
||
|
* Returns the unique constraint error message for the associated field.
|
||
|
*
|
||
|
* @param field {string} the field name associated with the unique constraint.
|
||
|
*
|
||
|
* @returns {string} The unique constraint error message.
|
||
|
* @private
|
||
|
*/
|
||
|
private getUniqueConstraintErrorMessage(field: string): string;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is RAW
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isRawQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is VERSION
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isVersionQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is UPSERT
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isUpsertQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is INSERT
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isInsertQuery(results?: unknown[], metaData?: unknown): boolean;
|
||
|
|
||
|
/**
|
||
|
* Sets auto increment field values (if applicable).
|
||
|
*
|
||
|
* @param results {Array}
|
||
|
* @param metaData {object}
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public handleInsertQuery(results?: unknown[], metaData?: unknown): void;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is SHOWTABLES
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isShowTablesQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Flattens and plucks values from results.
|
||
|
*
|
||
|
* @params {Array}
|
||
|
* @returns {Array}
|
||
|
*/
|
||
|
public handleShowTablesQuery(results: unknown[]): unknown[];
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is SHOWINDEXES
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isShowIndexesQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is SHOWCONSTRAINTS
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isShowConstraintsQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is DESCRIBE
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isDescribeQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is SELECT
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isSelectQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is BULKUPDATE
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isBulkUpdateQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is BULKDELETE
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isBulkDeleteQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is FOREIGNKEYS
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isForeignKeysQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query type is UPDATE
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isUpdateQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Maps raw fields to attribute names (if applicable).
|
||
|
*
|
||
|
* @params {Model[]} results from a select query.
|
||
|
* @returns {Model} the first model instance within the select.
|
||
|
*/
|
||
|
public handleSelectQuery(results: Model[]): Model;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query starts with 'show' or 'describe'
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isShowOrDescribeQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* Checks if the query starts with 'call'
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
public isCallQuery(): boolean;
|
||
|
|
||
|
/**
|
||
|
* @param {string} sql
|
||
|
* @param {Function} debugContext
|
||
|
* @param {Array|object} parameters
|
||
|
* @protected
|
||
|
* @returns {Function} A function to call after the query was completed.
|
||
|
*/
|
||
|
protected _logQuery(sql: string, debugContext: ((msg: string) => any), parameters: unknown[]): () => void;
|
||
|
|
||
|
/**
|
||
|
* The function takes the result of the query execution and groups
|
||
|
* the associated data by the callee.
|
||
|
*
|
||
|
* Example:
|
||
|
* groupJoinData([
|
||
|
* {
|
||
|
* some: 'data',
|
||
|
* id: 1,
|
||
|
* association: { foo: 'bar', id: 1 }
|
||
|
* }, {
|
||
|
* some: 'data',
|
||
|
* id: 1,
|
||
|
* association: { foo: 'bar', id: 2 }
|
||
|
* }, {
|
||
|
* some: 'data',
|
||
|
* id: 1,
|
||
|
* association: { foo: 'bar', id: 3 }
|
||
|
* }
|
||
|
* ])
|
||
|
*
|
||
|
* Result:
|
||
|
* Something like this:
|
||
|
*
|
||
|
* [
|
||
|
* {
|
||
|
* some: 'data',
|
||
|
* id: 1,
|
||
|
* association: [
|
||
|
* { foo: 'bar', id: 1 },
|
||
|
* { foo: 'bar', id: 2 },
|
||
|
* { foo: 'bar', id: 3 }
|
||
|
* ]
|
||
|
* }
|
||
|
* ]
|
||
|
*
|
||
|
* @param {Array} rows
|
||
|
* @param {object} includeOptions
|
||
|
* @param {object} options
|
||
|
* @private
|
||
|
*/
|
||
|
static _groupJoinData(rows: unknown[], includeOptions: IncludeOptions, options: AbstractQueryGroupJoinDataOptions): unknown[];
|
||
|
}
|