tbdb 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/MongoDB/MongoDBAdapter.d.ts +59 -0
- package/dist/adapter/MongoDB/index.d.ts +1 -0
- package/dist/adapter/MongoDB/lib/docType.d.ts +9 -0
- package/dist/adapter/MongoDB/lib/normalizeProjection.d.ts +13 -0
- package/dist/adapter/MongoDB/lib/normalizeSort.d.ts +3 -0
- package/dist/adapter/MongoDB/test/base.test.d.ts +1 -0
- package/dist/adapter/MongoDB/test/docType.test.d.ts +1 -0
- package/dist/adapter/MongoDB/test/fitler.test.d.ts +1 -0
- package/dist/adapter/MongoDB/test/getTestMongo.d.ts +1 -0
- package/dist/adapter/MongoDB/test/setMany.test.d.ts +1 -0
- package/dist/adapter/MongoDB/test/updateOne.test.d.ts +1 -0
- package/dist/adapter/MongoDB/useMongoDB.d.ts +4 -0
- package/dist/adapter/SQLite/SQLiteAdapter.d.ts +49 -0
- package/dist/adapter/SQLite/index.d.ts +1 -0
- package/dist/adapter/SQLite/test/sqlite-find-sort.test.d.ts +1 -0
- package/dist/adapter/SQLite/test/sqlite-merge-union.test.d.ts +1 -0
- package/dist/adapter/SQLite/test/sqlite-overwrite.test.d.ts +1 -0
- package/dist/adapter/SQLite/test/sqlite-zstd.test.d.ts +1 -0
- package/dist/adapter/SQLite/test/sqlite.test.d.ts +1 -0
- package/dist/adapter/SQLite/utils/matcher.d.ts +9 -0
- package/dist/adapter/SQLite/utils/mongoToSql.d.ts +10 -0
- package/dist/adapter/SQLite/utils/patch.d.ts +10 -0
- package/dist/adapter/SQLite/utils/serializer.d.ts +14 -0
- package/dist/adapter/SQLite/utils/zstdHelper.d.ts +12 -0
- package/dist/adapter/adapter.d.ts +237 -0
- package/dist/benchmark/1-single-crud.bench.d.ts +1 -0
- package/dist/benchmark/2-batch-crud.bench.d.ts +1 -0
- package/dist/benchmark/3-paging.bench.d.ts +1 -0
- package/dist/benchmark/base.try.d.ts +1 -0
- package/dist/benchmark/utils.d.ts +15 -0
- package/dist/core/Table.d.ts +240 -0
- package/dist/core/backup.d.ts +38 -0
- package/dist/core/check.d.ts +28 -0
- package/dist/core/defineTable.d.ts +26 -0
- package/dist/core/event.d.ts +0 -0
- package/dist/core/join.d.ts +23 -0
- package/dist/core/list.d.ts +87 -0
- package/dist/core/schema.d.ts +9 -0
- package/dist/core/types.d.ts +280 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6287 -0
- package/dist/rslib-runtime.js +18 -0
- package/dist/test/backup/backup.try.d.ts +1 -0
- package/dist/test/backup-test.test.d.ts +1 -0
- package/dist/test/bulk-update.test.d.ts +1 -0
- package/dist/test/getTestTable.d.ts +5 -0
- package/dist/test/map-set-types.test.d.ts +1 -0
- package/dist/test/null-undefined-query.test.d.ts +1 -0
- package/dist/test/sort-type.test.d.ts +1 -0
- package/dist/test/table-doc-api.test.d.ts +1 -0
- package/dist/test/table-doc.test.d.ts +1 -0
- package/dist/test/table-filter.test.d.ts +1 -0
- package/dist/test/table-join.test.d.ts +1 -0
- package/dist/test/table-kv.test.d.ts +1 -0
- package/dist/test/table-list.test.d.ts +1 -0
- package/dist/test/table-markdelete.test.d.ts +1 -0
- package/dist/test/table-undfined.test.d.ts +1 -0
- package/dist/test/table-update.test.d.ts +1 -0
- package/dist/test/try/delete.try.d.ts +1 -0
- package/dist/test/try/doc.try.d.ts +5 -0
- package/dist/test/try/getTestUserTable.d.ts +5 -0
- package/dist/test/try/insert.try.d.ts +5 -0
- package/dist/test/try//345/210/233/345/273/272350/344/270/207/346/225/260/346/215/256.d.ts +2 -0
- package/dist/test/try//346/223/215/344/275/234350/344/270/207/346/225/260/346/215/256.d.ts +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ITableDBAdapterInstance, ITableDBAdapter, ITableDoc, ITableFindOptions, ITableUpdateOptions, ITableUpdateResult, ITableInsertResult, ITableSetOptions, ITableSetResult, ITableDeletedResult, ITableDefineIndexesOptions, ITableIndexConfig, ITableDeleteOptions } from "../adapter";
|
|
2
|
+
import { ITableFilter, ITableUpdateOp } from "../../core/types";
|
|
3
|
+
import { Collection } from "mongodb";
|
|
4
|
+
export declare function MongoDBAdapter(config: {
|
|
5
|
+
auth: string;
|
|
6
|
+
dbName: string;
|
|
7
|
+
}): ITableDBAdapter;
|
|
8
|
+
export declare class MongoDBAdapterInstance implements ITableDBAdapterInstance {
|
|
9
|
+
collection: Collection;
|
|
10
|
+
name: string;
|
|
11
|
+
constructor(collection: Collection);
|
|
12
|
+
/** 获取一个文档 */
|
|
13
|
+
get(id: any): Promise<ITableDoc | void>;
|
|
14
|
+
/** 设置一个文档 */
|
|
15
|
+
set(id: any, value: ITableDoc): Promise<void>;
|
|
16
|
+
/** 删除一个文档 */
|
|
17
|
+
delete(id: any): Promise<void>;
|
|
18
|
+
/** 检查文档是否存在 */
|
|
19
|
+
has(id: any): Promise<boolean>;
|
|
20
|
+
/** 获取文档数量 */
|
|
21
|
+
count(filter?: ITableFilter): Promise<number>;
|
|
22
|
+
/** 清空所有文档 */
|
|
23
|
+
clear(): Promise<void>;
|
|
24
|
+
/** 清除所有数据和索引 */
|
|
25
|
+
clearAll(): Promise<void>;
|
|
26
|
+
/** 删除所有数据和索引 */
|
|
27
|
+
drop(): Promise<void>;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
/** 查找多个文档 */
|
|
30
|
+
findMany(filter: ITableFilter, options?: ITableFindOptions): Promise<ITableDoc[]>;
|
|
31
|
+
/** 查找单个文档 */
|
|
32
|
+
findOne(filter: ITableFilter, options?: ITableFindOptions): Promise<ITableDoc | void>;
|
|
33
|
+
/** 修改单个现有文档 */
|
|
34
|
+
updateOne(filter: ITableFilter, updateOp: ITableUpdateOp, options?: ITableUpdateOptions): Promise<ITableUpdateResult>;
|
|
35
|
+
/** 修改多个现有文档 */
|
|
36
|
+
updateMany(filter: ITableFilter, updateOp: ITableUpdateOp, options?: ITableUpdateOptions): Promise<ITableUpdateResult>;
|
|
37
|
+
/** 批量更新多个文档 */
|
|
38
|
+
bulkUpdate(updates: {
|
|
39
|
+
filter: ITableFilter;
|
|
40
|
+
updateOp: ITableUpdateOp;
|
|
41
|
+
options?: ITableUpdateOptions;
|
|
42
|
+
}[]): Promise<ITableUpdateResult>;
|
|
43
|
+
/** 插入新文档 */
|
|
44
|
+
insertMany(docs: ITableDoc[]): Promise<ITableInsertResult>;
|
|
45
|
+
/** 设置多个文档 */
|
|
46
|
+
setMany(docs: ITableDoc[], options?: ITableSetOptions): Promise<ITableSetResult>;
|
|
47
|
+
/** 删除多个文档 */
|
|
48
|
+
deleteMany(filter: ITableFilter): Promise<ITableDeletedResult>;
|
|
49
|
+
/** 删除单个文档 */
|
|
50
|
+
deleteOne(filter: ITableFilter, options?: ITableDeleteOptions): Promise<ITableDeletedResult>;
|
|
51
|
+
/** 定义索引 */
|
|
52
|
+
defineIndexes(indexes: ITableIndexConfig[], options?: ITableDefineIndexesOptions): Promise<void>;
|
|
53
|
+
/** 删除所有索引 */
|
|
54
|
+
dropIndexes(): Promise<void>;
|
|
55
|
+
/** 压缩数据库文件 */
|
|
56
|
+
compact(): Promise<void>;
|
|
57
|
+
/** 内部方法:将 MongoDB 返回的 _id 转换为文档 id */
|
|
58
|
+
__mongodbIds_to_docIds(_ids: any[]): Promise<any[]>;
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MongoDBAdapter } from "./MongoDBAdapter";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ITableValue } from "../../../core/types";
|
|
2
|
+
/**
|
|
3
|
+
* ITableValue 转换为 MongoDB 可存储格式
|
|
4
|
+
*/
|
|
5
|
+
export declare function jsToMongo(data: any, parseFilter?: boolean): any | Promise<any>;
|
|
6
|
+
/**
|
|
7
|
+
* MongoDB 数据还原为原始 ITableValue 类型
|
|
8
|
+
*/
|
|
9
|
+
export declare function mongoToJs(data: any): ITableValue;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Document } from "mongodb";
|
|
2
|
+
/** 规范化投影参数(仅转换格式,不处理 _id) */
|
|
3
|
+
export declare function normalizeProjection(proj?: string[] | Record<string, 1 | -1>): Document | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* 构建最终的 MongoDB projection 选项
|
|
6
|
+
*
|
|
7
|
+
* 规则:
|
|
8
|
+
* - 无 projection:默认排除 _id
|
|
9
|
+
* - 只有 { _id: 1 }:返回全部字段(包括 _id)
|
|
10
|
+
* - 指定字段但无 _id:排除 _id
|
|
11
|
+
* - 指定字段且有 _id:按用户设置
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildProjection(userProjection?: string[] | Record<string, 1 | -1>): Document | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getTestAdapter(tableName?: string): Promise<import("../../adapter").ITableDBAdapterInstance>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { ITableDBAdapterInstance, ITableDBAdapter, ITableDefineIndexesOptions, ITableDeletedResult, ITableDeleteOptions, ITableDoc, ITableFindOptions, ITableIndexConfig, ITableInsertResult, ITableSetOptions, ITableSetResult, ITableUpdateOptions, ITableUpdateResult } from "../adapter";
|
|
3
|
+
import { ITableFilter, ITableUpdateOp } from "../../core/types";
|
|
4
|
+
export declare function SQLiteAdapter(config: {
|
|
5
|
+
filename: string;
|
|
6
|
+
safe?: boolean | "full";
|
|
7
|
+
zstd?: boolean;
|
|
8
|
+
}): ITableDBAdapter;
|
|
9
|
+
export declare class SQLiteAdapterInstance implements ITableDBAdapterInstance {
|
|
10
|
+
private db;
|
|
11
|
+
private tableName;
|
|
12
|
+
private config;
|
|
13
|
+
name: string;
|
|
14
|
+
constructor(db: Database.Database, tableName: string, config: {
|
|
15
|
+
filename: string;
|
|
16
|
+
safe?: boolean | "full";
|
|
17
|
+
zstd?: boolean;
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* 将对象中所有 undefined 转换为 null,保持 MongoDB 一致性
|
|
21
|
+
* 注意:不处理 Map、Set、Date、Buffer 等特殊类型,由 serialize/deserialize 处理
|
|
22
|
+
*/
|
|
23
|
+
private normalizeUndefined;
|
|
24
|
+
get(id: any): Promise<ITableDoc | void>;
|
|
25
|
+
set(id: any, value: ITableDoc): Promise<void>;
|
|
26
|
+
delete(id: any): Promise<void>;
|
|
27
|
+
has(id: any): Promise<boolean>;
|
|
28
|
+
count(filter?: ITableFilter): Promise<number>;
|
|
29
|
+
clear(): Promise<void>;
|
|
30
|
+
clearAll(): Promise<void>;
|
|
31
|
+
drop(): Promise<void>;
|
|
32
|
+
close(): Promise<void>;
|
|
33
|
+
findMany(filter: ITableFilter, options?: ITableFindOptions): Promise<ITableDoc[]>;
|
|
34
|
+
findOne(filter: ITableFilter, options?: ITableFindOptions): Promise<ITableDoc | void>;
|
|
35
|
+
updateMany(filter: ITableFilter, updateOp: ITableUpdateOp<ITableDoc>, options?: ITableUpdateOptions): Promise<ITableUpdateResult>;
|
|
36
|
+
bulkUpdate(updates: {
|
|
37
|
+
filter: ITableFilter;
|
|
38
|
+
updateOp: ITableUpdateOp<ITableDoc>;
|
|
39
|
+
options?: ITableUpdateOptions;
|
|
40
|
+
}[]): Promise<ITableUpdateResult>;
|
|
41
|
+
updateOne(filter: ITableFilter, updateOp: ITableUpdateOp<ITableDoc>, options?: ITableUpdateOptions): Promise<ITableUpdateResult>;
|
|
42
|
+
insertMany(docs: ITableDoc[]): Promise<ITableInsertResult>;
|
|
43
|
+
setMany(docs: Partial<ITableDoc>[], options?: ITableSetOptions): Promise<ITableSetResult>;
|
|
44
|
+
deleteMany(filter: ITableFilter): Promise<ITableDeletedResult>;
|
|
45
|
+
deleteOne(filter: ITableFilter, options?: ITableDeleteOptions): Promise<ITableDeletedResult>;
|
|
46
|
+
defineIndexes(indexes: ITableIndexConfig[], options?: ITableDefineIndexesOptions): Promise<void>;
|
|
47
|
+
dropIndexes(): Promise<void>;
|
|
48
|
+
compact(): Promise<void>;
|
|
49
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SQLiteAdapter } from "./SQLiteAdapter";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ITableFilter } from "../../../core/types";
|
|
2
|
+
import { ITableFindOptions } from "../../adapter";
|
|
3
|
+
export interface ISqlQuery {
|
|
4
|
+
where: string;
|
|
5
|
+
params: any[];
|
|
6
|
+
sort?: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
offset?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function mongoToSql(filter: ITableFilter, options?: ITableFindOptions): Promise<ISqlQuery>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ITableUpdateOp } from "../../../core/types";
|
|
2
|
+
/**
|
|
3
|
+
* 在内存中对文档应用 MongoDB 风格的更新操作
|
|
4
|
+
* 直接修改传入的 doc 对象
|
|
5
|
+
* @returns 是否发生了修改
|
|
6
|
+
*/
|
|
7
|
+
export declare function applyUpdate(doc: any, op: ITableUpdateOp): boolean;
|
|
8
|
+
export declare function isPlainObject(v: any): any;
|
|
9
|
+
export declare function flattenObject(obj: any, prefix?: string, result?: any): any;
|
|
10
|
+
export declare function deepMergeWithArrayUnion(target: any, source: any): any;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将 JS 对象序列化为 SQLite 可存储的 JSON 友好格式
|
|
3
|
+
* 异步版本:支持 Blob 转 Base64
|
|
4
|
+
*/
|
|
5
|
+
export declare function serialize(value: any): Promise<any>;
|
|
6
|
+
/**
|
|
7
|
+
* 同步版本:不支持 Blob (除非 Blob逻辑是sync的,但通常不是)
|
|
8
|
+
* 用于 JsPatch 等同步环境
|
|
9
|
+
*/
|
|
10
|
+
export declare function serializeSync(value: any): any;
|
|
11
|
+
/**
|
|
12
|
+
* 将 SQLite 存储的 JSON 格式反序列化为 JS 对象
|
|
13
|
+
*/
|
|
14
|
+
export declare function deserialize(value: any): any;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Database } from "better-sqlite3";
|
|
2
|
+
/**
|
|
3
|
+
* 检查文件是否为 ZSTD 压缩文件 (Magic Number: 0xFD2FB528)
|
|
4
|
+
*/
|
|
5
|
+
export declare function isZstdFile(filepath: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* 如果数据库文件存在且被 zstd 压缩,则解压它。
|
|
8
|
+
* @param filename 数据库文件名
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkAndDecompressDb(filename: string): void;
|
|
11
|
+
export declare function prepareForCompression(db: Database): void;
|
|
12
|
+
export declare function compressFile(filename: string): void;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { ITableFilter, ITableValue, ITableUpdateOp } from "../core/types";
|
|
2
|
+
export type ITableDoc = Record<string, ITableValue> & {
|
|
3
|
+
id: any;
|
|
4
|
+
_createDate?: Date;
|
|
5
|
+
_updateDate?: Date;
|
|
6
|
+
_deleteDate?: Date;
|
|
7
|
+
_isDeleted?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type ITableDBAdapter = {
|
|
10
|
+
name: string;
|
|
11
|
+
useAdapterInstance(tableName: string): Promise<ITableDBAdapterInstance>;
|
|
12
|
+
};
|
|
13
|
+
export interface ITableDBAdapterInstance {
|
|
14
|
+
name: string;
|
|
15
|
+
get(id: any): Promise<ITableDoc | void>;
|
|
16
|
+
set(id: any, value: Partial<ITableDoc>): Promise<void>;
|
|
17
|
+
delete(id: any): Promise<void>;
|
|
18
|
+
has(id: any): Promise<boolean>;
|
|
19
|
+
count(filter?: ITableFilter): Promise<number>;
|
|
20
|
+
/** 清空所有数据,不包括索引 */
|
|
21
|
+
clear(): Promise<void>;
|
|
22
|
+
/** 清除所有数据和索引 */
|
|
23
|
+
clearAll(): Promise<void>;
|
|
24
|
+
/** 删除表 */
|
|
25
|
+
drop(): Promise<void>;
|
|
26
|
+
/** 安全的关闭连接 */
|
|
27
|
+
close(): Promise<void>;
|
|
28
|
+
/** 查找多个文档 */
|
|
29
|
+
findMany(filter: ITableFilter, options?: ITableFindOptions): Promise<ITableDoc[]>;
|
|
30
|
+
/** 查找单个文档 */
|
|
31
|
+
findOne(filter: ITableFilter, options?: ITableFindOptions): Promise<ITableDoc | void>;
|
|
32
|
+
/** 修改单个现有文档
|
|
33
|
+
* 如果没有匹配的文档,则不进行任何操作
|
|
34
|
+
* 只会修改第一个匹配的文档
|
|
35
|
+
*/
|
|
36
|
+
updateOne(filter: ITableFilter, updateOp: ITableUpdateOp<ITableDoc>, options?: ITableUpdateOptions): Promise<ITableUpdateResult>;
|
|
37
|
+
/** 修改多个现有文档
|
|
38
|
+
* 如果没有匹配的文档,则不进行任何操作
|
|
39
|
+
* 根据 filter 的匹配结果,可能会修改多个文档
|
|
40
|
+
*/
|
|
41
|
+
updateMany(filter: ITableFilter, updateOp: ITableUpdateOp<ITableDoc>, options?: ITableUpdateOptions): Promise<ITableUpdateResult>;
|
|
42
|
+
/** 批量修改多个文档
|
|
43
|
+
* 根据每个 update 的 filter 进行匹配 ,可能会修改多个文档
|
|
44
|
+
*/
|
|
45
|
+
bulkUpdate(updates: {
|
|
46
|
+
filter: ITableFilter;
|
|
47
|
+
updateOp: ITableUpdateOp<ITableDoc>;
|
|
48
|
+
options?: ITableUpdateOptions;
|
|
49
|
+
}[]): Promise<ITableUpdateResult>;
|
|
50
|
+
/** 插入新文档
|
|
51
|
+
*
|
|
52
|
+
* 如果目标文档的 ID 已存在,会忽略,不会进行覆盖,并且继续插入其他文档
|
|
53
|
+
*/
|
|
54
|
+
insertMany(docs: Partial<ITableDoc>[]): Promise<ITableInsertResult>;
|
|
55
|
+
/** 设置多个文档
|
|
56
|
+
*
|
|
57
|
+
* 根据 doc 的 id 匹配,如果已存在则进行 update 否则进行 insert\
|
|
58
|
+
* 可以通过 options 控制只插入新文档或只覆盖已存在文档
|
|
59
|
+
*/
|
|
60
|
+
setMany(docs: Partial<ITableDoc>[], options?: ITableSetOptions): Promise<ITableSetResult>;
|
|
61
|
+
/** 删除多个文档
|
|
62
|
+
*
|
|
63
|
+
* 根据 filter 的匹配结果,可能会删除多个文档
|
|
64
|
+
*/
|
|
65
|
+
deleteMany(filter: ITableFilter): Promise<ITableDeletedResult>;
|
|
66
|
+
/** 删除单个文档
|
|
67
|
+
*
|
|
68
|
+
* 只会删除第一个匹配的文档
|
|
69
|
+
*/
|
|
70
|
+
deleteOne(filter: ITableFilter, options?: ITableDeleteOptions): Promise<ITableDeletedResult>;
|
|
71
|
+
/**
|
|
72
|
+
* 定义索引
|
|
73
|
+
* 指定 data 中哪些字段需要创建索引,可以加快查询速度
|
|
74
|
+
*
|
|
75
|
+
*/
|
|
76
|
+
defineIndexes(indexes: ITableIndexConfig[], options?: ITableDefineIndexesOptions): Promise<void>;
|
|
77
|
+
/** 删除所有索引 */
|
|
78
|
+
dropIndexes(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* 在插入或更新文档前,进行检查和修正\
|
|
81
|
+
* 直接修改传入的 doc 对象\
|
|
82
|
+
*/
|
|
83
|
+
onCheckInputDoc?(doc: ITableDoc | void): any;
|
|
84
|
+
/**
|
|
85
|
+
* 在输出文档前,进行检查和修正\
|
|
86
|
+
* 直接修改传入的 doc 对象\
|
|
87
|
+
*/
|
|
88
|
+
onCheckOutputDoc?(doc: ITableDoc | void): any;
|
|
89
|
+
/**
|
|
90
|
+
* 在 fitler 实际使用前,进行检查和修正\
|
|
91
|
+
* 直接修改传入的 filter 对象\
|
|
92
|
+
*/
|
|
93
|
+
onCheckFilter?(filter: ITableFilter): any;
|
|
94
|
+
/** 压缩数据库文件,回收空间
|
|
95
|
+
*
|
|
96
|
+
* mongodb 会使用 compact 命令进行压缩\
|
|
97
|
+
* sqlite 会使用 VACUUM 命令进行压缩\
|
|
98
|
+
*/
|
|
99
|
+
compact(): Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
export interface ITableFindOptions {
|
|
102
|
+
/** 限制返回的记录数(每一页) */
|
|
103
|
+
limit?: number;
|
|
104
|
+
/** 跳过的记录数(页码 * 每页记录数) */
|
|
105
|
+
offset?: number;
|
|
106
|
+
/** 投影字段列表
|
|
107
|
+
*
|
|
108
|
+
* 可以是字符串数组,表示包含的字段列表\
|
|
109
|
+
* 也可以是字段映射对象,1 表示包含该字段,-1 表示排除该字段\
|
|
110
|
+
* 不能同时包含和排除字段
|
|
111
|
+
*
|
|
112
|
+
* 可以是 plv 预设投影名称
|
|
113
|
+
*/
|
|
114
|
+
projection?: string[] | Record<string, 1 | -1>;
|
|
115
|
+
/** 排序字段列表
|
|
116
|
+
*
|
|
117
|
+
* 可以是字符串数组, 前面加 `-` 表示降序,\
|
|
118
|
+
* 也可以是字段映射对象,1 表示升序,-1 表示降序
|
|
119
|
+
*/
|
|
120
|
+
sort?: string[] | Record<string, 1 | -1>;
|
|
121
|
+
/** 排序时按自然排序, numericOrdering:true locale: "zh" */
|
|
122
|
+
naturalSort?: boolean;
|
|
123
|
+
/** 排序时是否区分大小写,默认区分 */
|
|
124
|
+
caseSensitive?: boolean;
|
|
125
|
+
/** 排序时是否进行数字排序,默认不进行 */
|
|
126
|
+
numericOrdering?: boolean;
|
|
127
|
+
/** 是否忽略标记删除逻辑,默认 false */
|
|
128
|
+
ignoreMarkDelete?: boolean;
|
|
129
|
+
}
|
|
130
|
+
export interface ITableUpdateOptions {
|
|
131
|
+
/** 是否在没有匹配的文档时插入一个新文档,然后再进行更新操作 */
|
|
132
|
+
upsert?: boolean;
|
|
133
|
+
/** 排序字段列表
|
|
134
|
+
* 只在 updateOne 中有效,用于当 filter 有多个匹配文档时,优先更新哪个文档
|
|
135
|
+
*
|
|
136
|
+
* 可以是字符串数组, 前面加 `-` 表示降序,\
|
|
137
|
+
* 也可以是字段映射对象,1 表示升序,-1 表示降序
|
|
138
|
+
*/
|
|
139
|
+
sort?: string[] | Record<string, 1 | -1>;
|
|
140
|
+
}
|
|
141
|
+
export interface ITableDeleteOptions {
|
|
142
|
+
/** 排序字段列表
|
|
143
|
+
* 用于当 filter 有多个匹配文档时,优先删除哪个文档
|
|
144
|
+
*
|
|
145
|
+
* 可以是字符串数组, 前面加 `-` 表示降序,\
|
|
146
|
+
* 也可以是字段映射对象,1 表示升序,-1 表示降序
|
|
147
|
+
*/
|
|
148
|
+
sort?: string[] | Record<string, 1 | -1>;
|
|
149
|
+
/** 是否忽略标记删除逻辑,直接物理删除文档,默认 false */
|
|
150
|
+
readDelete?: boolean;
|
|
151
|
+
}
|
|
152
|
+
export interface ITableSetOptions {
|
|
153
|
+
/** 是否合并对象字段而不是覆盖,默认 false
|
|
154
|
+
*
|
|
155
|
+
* - 对于数组的合并,采用的是集合合并,
|
|
156
|
+
* 即新的数组元素检查原数组中是否已存在,不存在就添加,类似于 `$addToSet` 操作,遵循的是 BSON 值的比较规则
|
|
157
|
+
*/
|
|
158
|
+
merge?: boolean;
|
|
159
|
+
/** 是否对 doc 进行覆盖而不是浅合并,把新文档完全替换掉已存在的文档 */
|
|
160
|
+
overwrite?: boolean;
|
|
161
|
+
/** 是否只插入新文档,已存在的文档不进行更新 */
|
|
162
|
+
insertOnly?: boolean;
|
|
163
|
+
/** 是否只更新已存在的文档,不存在的文档不进行插入 */
|
|
164
|
+
updateOnly?: boolean;
|
|
165
|
+
}
|
|
166
|
+
export interface ITableDefineIndexesOptions {
|
|
167
|
+
/** 是否强制重新创建索引,默认 false */
|
|
168
|
+
rebuild?: boolean;
|
|
169
|
+
}
|
|
170
|
+
export interface ITableUpdateResult {
|
|
171
|
+
/** 匹配到的文档数量 */
|
|
172
|
+
matchedCount: number;
|
|
173
|
+
/** 成功修改的文档数量 */
|
|
174
|
+
modifiedCount: number;
|
|
175
|
+
/** 如果进行了 upsert 操作,返回新插入的文档 ID 列表 */
|
|
176
|
+
upsertedIds?: any[];
|
|
177
|
+
}
|
|
178
|
+
export interface ITableInsertResult {
|
|
179
|
+
/** 成功插入的文档数量 */
|
|
180
|
+
insertedCount: number;
|
|
181
|
+
/** 因为已存在而跳过的文档数量 */
|
|
182
|
+
skippedCount: number;
|
|
183
|
+
/** 成功插入的文档 ID 列表 */
|
|
184
|
+
insertedIds: string[];
|
|
185
|
+
/** 已存在未插入的文档 ID 列表 */
|
|
186
|
+
skippedIds: string[];
|
|
187
|
+
}
|
|
188
|
+
export interface ITableSetResult {
|
|
189
|
+
/** 成功插入的新文档数量 */
|
|
190
|
+
insertedCount: number;
|
|
191
|
+
/** 因为已存在而被覆盖的文档数量 */
|
|
192
|
+
overwriteCount: number;
|
|
193
|
+
/** 成功插入的新文档 ID 列表 */
|
|
194
|
+
insertedIds: string[];
|
|
195
|
+
}
|
|
196
|
+
export interface ITableDeletedResult {
|
|
197
|
+
/** 成功删除的文档数量 */
|
|
198
|
+
deletedCount: number;
|
|
199
|
+
}
|
|
200
|
+
export type ITableIndexConfig = {
|
|
201
|
+
/**
|
|
202
|
+
* 要索引的字段
|
|
203
|
+
*
|
|
204
|
+
* 可以用 `.` 表示嵌套字段\
|
|
205
|
+
* 可以用对象表示复合索引,如 { city: 1, age: -1 } 表示对 city 升序,age 降序,\
|
|
206
|
+
* 复合索引的字段顺序很重要,先按 city 排序,再按 age 排序
|
|
207
|
+
*/
|
|
208
|
+
key: string | Record<string, 1 | -1>;
|
|
209
|
+
/** 索引名称
|
|
210
|
+
* 默认为字段名或复合字段名的连接字符串 + "_1" ,MongoDB 默认规则
|
|
211
|
+
*/
|
|
212
|
+
name?: string;
|
|
213
|
+
/** 索引类型 */
|
|
214
|
+
type?: string;
|
|
215
|
+
/** 是否禁用该索引(删除此索引)
|
|
216
|
+
* 需要指定 name 选项才能删除对应的索引
|
|
217
|
+
*/
|
|
218
|
+
disabled?: boolean;
|
|
219
|
+
/** 是否唯一,默认 false */
|
|
220
|
+
unique?: boolean;
|
|
221
|
+
/** 语言/区域设置 */
|
|
222
|
+
locale?: string | "en" | "zh" | "jp";
|
|
223
|
+
/** 是否按数字排序\
|
|
224
|
+
* 如果为真,则 '2' 会排在 '10' 前面
|
|
225
|
+
*/
|
|
226
|
+
numericOrdering?: boolean;
|
|
227
|
+
/**
|
|
228
|
+
* 是否使用自然排序
|
|
229
|
+
* 相当于 numericOrdering = true, locale = "zh"
|
|
230
|
+
*/
|
|
231
|
+
naturalSort?: boolean;
|
|
232
|
+
/** 区分大小写
|
|
233
|
+
*
|
|
234
|
+
* 默认 true,区分大小写,如果为 false,则 'a' 和 'A' 视为相同字符
|
|
235
|
+
*/
|
|
236
|
+
caseSensitive?: boolean;
|
|
237
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Table } from "../core/Table";
|
|
2
|
+
import { ITableDoc } from "../adapter/adapter";
|
|
3
|
+
export interface IBenchDoc extends ITableDoc {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
age: number;
|
|
7
|
+
tags: string[];
|
|
8
|
+
meta: {
|
|
9
|
+
created: number;
|
|
10
|
+
updated: number;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare function createBenchTable(name: string, enableMarkDelete?: boolean): Promise<Table<IBenchDoc, import("../core/Table").IPlvMap>>;
|
|
14
|
+
export declare function generateDoc(i: number): IBenchDoc;
|
|
15
|
+
export declare function prepareTableData(table: Table<IBenchDoc>, count: number): Promise<void>;
|