/// import connection = require("./connection"); import cache = require("./cache"); import schema = require("./schema"); import query = require("./query"); import { Callback, KVObject } from "./define"; export declare type FieldName = string | string[]; export interface ModelBaseOptions extends schema.SchemaOptions { /** * 表名 */ table: string; /** * 主键 */ primary?: FieldName; /** * 主键是否自增 */ autoIncrement?: boolean; /** * 唯一键 */ uniques?: FieldName[]; } export interface ModelOptions extends ModelBaseOptions { /** * Connection 实例 */ connection: connection.Connection; /** * Cache 实例 */ cache: cache.Cache; } export interface ModelQueryOptions { /** * 是否自动格式化查询结果 */ format?: boolean; /** * 回调函数 */ callback?: (err: Error | null, ret: any, callback: Callback) => void; } export declare class Model { /** Connection 实例 */ readonly connection: connection.Connection; /** Cache 实例 */ readonly cache: cache.Cache; /** 表名 */ readonly tableName: string; /** 主键 */ readonly primaryKey: string[]; /** 主键是否自增 */ readonly primaryKeyAutoIncrement: boolean; /** 唯一键列表 */ readonly uniqueKeyList: string[][]; /** 主键和唯一键列表 */ readonly importantFields: string[]; /** Schema 实例 */ readonly schema: schema.Schema; /** * 创建 Model */ constructor(options: ModelOptions); /** * 从一行数据中获取主键缓存名称 * @param data 键值对数据 * @param strict 是否严格检查每个键的数据都存在,如果为 true 且键不存在时抛出异常,否则返回 undefined */ getPrimaryCacheKey(data: KVObject, strict?: boolean): string; /** * 从一行数据中获取唯一键缓存名称列表 * @param data 键值对数据 */ getUniqueCacheKeys(data: KVObject): string[]; /** * 从一行数据中保留主键的数据 * @param data 键值对数据 */ keepPrimaryFields(data: KVObject): KVObject; /** * 从一行数据中保留唯一键的数据,如果有多组唯一键则仅返回第一个匹配的唯一键 * @param data 键值对数据 */ keepUniqueFields(data: KVObject): KVObject; /** * 创建 Query */ query(options?: ModelQueryOptions): query.QueryBuilder; /** * 查询数据 */ find(): query.QueryBuilder; /** * 查询一行数据 */ findOne(): query.QueryBuilder; /** * 查询数量 */ count(): query.QueryBuilder; /** * 更新数据 * @param update 键值对数据 */ update(update: KVObject): query.QueryBuilder; /** * 更新数据 * @param update SQL 语句 */ update(update: string): query.QueryBuilder; /** * 更新数据 * @param update SQL 模板语句 * @param values 模板参数,如 { a: 123 } */ update(update: string, values: KVObject): query.QueryBuilder; /** * 更新数据 * @param update SQL 模板语句 * @param values 模板参数,如 [ 123 ] */ update(update: string, values: any[]): query.QueryBuilder; /** * 更新一行数据 * @param update 键值对数据 */ updateOne(update: KVObject): query.QueryBuilder; /** * 更新一行数据 * @param update SQL 语句 */ updateOne(update: string): query.QueryBuilder; /** * 更新一行数据 * @param update SQL 模板语句 * @param values 模板参数,如 { a: 123 } */ updateOne(update: string, values: KVObject): query.QueryBuilder; /** * 更新一行数据 * @param update SQL 模板语句 * @param values 模板参数,如 [ 123 ] */ updateOne(update: string, values: any[]): query.QueryBuilder; /** * 删除数据 */ delete(): query.QueryBuilder; /** * 删除一行数据 */ deleteOne(): query.QueryBuilder; /** * 插入数据 * @param data 键值对数据 */ insert(data: KVObject): query.QueryBuilder; /** * 插入数据 * @param data 键值对数据数组 */ insert(data: KVObject[]): query.QueryBuilder; /** * 增加指定字段的值 * @param data 键值对数据,如:{ count: 1 } */ incr(data: KVObject): query.QueryBuilder; /** * 执行 SQL 查询 * @param sql SQL 语句 */ sql(sql: string): query.QueryBuilder; /** * 执行 SQL 查询 * @param sql SQL 语句模板 * @param values 模板参数,如 { a: 123 } */ sql(sql: string, values: KVObject): query.QueryBuilder; /** * 执行 SQL 查询 * @param sql SQL 语句模板 * @param values 模板参数,如 [ 123 ] */ sql(sql: string, values: any[]): query.QueryBuilder; /** * 获取指定主键的数据,优先从缓存读取 * @param query 键值对数据 */ getByPrimary(query: KVObject): Promise; /** * 获取指定主键的数据,优先从缓存读取 * @param query 查询条件 * @param callback 回调函数 */ getByPrimary(query: KVObject, callback: Callback): void; /** * 更新指定主键的数据,并删除缓存 * @param query 查询条件 * @param update 更新数据 */ updateByPrimary(query: KVObject, update: KVObject): Promise; /** * 更新指定主键的数据,并删除缓存 * @param query 查询条件 * @param update 更新数据 * @param callback 回调函数 */ updateByPrimary(query: KVObject, update: KVObject, callback: Callback): Promise | void; /** * 删除主键的数据,并删除缓存 * @param query 查询条件 */ deleteByPrimary(query: KVObject): Promise; /** * 删除主键的数据,并删除缓存 * @param query 查询条件 * @param callback 回调函数 */ deleteByPrimary(query: KVObject, callback: Callback): Promise | void; /** * 获取指定唯一键的数据,优先从缓存读取 * @param query 键值对数据 */ getByUnique(query: KVObject): Promise; /** * 获取指定唯一键的数据,优先从缓存读取 * @param query 查询条件 * @param callback 回调函数 */ getByUnique(query: KVObject, callback: Callback): void; /** * 更新指定唯一键的数据,并删除缓存 * @param query 查询条件 * @param update 更新数据 */ updateByUnique(query: KVObject, update: KVObject): Promise; /** * 更新指定唯一键的数据,并删除缓存 * @param query 查询条件 * @param update 更新数据 * @param callback 回调函数 */ updateByUnique(query: KVObject, update: KVObject, callback: Callback): Promise | void; /** * 删除唯一键的数据,并删除缓存 * @param query 查询条件 */ deleteByUnique(query: KVObject): Promise; /** * 删除唯一键的数据,并删除缓存 * @param query 查询条件 * @param callback 回调函数 */ deleteByUnique(query: KVObject, callback: Callback): Promise | void; /** * 删除符合指定查询条件的所有缓存 * @param query 可以为键值对数据或者 SQL 查询语句 */ removeAllCache(query: KVObject | string): Promise; /** * 删除符合指定查询条件的所有缓存 * @param query 可以为键值对数据或者 SQL 查询语句 * @param callback 回调函数 */ removeAllCache(query: KVObject | string, callback: Callback): void; /** * 更新缓存,包括 primaryKey 和 uniqueKeys */ private updateCacheByDataRow(data); /** * 删除缓存,包括 primaryKey 和 uniqueKeys */ private removeCacheByDataRow(data); /** * 根据数据行获取其相关的缓存 Key */ private getCacheKeysByDataRow(data); }