///
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);
}