import mysql, { ConnectionOptions } from "mysql2/promise"; export type DSN = ConnectionOptions; /** * データベースアクセス */ export declare class MyMigDB { private dsn; private con; /** * constructor * @param dsn */ constructor(dsn: DSN); /** * get connection */ get(): Promise; /** * release connection; */ release(): Promise; /** * クエリを実行する(一切変換しない) * * @param sql * @param params * @param isLog * @returns */ query(sql: string, params?: any[], isLog?: boolean, selectTarget?: string): Promise; /** * データベースから読み込んだ時の標準的変換動作。 */ convertFrom(_tableName: string, _columnName: string, value: any): any; convertTo(value: any): any; queryLog(sql: string, params: any[], isLog: boolean): void; resultLog(result: any, isLog: boolean): void; } type Expression = "eq" | "en" | "ne" | "lt" | "le" | "gt" | "ge" | "isNull" | "isNotNull" | "isTrue" | "isFalse" | "isUnknown" | "isNotTrue" | "isNotFalse" | "isNotUnknown" | "between" | "notBetween"; export type Exp = { key: COLUMN; exp: Expression; val?: any; }; export type Where = Exp | (Where | "AND" | "OR")[]; /** * テーブルアクセスクラス */ export declare class Table { protected tableName: string; protected database: MyMigDB; /** * コンストラクタ * * @param tableName * @param database */ constructor(tableName: string, database: MyMigDB); /** * 式生成用関数 * * @param key * @param val * @returns */ eq(key: COLUMNS, val: any): Exp; en(key: COLUMNS, val: any): Exp; ne(key: COLUMNS, val: any): Exp; lt(key: COLUMNS, val: any): Exp; le(key: COLUMNS, val: any): Exp; gt(key: COLUMNS, val: any): Exp; ge(key: COLUMNS, val: any): Exp; isNull(key: COLUMNS): Exp; isNotNull(key: COLUMNS): Exp; isTrue(key: COLUMNS): Exp; isFalse(key: COLUMNS): Exp; isUnknown(key: COLUMNS): Exp; isNotTrue(key: COLUMNS): Exp; isNotFalse(key: COLUMNS): Exp; isNotUnknown(key: COLUMNS): Exp; between(key: COLUMNS, from: any, till: any): Exp; notBetween(key: COLUMNS, from: any, till: any): Exp; /** * こんな配列を渡すと * [eq("id","hoge"),"AND",[eq("foo","bar"),"OR",lt("updated_at","2022-03-26")]], * * こんな風にレンダリングする * id=? and (foo=? or updated_at, params: any[]): string; /** * select * 何もないときは空のリストを返す * * @param where * @param orderBy * @param isLog * @returns */ select(where?: Where | undefined, orderBy?: undefined, isLog?: boolean): Promise[]>; /** * get first row * * @param where * @param isLog * @returns */ findOne(where: Where, isLog?: boolean): Promise | undefined>; /** * insert * * @param insert * @param isLog * @returns */ insert(insert: TYPE, isLog?: boolean): Promise; /** * update * * @param update * @param where * @param isLog * @returns */ update(update: TYPE, where: Where, isLog?: boolean): Promise; /** * delete * * @param where * @param isLog * @returns */ delete(where?: Where | undefined, isLog?: boolean): Promise; /** * upsert * * @param table * @param insert * @param updateNames * @returns */ upsert(insert: TYPE, updateNames: (keyof TYPE)[], isLog?: boolean): Promise; } export {};