import { BaseService } from "./BaseService"; import Signal, { Req } from "badmfck-signal"; import * as mysql from "mysql2/promise"; import fs from "fs"; export declare const DEPRECATED_S_MYSQL_STARTED: Signal; export declare const DEPRECATED_REQ_MYSQL_QUERY: Req; export declare const DEPRECATED_REQ_MYSQL_TBEGIN: Req; export declare const DEPRECATED_REQ_MYSQL_TQUERY: Req<{ query: MySqlQuery; tid: number; }, MysqlResult>; export declare const DEPRECATED_REQ_MYSQL_TCOMMIT: Req; export declare const DEPRECATED_REQ_MYSQL_TROLLBACK: Req; export declare const executeQuery: (query: MySqlQuery | MySqlQuery[]) => Promise; export interface MysqlServiceOptions { connectionLimit: number; host: string; user: string; password: string; port: number; database: string; queueLimit?: number; transactionFailReport?: (trx: ITransaction, message: string) => void; transactionFailReportDir?: string; debug?: boolean; naxTransactionWaitTime?: number; migrations?: { dir: string; callback: () => void; } | null; } export interface MysqlError { code: string; errno: number; sql: string; name: string; message: string; fatal?: boolean; throwable: boolean; } export declare const isMysqlError: (e: any) => e is MysqlError; export interface MysqlResult { error?: MysqlError | null; rollbackError?: MysqlError | null; isDuplicateError?: boolean; data: any; count: number; } export interface MySqlQuery { query: string; fields: MysqlQueryField[] | MysqlQueryFieldObject; rollbackQuery?: string | null; transactionID?: number; throwable?: boolean; calculateCount?: boolean; } export interface MysqlQueryField { name: string; value: string | number | boolean | null | undefined; system?: boolean; ignoreInInsert?: boolean; ignoreInUpdate?: boolean; useInReplace?: boolean; _parsedValue?: string | number | boolean | null; } export interface ITransaction { id: number; timestamp: number; conn: mysql.PoolConnection; queries: { sql: string; status: string; }[]; } export interface MysqlQueryFieldObject extends Record { } export declare class MysqlService extends BaseService { reconnectionTimeout: number; reconnecting: boolean; pool: mysql.Pool | null; options: MysqlServiceOptions; serviceStarted: boolean; timeoutID: any; debug: boolean; queries: never[]; static nextTransactionID: number; transactions: ITransaction[]; maxTransactionWaitTime: number; lastSuccessQueryTime: number; pingInterval: number; failReportFileStream: fs.WriteStream | null; failReportFileStreamName: string | null; failReportLastAccessTime: number; constructor(options: MysqlServiceOptions); static executeQuery(query: MySqlQuery | MySqlQuery[]): Promise; init(): Promise; commit(trx: ITransaction): Promise; rollbackTransaction(trx: ITransaction, donNotRemove?: boolean): Promise; finishApp(): Promise; prepareCountQuery(query: string): string; storeTransactionAsProblem(trx: ITransaction, message: string): Promise; recreatePool(): Promise; onApplicationReady(): Promise; static fieldsToObject(fields: MysqlQueryField[] | MysqlQueryFieldObject, ignoreSystemParameters?: boolean): MysqlQueryFieldObject; static objectToFields(obj: MysqlQueryFieldObject | MysqlQueryField[]): MysqlQueryField[]; static prepareQuery(query: string, fields: MysqlQueryField[] | MysqlQueryFieldObject): string; static prepareQueryFieldValue(value: string | number | boolean | null | undefined, system?: boolean): string | number | boolean | null | undefined; execute(query: string, rollbackQuery: string | null, transactionID: number, throwable: boolean, calculateCount: boolean): Promise; sendQuery(conn: mysql.PoolConnection, query: string, resolve: (data: MysqlResult) => void, rollback: string | null, throwable: boolean, calculateCount: boolean): Promise; queryAsync(conn: mysql.PoolConnection, query: string): Promise<{ err: MysqlError | null; results?: any; }>; createMysqlQueryError(err: any, throwable?: boolean): MysqlError; } export default MysqlService;