@yydb/light-db 0.0.0 → 0.0.11

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.
Files changed (230) hide show
  1. package/dist/api/database.d.ts +48 -0
  2. package/dist/api/database.d.ts.map +1 -0
  3. package/dist/api/database.js +120 -0
  4. package/dist/api/database.js.map +1 -0
  5. package/dist/api/index.d.ts +7 -22
  6. package/dist/api/index.d.ts.map +1 -1
  7. package/dist/api/index.js +5 -52
  8. package/dist/api/index.js.map +1 -1
  9. package/dist/api/schema.d.ts +33 -0
  10. package/dist/api/schema.d.ts.map +1 -0
  11. package/dist/api/schema.js +80 -0
  12. package/dist/api/schema.js.map +1 -0
  13. package/dist/api/transaction.d.ts +26 -0
  14. package/dist/api/transaction.d.ts.map +1 -0
  15. package/dist/api/transaction.js +52 -0
  16. package/dist/api/transaction.js.map +1 -0
  17. package/dist/api/types.d.ts +55 -148
  18. package/dist/api/types.d.ts.map +1 -1
  19. package/dist/api/types.js +6 -5
  20. package/dist/api/types.js.map +1 -1
  21. package/dist/codec/binary.d.ts +196 -0
  22. package/dist/codec/binary.d.ts.map +1 -0
  23. package/dist/codec/binary.js +342 -0
  24. package/dist/codec/binary.js.map +1 -0
  25. package/dist/codec/checksum.d.ts +21 -0
  26. package/dist/codec/checksum.d.ts.map +1 -0
  27. package/dist/codec/checksum.js +46 -0
  28. package/dist/codec/checksum.js.map +1 -0
  29. package/dist/codec/index.d.ts +12 -0
  30. package/dist/codec/index.d.ts.map +1 -0
  31. package/dist/codec/index.js +10 -0
  32. package/dist/codec/index.js.map +1 -0
  33. package/dist/codec/page.d.ts +114 -0
  34. package/dist/codec/page.d.ts.map +1 -0
  35. package/dist/codec/page.js +225 -0
  36. package/dist/codec/page.js.map +1 -0
  37. package/dist/codec/record.d.ts +62 -0
  38. package/dist/codec/record.d.ts.map +1 -0
  39. package/dist/codec/record.js +82 -0
  40. package/dist/codec/record.js.map +1 -0
  41. package/dist/core/broadcast.d.ts +39 -0
  42. package/dist/core/broadcast.d.ts.map +1 -0
  43. package/dist/core/broadcast.js +54 -0
  44. package/dist/core/broadcast.js.map +1 -0
  45. package/dist/core/checkpoint.d.ts +23 -0
  46. package/dist/core/checkpoint.d.ts.map +1 -0
  47. package/dist/core/checkpoint.js +49 -0
  48. package/dist/core/checkpoint.js.map +1 -0
  49. package/dist/core/engine.d.ts +142 -0
  50. package/dist/core/engine.d.ts.map +1 -0
  51. package/dist/core/engine.js +304 -0
  52. package/dist/core/engine.js.map +1 -0
  53. package/dist/core/index.d.ts +17 -0
  54. package/dist/core/index.d.ts.map +1 -0
  55. package/dist/core/index.js +13 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/lease.d.ts +32 -0
  58. package/dist/core/lease.d.ts.map +1 -0
  59. package/dist/core/lease.js +81 -0
  60. package/dist/core/lease.js.map +1 -0
  61. package/dist/core/records.d.ts +49 -0
  62. package/dist/core/records.d.ts.map +1 -0
  63. package/dist/core/records.js +70 -0
  64. package/dist/core/records.js.map +1 -0
  65. package/dist/core/recovery.d.ts +43 -0
  66. package/dist/core/recovery.d.ts.map +1 -0
  67. package/dist/core/recovery.js +99 -0
  68. package/dist/core/recovery.js.map +1 -0
  69. package/dist/core/wal.d.ts +50 -0
  70. package/dist/core/wal.d.ts.map +1 -0
  71. package/dist/core/wal.js +114 -0
  72. package/dist/core/wal.js.map +1 -0
  73. package/dist/errors/index.d.ts +44 -66
  74. package/dist/errors/index.d.ts.map +1 -1
  75. package/dist/errors/index.js +43 -128
  76. package/dist/errors/index.js.map +1 -1
  77. package/dist/index.d.ts +14 -215
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +14 -724
  80. package/dist/index.js.map +1 -1
  81. package/dist/storage/StorageAdapter.d.ts +97 -0
  82. package/dist/storage/StorageAdapter.d.ts.map +1 -0
  83. package/dist/storage/StorageAdapter.js +9 -0
  84. package/dist/storage/StorageAdapter.js.map +1 -0
  85. package/dist/storage/index.d.ts +9 -8
  86. package/dist/storage/index.d.ts.map +1 -1
  87. package/dist/storage/index.js +8 -151
  88. package/dist/storage/index.js.map +1 -1
  89. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts +140 -0
  90. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts.map +1 -0
  91. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js +403 -0
  92. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js.map +1 -0
  93. package/dist/storage/memory/MemoryStorageAdapter.d.ts +76 -0
  94. package/dist/storage/memory/MemoryStorageAdapter.d.ts.map +1 -0
  95. package/dist/storage/memory/MemoryStorageAdapter.js +212 -0
  96. package/dist/storage/memory/MemoryStorageAdapter.js.map +1 -0
  97. package/dist/storage/opfs/OpfsStorageAdapter.d.ts +141 -0
  98. package/dist/storage/opfs/OpfsStorageAdapter.d.ts.map +1 -0
  99. package/dist/storage/opfs/OpfsStorageAdapter.js +400 -0
  100. package/dist/storage/opfs/OpfsStorageAdapter.js.map +1 -0
  101. package/package.json +48 -36
  102. package/readme.md +80 -94
  103. package/dist/api/LightDB.d.ts +0 -194
  104. package/dist/api/LightDB.d.ts.map +0 -1
  105. package/dist/api/LightDB.js +0 -299
  106. package/dist/api/LightDB.js.map +0 -1
  107. package/dist/api/Transaction.d.ts +0 -100
  108. package/dist/api/Transaction.d.ts.map +0 -1
  109. package/dist/api/Transaction.js +0 -263
  110. package/dist/api/Transaction.js.map +0 -1
  111. package/dist/collection/Collection.d.ts +0 -235
  112. package/dist/collection/Collection.d.ts.map +0 -1
  113. package/dist/collection/Collection.js +0 -671
  114. package/dist/collection/Collection.js.map +0 -1
  115. package/dist/collection/QueryBuilder.d.ts +0 -225
  116. package/dist/collection/QueryBuilder.d.ts.map +0 -1
  117. package/dist/collection/QueryBuilder.js +0 -475
  118. package/dist/collection/QueryBuilder.js.map +0 -1
  119. package/dist/collection/QueryParser.d.ts +0 -117
  120. package/dist/collection/QueryParser.d.ts.map +0 -1
  121. package/dist/collection/QueryParser.js +0 -438
  122. package/dist/collection/QueryParser.js.map +0 -1
  123. package/dist/collection/index.d.ts +0 -42
  124. package/dist/collection/index.d.ts.map +0 -1
  125. package/dist/collection/index.js +0 -41
  126. package/dist/collection/index.js.map +0 -1
  127. package/dist/collection/types.d.ts +0 -365
  128. package/dist/collection/types.d.ts.map +0 -1
  129. package/dist/collection/types.js +0 -7
  130. package/dist/collection/types.js.map +0 -1
  131. package/dist/constants/index.d.ts +0 -51
  132. package/dist/constants/index.d.ts.map +0 -1
  133. package/dist/constants/index.js +0 -68
  134. package/dist/constants/index.js.map +0 -1
  135. package/dist/indexes/BPlusTree.d.ts +0 -181
  136. package/dist/indexes/BPlusTree.d.ts.map +0 -1
  137. package/dist/indexes/BPlusTree.js +0 -528
  138. package/dist/indexes/BPlusTree.js.map +0 -1
  139. package/dist/indexes/IndexManager.d.ts +0 -236
  140. package/dist/indexes/IndexManager.d.ts.map +0 -1
  141. package/dist/indexes/IndexManager.js +0 -502
  142. package/dist/indexes/IndexManager.js.map +0 -1
  143. package/dist/indexes/PrimaryIndex.d.ts +0 -240
  144. package/dist/indexes/PrimaryIndex.d.ts.map +0 -1
  145. package/dist/indexes/PrimaryIndex.js +0 -354
  146. package/dist/indexes/PrimaryIndex.js.map +0 -1
  147. package/dist/indexes/SecondaryIndex.d.ts +0 -204
  148. package/dist/indexes/SecondaryIndex.d.ts.map +0 -1
  149. package/dist/indexes/SecondaryIndex.js +0 -480
  150. package/dist/indexes/SecondaryIndex.js.map +0 -1
  151. package/dist/indexes/errors.d.ts +0 -66
  152. package/dist/indexes/errors.d.ts.map +0 -1
  153. package/dist/indexes/errors.js +0 -117
  154. package/dist/indexes/errors.js.map +0 -1
  155. package/dist/indexes/index.d.ts +0 -52
  156. package/dist/indexes/index.d.ts.map +0 -1
  157. package/dist/indexes/index.js +0 -131
  158. package/dist/indexes/index.js.map +0 -1
  159. package/dist/indexes/types.d.ts +0 -246
  160. package/dist/indexes/types.d.ts.map +0 -1
  161. package/dist/indexes/types.js +0 -30
  162. package/dist/indexes/types.js.map +0 -1
  163. package/dist/performance/BatchWALWriter.d.ts +0 -185
  164. package/dist/performance/BatchWALWriter.d.ts.map +0 -1
  165. package/dist/performance/BatchWALWriter.js +0 -490
  166. package/dist/performance/BatchWALWriter.js.map +0 -1
  167. package/dist/performance/ColumnarStorage.d.ts +0 -138
  168. package/dist/performance/ColumnarStorage.d.ts.map +0 -1
  169. package/dist/performance/ColumnarStorage.js +0 -875
  170. package/dist/performance/ColumnarStorage.js.map +0 -1
  171. package/dist/performance/LazyQuery.d.ts +0 -307
  172. package/dist/performance/LazyQuery.d.ts.map +0 -1
  173. package/dist/performance/LazyQuery.js +0 -588
  174. package/dist/performance/LazyQuery.js.map +0 -1
  175. package/dist/performance/OptimizedBuffer.d.ts +0 -375
  176. package/dist/performance/OptimizedBuffer.d.ts.map +0 -1
  177. package/dist/performance/OptimizedBuffer.js +0 -730
  178. package/dist/performance/OptimizedBuffer.js.map +0 -1
  179. package/dist/performance/RWLock.d.ts +0 -260
  180. package/dist/performance/RWLock.d.ts.map +0 -1
  181. package/dist/performance/RWLock.js +0 -570
  182. package/dist/performance/RWLock.js.map +0 -1
  183. package/dist/performance/index.d.ts +0 -41
  184. package/dist/performance/index.d.ts.map +0 -1
  185. package/dist/performance/index.js +0 -162
  186. package/dist/performance/index.js.map +0 -1
  187. package/dist/performance/types.d.ts +0 -247
  188. package/dist/performance/types.d.ts.map +0 -1
  189. package/dist/performance/types.js +0 -26
  190. package/dist/performance/types.js.map +0 -1
  191. package/dist/storage/Checkpoint.d.ts +0 -128
  192. package/dist/storage/Checkpoint.d.ts.map +0 -1
  193. package/dist/storage/Checkpoint.js +0 -251
  194. package/dist/storage/Checkpoint.js.map +0 -1
  195. package/dist/storage/LightFile.d.ts +0 -227
  196. package/dist/storage/LightFile.d.ts.map +0 -1
  197. package/dist/storage/LightFile.js +0 -526
  198. package/dist/storage/LightFile.js.map +0 -1
  199. package/dist/storage/Recovery.d.ts +0 -172
  200. package/dist/storage/Recovery.d.ts.map +0 -1
  201. package/dist/storage/Recovery.js +0 -399
  202. package/dist/storage/Recovery.js.map +0 -1
  203. package/dist/storage/SHMFile.d.ts +0 -243
  204. package/dist/storage/SHMFile.d.ts.map +0 -1
  205. package/dist/storage/SHMFile.js +0 -436
  206. package/dist/storage/SHMFile.js.map +0 -1
  207. package/dist/storage/StorageEngine.d.ts +0 -146
  208. package/dist/storage/StorageEngine.d.ts.map +0 -1
  209. package/dist/storage/StorageEngine.js +0 -353
  210. package/dist/storage/StorageEngine.js.map +0 -1
  211. package/dist/storage/WALFile.d.ts +0 -248
  212. package/dist/storage/WALFile.d.ts.map +0 -1
  213. package/dist/storage/WALFile.js +0 -597
  214. package/dist/storage/WALFile.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -220
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -7
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/utils/binary.d.ts +0 -271
  220. package/dist/utils/binary.d.ts.map +0 -1
  221. package/dist/utils/binary.js +0 -454
  222. package/dist/utils/binary.js.map +0 -1
  223. package/dist/utils/file.d.ts +0 -166
  224. package/dist/utils/file.d.ts.map +0 -1
  225. package/dist/utils/file.js +0 -346
  226. package/dist/utils/file.js.map +0 -1
  227. package/dist/utils/index.d.ts +0 -6
  228. package/dist/utils/index.d.ts.map +0 -1
  229. package/dist/utils/index.js +0 -39
  230. package/dist/utils/index.js.map +0 -1
@@ -1,240 +0,0 @@
1
- /**
2
- * LightDB 主键索引实现
3
- * 基于 B+ 树的主键索引,提供高效的键值存储和范围查询
4
- */
5
- import type { IndexKey, IndexStats, IndexIteratorOptions, Comparator } from "./types";
6
- import { IndexType } from "./types";
7
- /**
8
- * 主键索引配置
9
- */
10
- export interface PrimaryIndexConfig {
11
- /** 索引名称 */
12
- name: string;
13
- /** 字段名 */
14
- fieldName: string;
15
- /** B+ 树阶数 */
16
- order?: number;
17
- /** 自定义比较器 */
18
- comparator?: Comparator<IndexKey>;
19
- }
20
- /**
21
- * 主键索引
22
- * 使用 B+ 树实现,支持 O(log n) 的插入、查找、删除和范围查询
23
- */
24
- export declare class PrimaryIndex<T = unknown> {
25
- private readonly tree;
26
- private readonly config;
27
- /**
28
- * 创建主键索引实例
29
- * @param config 索引配置
30
- */
31
- constructor(config: PrimaryIndexConfig);
32
- /**
33
- * 获取索引名称
34
- */
35
- get Name(): string;
36
- /**
37
- * 获取字段名
38
- */
39
- get FieldName(): string;
40
- /**
41
- * 获取索引类型
42
- */
43
- get Type(): IndexType.Primary;
44
- /**
45
- * 获取索引中的记录数量
46
- */
47
- get Size(): number;
48
- /**
49
- * 检查索引是否为空
50
- */
51
- isEmpty(): boolean;
52
- /**
53
- * 插入键值对
54
- * @param key 主键
55
- * @param value 值
56
- * @param throwOnDuplicate 如果键已存在是否抛出异常
57
- * @returns 如果键已存在且不抛出异常,返回 false;否则返回 true
58
- */
59
- insert(key: IndexKey, value: T, throwOnDuplicate?: boolean): boolean;
60
- /**
61
- * 更新键对应的值
62
- * @param key 主键
63
- * @param value 新值
64
- * @param throwOnMissing 如果键不存在是否抛出异常
65
- * @returns 如果键不存在且不抛出异常,返回 false;否则返回 true
66
- */
67
- update(key: IndexKey, value: T, throwOnMissing?: boolean): boolean;
68
- /**
69
- * 插入或更新键值对
70
- * @param key 主键
71
- * @param value 值
72
- */
73
- upsert(key: IndexKey, value: T): void;
74
- /**
75
- * 查找键对应的值
76
- * @param key 主键
77
- * @returns 值,如果不存在返回 undefined
78
- */
79
- find(key: IndexKey): T | undefined;
80
- /**
81
- * 检查键是否存在
82
- * @param key 主键
83
- */
84
- has(key: IndexKey): boolean;
85
- /**
86
- * 删除键值对
87
- * @param key 主键
88
- * @param throwOnMissing 如果键不存在是否抛出异常
89
- * @returns 被删除的值,如果不存在返回 undefined
90
- */
91
- delete(key: IndexKey, throwOnMissing?: boolean): T | undefined;
92
- /**
93
- * 范围查询
94
- * @param start 起始键
95
- * @param end 结束键
96
- * @param options 迭代选项
97
- * @returns 键值对数组
98
- */
99
- range(
100
- start?: IndexKey,
101
- end?: IndexKey,
102
- options?: IndexIteratorOptions,
103
- ): Array<{
104
- key: IndexKey;
105
- value: T;
106
- }>;
107
- /**
108
- * 大于指定键的记录
109
- * @param key 键
110
- * @param include 是否包含该键
111
- */
112
- greaterThan(
113
- key: IndexKey,
114
- include?: boolean,
115
- ): Array<{
116
- key: IndexKey;
117
- value: T;
118
- }>;
119
- /**
120
- * 小于指定键的记录
121
- * @param key 键
122
- * @param include 是否包含该键
123
- */
124
- lessThan(
125
- key: IndexKey,
126
- include?: boolean,
127
- ): Array<{
128
- key: IndexKey;
129
- value: T;
130
- }>;
131
- /**
132
- * 获取所有键(有序)
133
- */
134
- keys(): IndexKey[];
135
- /**
136
- * 获取所有值(按键顺序)
137
- */
138
- values(): T[];
139
- /**
140
- * 获取所有键值对(有序)
141
- */
142
- entries(): Array<{
143
- key: IndexKey;
144
- value: T;
145
- }>;
146
- /**
147
- * 获取最小键
148
- */
149
- minKey(): IndexKey | undefined;
150
- /**
151
- * 获取最大键
152
- */
153
- maxKey(): IndexKey | undefined;
154
- /**
155
- * 获取第一个键值对
156
- */
157
- first():
158
- | {
159
- key: IndexKey;
160
- value: T;
161
- }
162
- | undefined;
163
- /**
164
- * 获取最后一个键值对
165
- */
166
- last():
167
- | {
168
- key: IndexKey;
169
- value: T;
170
- }
171
- | undefined;
172
- /**
173
- * 清空索引
174
- */
175
- clear(): void;
176
- /**
177
- * 遍历索引
178
- * @param callback 回调函数
179
- */
180
- forEach(callback: (key: IndexKey, value: T) => void): void;
181
- /**
182
- * 创建迭代器
183
- */
184
- [Symbol.iterator](): Generator<{
185
- key: IndexKey;
186
- value: T;
187
- }>;
188
- /**
189
- * 获取索引统计信息
190
- */
191
- getStats(): IndexStats;
192
- /**
193
- * 批量插入
194
- * @param entries 键值对数组
195
- * @param throwOnDuplicate 如果键已存在是否抛出异常
196
- */
197
- insertBatch(
198
- entries: Array<{
199
- key: IndexKey;
200
- value: T;
201
- }>,
202
- throwOnDuplicate?: boolean,
203
- ): {
204
- success: number;
205
- failed: number;
206
- errors: Array<{
207
- key: IndexKey;
208
- error: string;
209
- }>;
210
- };
211
- /**
212
- * 批量删除
213
- * @param keys 键数组
214
- * @param throwOnMissing 如果键不存在是否抛出异常
215
- */
216
- deleteBatch(
217
- keys: IndexKey[],
218
- throwOnMissing?: boolean,
219
- ): {
220
- success: number;
221
- failed: number;
222
- errors: Array<{
223
- key: IndexKey;
224
- error: string;
225
- }>;
226
- };
227
- /**
228
- * 估算内存使用
229
- */
230
- private estimateMemoryUsage;
231
- /**
232
- * 验证索引一致性
233
- * 用于调试和测试
234
- */
235
- validate(): {
236
- valid: boolean;
237
- errors: string[];
238
- };
239
- }
240
- //# sourceMappingURL=PrimaryIndex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PrimaryIndex.d.ts","sourceRoot":"","sources":["../../src/indexes/PrimaryIndex.ts"],"names":[],"mappings":"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"}
@@ -1,354 +0,0 @@
1
- "use strict";
2
- /**
3
- * LightDB 主键索引实现
4
- * 基于 B+ 树的主键索引,提供高效的键值存储和范围查询
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.PrimaryIndex = void 0;
8
- const BPlusTree_1 = require("./BPlusTree");
9
- const types_1 = require("./types");
10
- const errors_1 = require("./errors");
11
- /**
12
- * 主键索引
13
- * 使用 B+ 树实现,支持 O(log n) 的插入、查找、删除和范围查询
14
- */
15
- class PrimaryIndex {
16
- /**
17
- * 创建主键索引实例
18
- * @param config 索引配置
19
- */
20
- constructor(config) {
21
- this.config = {
22
- name: config.name,
23
- fieldName: config.fieldName,
24
- order: config.order ?? 64,
25
- comparator: config.comparator,
26
- };
27
- this.tree = new BPlusTree_1.BPlusTree(this.config.order, this.config.comparator);
28
- }
29
- /**
30
- * 获取索引名称
31
- */
32
- get Name() {
33
- return this.config.name;
34
- }
35
- /**
36
- * 获取字段名
37
- */
38
- get FieldName() {
39
- return this.config.fieldName;
40
- }
41
- /**
42
- * 获取索引类型
43
- */
44
- get Type() {
45
- return types_1.IndexType.Primary;
46
- }
47
- /**
48
- * 获取索引中的记录数量
49
- */
50
- get Size() {
51
- return this.tree.Size;
52
- }
53
- /**
54
- * 检查索引是否为空
55
- */
56
- isEmpty() {
57
- return this.tree.isEmpty();
58
- }
59
- /**
60
- * 插入键值对
61
- * @param key 主键
62
- * @param value 值
63
- * @param throwOnDuplicate 如果键已存在是否抛出异常
64
- * @returns 如果键已存在且不抛出异常,返回 false;否则返回 true
65
- */
66
- insert(key, value, throwOnDuplicate = false) {
67
- const existing = this.tree.find(key);
68
- if (existing !== undefined) {
69
- if (throwOnDuplicate) {
70
- throw new errors_1.DuplicateKeyError(this.config.name, key);
71
- }
72
- return false;
73
- }
74
- this.tree.insert(key, value);
75
- return true;
76
- }
77
- /**
78
- * 更新键对应的值
79
- * @param key 主键
80
- * @param value 新值
81
- * @param throwOnMissing 如果键不存在是否抛出异常
82
- * @returns 如果键不存在且不抛出异常,返回 false;否则返回 true
83
- */
84
- update(key, value, throwOnMissing = false) {
85
- if (!this.tree.has(key)) {
86
- if (throwOnMissing) {
87
- throw new errors_1.KeyNotFoundError(this.config.name, key);
88
- }
89
- return false;
90
- }
91
- return this.tree.update(key, value);
92
- }
93
- /**
94
- * 插入或更新键值对
95
- * @param key 主键
96
- * @param value 值
97
- */
98
- upsert(key, value) {
99
- if (this.tree.has(key)) {
100
- this.tree.update(key, value);
101
- } else {
102
- this.tree.insert(key, value);
103
- }
104
- }
105
- /**
106
- * 查找键对应的值
107
- * @param key 主键
108
- * @returns 值,如果不存在返回 undefined
109
- */
110
- find(key) {
111
- return this.tree.find(key);
112
- }
113
- /**
114
- * 检查键是否存在
115
- * @param key 主键
116
- */
117
- has(key) {
118
- return this.tree.has(key);
119
- }
120
- /**
121
- * 删除键值对
122
- * @param key 主键
123
- * @param throwOnMissing 如果键不存在是否抛出异常
124
- * @returns 被删除的值,如果不存在返回 undefined
125
- */
126
- delete(key, throwOnMissing = false) {
127
- const value = this.tree.delete(key);
128
- if (value === undefined && throwOnMissing) {
129
- throw new errors_1.KeyNotFoundError(this.config.name, key);
130
- }
131
- return value;
132
- }
133
- /**
134
- * 范围查询
135
- * @param start 起始键
136
- * @param end 结束键
137
- * @param options 迭代选项
138
- * @returns 键值对数组
139
- */
140
- range(start, end, options) {
141
- const includeStart = options?.includeStart ?? true;
142
- const includeEnd = options?.includeEnd ?? true;
143
- let result = this.tree.range(start, end, includeStart, includeEnd);
144
- if (options?.reverse) {
145
- result = result.reverse();
146
- }
147
- return result;
148
- }
149
- /**
150
- * 大于指定键的记录
151
- * @param key 键
152
- * @param include 是否包含该键
153
- */
154
- greaterThan(key, include = false) {
155
- return this.tree.range(key, undefined, include, true);
156
- }
157
- /**
158
- * 小于指定键的记录
159
- * @param key 键
160
- * @param include 是否包含该键
161
- */
162
- lessThan(key, include = false) {
163
- const result = this.tree.range(undefined, key, true, include);
164
- return result;
165
- }
166
- /**
167
- * 获取所有键(有序)
168
- */
169
- keys() {
170
- return this.tree.keys();
171
- }
172
- /**
173
- * 获取所有值(按键顺序)
174
- */
175
- values() {
176
- return this.tree.values();
177
- }
178
- /**
179
- * 获取所有键值对(有序)
180
- */
181
- entries() {
182
- return this.tree.entries();
183
- }
184
- /**
185
- * 获取最小键
186
- */
187
- minKey() {
188
- return this.tree.minKey();
189
- }
190
- /**
191
- * 获取最大键
192
- */
193
- maxKey() {
194
- return this.tree.maxKey();
195
- }
196
- /**
197
- * 获取第一个键值对
198
- */
199
- first() {
200
- return this.tree.first();
201
- }
202
- /**
203
- * 获取最后一个键值对
204
- */
205
- last() {
206
- return this.tree.last();
207
- }
208
- /**
209
- * 清空索引
210
- */
211
- clear() {
212
- this.tree.clear();
213
- }
214
- /**
215
- * 遍历索引
216
- * @param callback 回调函数
217
- */
218
- forEach(callback) {
219
- this.tree.forEach(callback);
220
- }
221
- /**
222
- * 创建迭代器
223
- */
224
- *[Symbol.iterator]() {
225
- yield* this.tree;
226
- }
227
- /**
228
- * 获取索引统计信息
229
- */
230
- getStats() {
231
- const keyCount = this.tree.Size;
232
- const memoryUsage = this.estimateMemoryUsage();
233
- return {
234
- name: this.config.name,
235
- type: types_1.IndexType.Primary,
236
- fieldName: this.config.fieldName,
237
- keyCount,
238
- entryCount: keyCount,
239
- unique: true,
240
- memoryUsage,
241
- };
242
- }
243
- /**
244
- * 批量插入
245
- * @param entries 键值对数组
246
- * @param throwOnDuplicate 如果键已存在是否抛出异常
247
- */
248
- insertBatch(entries, throwOnDuplicate = false) {
249
- let success = 0;
250
- let failed = 0;
251
- const errors = [];
252
- for (const { key, value } of entries) {
253
- try {
254
- if (this.insert(key, value, throwOnDuplicate)) {
255
- success++;
256
- } else {
257
- failed++;
258
- errors.push({ key, error: "Duplicate key" });
259
- }
260
- } catch (error) {
261
- failed++;
262
- errors.push({
263
- key,
264
- error: error instanceof Error ? error.message : "Unknown error",
265
- });
266
- }
267
- }
268
- return { success, failed, errors };
269
- }
270
- /**
271
- * 批量删除
272
- * @param keys 键数组
273
- * @param throwOnMissing 如果键不存在是否抛出异常
274
- */
275
- deleteBatch(keys, throwOnMissing = false) {
276
- let success = 0;
277
- let failed = 0;
278
- const errors = [];
279
- for (const key of keys) {
280
- try {
281
- if (this.delete(key, throwOnMissing) !== undefined) {
282
- success++;
283
- } else {
284
- failed++;
285
- errors.push({ key, error: "Key not found" });
286
- }
287
- } catch (error) {
288
- failed++;
289
- errors.push({
290
- key,
291
- error: error instanceof Error ? error.message : "Unknown error",
292
- });
293
- }
294
- }
295
- return { success, failed, errors };
296
- }
297
- /**
298
- * 估算内存使用
299
- */
300
- estimateMemoryUsage() {
301
- const keyCount = this.tree.Size;
302
- const avgKeySize = 16;
303
- const avgValueSize = 64;
304
- const nodeOverhead = 128;
305
- const estimatedNodes = Math.ceil(keyCount / (this.config.order * 0.7));
306
- return keyCount * (avgKeySize + avgValueSize) + estimatedNodes * nodeOverhead;
307
- }
308
- /**
309
- * 验证索引一致性
310
- * 用于调试和测试
311
- */
312
- validate() {
313
- const errors = [];
314
- const seenKeys = new Set();
315
- let prevKey;
316
- let current = this.tree.first();
317
- while (current !== undefined) {
318
- if (seenKeys.has(current.key)) {
319
- errors.push(`Duplicate key found: ${current.key}`);
320
- }
321
- seenKeys.add(current.key);
322
- if (prevKey !== undefined) {
323
- const cmp = this.config.comparator ? this.config.comparator(prevKey, current.key) : defaultCompare(prevKey, current.key);
324
- if (cmp >= 0) {
325
- errors.push(`Keys not in order: ${prevKey} >= ${current.key}`);
326
- }
327
- }
328
- prevKey = current.key;
329
- current = this.tree.entries().find((e) => e.key > current.key);
330
- }
331
- if (seenKeys.size !== this.tree.Size) {
332
- errors.push(`Key count mismatch: expected ${this.tree.Size}, found ${seenKeys.size}`);
333
- }
334
- return {
335
- valid: errors.length === 0,
336
- errors,
337
- };
338
- }
339
- }
340
- exports.PrimaryIndex = PrimaryIndex;
341
- /**
342
- * 默认比较函数
343
- */
344
- function defaultCompare(a, b) {
345
- if (typeof a === "number" && typeof b === "number") {
346
- return a - b;
347
- }
348
- const strA = String(a);
349
- const strB = String(b);
350
- if (strA < strB) return -1;
351
- if (strA > strB) return 1;
352
- return 0;
353
- }
354
- //# sourceMappingURL=PrimaryIndex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PrimaryIndex.js","sourceRoot":"","sources":["../../src/indexes/PrimaryIndex.ts"],"names":[],"mappings":"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"}