import type { t_sql_data_types, t_cd_hyphen, t_order_rule } from './config'; /** * 建表字段的配置接口 */ export interface ITableColumn { keyName: string; keyType: t_sql_data_types; keySize?: number; defaultData?: string | number | boolean; afterKey?: string; isPrimary?: number; isAuto?: number; isUnsigned?: number; isNotNull?: number; isUnique?: number; isCurrentTime?: number; isAutoUpdateTime?: number; comment?: string; isUid?: number; uiType?: string; } /** * 建表的配置接口 * @field foreignKey 当前表的哪个字段需要设置为外键字段 * @field foreignTable 外键关联表 * @field foreignTableKey 关联到外键表中的哪个字段 */ export interface IBaseTable { name: string; comment: string; foreignKey?: string; foreignTable?: string; foreignTableKey?: string; columns: Array; } export type Tkeys = { [k in keyof T]?: any; }; /** * 更新数据的配置接口 */ export interface IupdateConfig { keyName: string; keyValue: string | number | boolean | object | null; is_increment?: number; } /** * 过滤条件接口 * - or关系(isOr为true):指定k时只对前置的条件生效,不指定k时对前后所有的条件生效 * - (a = ? AND b = ?) OR d = ? AND e = ? 指定k * - (a = ? AND b = ?) OR (d = ? AND e = ?) */ export interface Icondition { k: string; v: string | number | boolean | object; h: t_cd_hyphen; isArr?: boolean; isOr?: boolean; } /** * 排序条件接口 */ export interface IorderCondition { k: string; rule?: t_order_rule; isReverse?: boolean; } /** * 分页条件接口 */ export interface IlimitCondition { page: number; size: number; } /** * 安全sql语句对象接口 */ export interface IsqlBaseResult { sql: string; values: any[]; } export interface IsqlSelectResult extends IsqlBaseResult { useOrders: (orders: IorderCondition[]) => Omit; useLimit: (limits: IlimitCondition) => IsqlBaseResult; useGroup: (gbks: string[], conditions?: Icondition[]) => IsqlBaseResult; useAvg: (k: string) => IsqlBaseResult; useCount: (k?: string) => IsqlBaseResult; useMax: (k: string) => IsqlBaseResult; useMin: (k: string) => IsqlBaseResult; useSum: (k: string) => IsqlBaseResult; } export interface IDbOptionalConfig { /** * 插入数据的前一刻,拦截每条数据 * todo: 暂时不支持更新拦截 */ rowIntercept?: TinterceptFn; /** * 插入或更新数据的前一刻,拦截每条的每个字段 */ fieldIntercept?: TfieldInterceptFn; debug?: boolean; } export interface IDbConfig { /** * 时间类型字段,该配置中的字段在查询时都会自动将时间转为字符串格式的数据 * 查询所有字段时,建议使用 ['*','时间字段'...] 否则可能不生效 */ ds_date_field?: string[]; /** * 逻辑删除字段 */ ds_delete_field?: string; ds_delete_state_no?: number | string | boolean; ds_delete_state_yes?: number | string | boolean; ds_page?: number; /** * 分页-每页条数,默认10条 */ ds_page_size?: number; /** * 是否对外暴露错误,默认false * false时-会在内部收集错误日志并保存到本地文件中 * 生产环境下建议设为true,防止某些错误无法被服务器捕捉 */ ds_is_expose_error?: boolean; } /** * sql操作错误接口 */ export interface IsqlErrorResult { code: string; errno: number; sql: string; sqlState: string; sqlMessage: string; } export interface IDsDCLConfig { user: string; password: string; } declare global { type TanyObj = { [k: string]: any; }; type TinterceptFn = (d: TanyObj) => void; type TfieldInterceptFn = (v: any, k: string, tname: string) => string | number | null | boolean | object; }