xitdb 0.1.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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +28 -0
  3. data/LICENSE +21 -0
  4. data/README.md +131 -0
  5. data/docs/benchmarks.md +135 -0
  6. data/docs/core.md +123 -0
  7. data/docs/portable.md +99 -0
  8. data/docs/releasing.md +37 -0
  9. data/docs/ruby-profile-v1.md +226 -0
  10. data/docs/ruby.md +61 -0
  11. data/examples/indexed_users.rb +23 -0
  12. data/examples/portable.rb +62 -0
  13. data/examples/ruby.rb +56 -0
  14. data/lib/xitdb/context.rb +360 -0
  15. data/lib/xitdb/conversion.rb +222 -0
  16. data/lib/xitdb/core/array_list.rb +282 -0
  17. data/lib/xitdb/core/b_tree.rb +546 -0
  18. data/lib/xitdb/core/bytes.rb +181 -0
  19. data/lib/xitdb/core/compaction.rb +172 -0
  20. data/lib/xitdb/core/crc64.rb +22 -0
  21. data/lib/xitdb/core/cursor.rb +201 -0
  22. data/lib/xitdb/core/database.rb +359 -0
  23. data/lib/xitdb/core/file_store.rb +194 -0
  24. data/lib/xitdb/core/format.rb +148 -0
  25. data/lib/xitdb/core/hash_map.rb +371 -0
  26. data/lib/xitdb/core/hasher.rb +49 -0
  27. data/lib/xitdb/core/linked_array_list.rb +85 -0
  28. data/lib/xitdb/core/memory_store.rb +277 -0
  29. data/lib/xitdb/core/offset_map.rb +85 -0
  30. data/lib/xitdb/core/replication.rb +242 -0
  31. data/lib/xitdb/core/sorted_map.rb +361 -0
  32. data/lib/xitdb/core/transaction.rb +159 -0
  33. data/lib/xitdb/core.rb +17 -0
  34. data/lib/xitdb/database.rb +332 -0
  35. data/lib/xitdb/declarations.rb +73 -0
  36. data/lib/xitdb/errors.rb +84 -0
  37. data/lib/xitdb/history.rb +58 -0
  38. data/lib/xitdb/input_guard.rb +39 -0
  39. data/lib/xitdb/profiles/portable.rb +407 -0
  40. data/lib/xitdb/profiles/ruby.rb +173 -0
  41. data/lib/xitdb/revision.rb +42 -0
  42. data/lib/xitdb/ruby/codec.rb +123 -0
  43. data/lib/xitdb/ruby/containers.rb +495 -0
  44. data/lib/xitdb/ruby/key_encoding.rb +60 -0
  45. data/lib/xitdb/ruby/ordered_keys.rb +87 -0
  46. data/lib/xitdb/ruby/scalars.rb +296 -0
  47. data/lib/xitdb/ruby/wire.rb +146 -0
  48. data/lib/xitdb/ruby.rb +46 -0
  49. data/lib/xitdb/snapshot.rb +13 -0
  50. data/lib/xitdb/streams.rb +148 -0
  51. data/lib/xitdb/value_walker.rb +192 -0
  52. data/lib/xitdb/version.rb +5 -0
  53. data/lib/xitdb/views/array.rb +303 -0
  54. data/lib/xitdb/views/base.rb +271 -0
  55. data/lib/xitdb/views/linked_array.rb +18 -0
  56. data/lib/xitdb/views/map.rb +162 -0
  57. data/lib/xitdb/views/set.rb +41 -0
  58. data/lib/xitdb/views/sorted.rb +77 -0
  59. data/lib/xitdb.rb +20 -0
  60. data/sig/base.rbs +76 -0
  61. data/sig/core.rbs +697 -0
  62. data/sig/manifest.yaml +10 -0
  63. data/sig/native.rbs +118 -0
  64. data/sig/public.rbs +427 -0
  65. data/sig/ruby.rbs +337 -0
  66. metadata +137 -0
data/sig/core.rbs ADDED
@@ -0,0 +1,697 @@
1
+ class Array[unchecked out E]
2
+ def []=: (Integer, Integer, Array[E]) -> Array[E]
3
+ | ...
4
+ end
5
+
6
+ module XitDB
7
+ module Core
8
+ type tag = Symbol | Integer
9
+
10
+ type store = MemoryStore | FileStore
11
+
12
+ type selector = Integer | String
13
+
14
+ type identity = Object | Array[Integer]
15
+
16
+ type cursor_state = [ Slot, bool ]
17
+
18
+ interface _Reader
19
+ def read: (Integer) -> String?
20
+ end
21
+
22
+ interface _Writer
23
+ def write: (String) -> Integer
24
+ end
25
+
26
+ module Format
27
+ UINT64_MAX: Integer
28
+
29
+ def self.integer: (Object, Range[Integer]) -> Integer
30
+
31
+ def self.width: (Object, Integer) -> void
32
+
33
+ def self.slice: (String, Integer | Range[Integer?], ?Integer?) -> String
34
+
35
+ def self.unsigned: (String) -> Integer
36
+
37
+ def self.integers: (String, String) -> Array[Integer]
38
+
39
+ def self.pair: (String, String) -> [ Integer, Integer ]
40
+ end
41
+
42
+ class Header
43
+ SIZE: Integer
44
+ VERSION: Integer
45
+ @padding: Integer
46
+ attr_reader file_id: Integer
47
+ attr_reader hash_id: String
48
+ attr_reader hash_size: Integer
49
+ def initialize: (file_id: Integer, hash_id: String, hash_size: Integer, ?padding: Integer) -> void
50
+ def self.parse: (String) -> Header
51
+ def to_bytes: () -> String
52
+ end
53
+
54
+ class Slot
55
+ SIZE: Integer
56
+ TAGS: Array[Symbol]
57
+ attr_reader tag: tag
58
+ attr_reader value: Integer
59
+ attr_reader full: bool
60
+ def initialize: (?tag: tag, ?value: Integer, ?full: bool) -> void
61
+ def self.parse: (String) -> Slot
62
+ def self.int: (Integer) -> Slot
63
+ def self.uint: (Integer) -> Slot
64
+ def self.float: (Object) -> Slot
65
+ def self.null: () -> Slot
66
+ def empty?: () -> bool
67
+ def ==: (Object?) -> bool
68
+ def to_bytes: () -> String
69
+ end
70
+
71
+ class Hasher
72
+ @digest: ^(String) -> String
73
+ attr_reader id: String
74
+ attr_reader size: Integer
75
+ def initialize: (id: String, size: Integer) { (String) -> String } -> void
76
+ def digest: (String) -> String
77
+ def self.sha1: () -> Hasher
78
+ def self.sha256: () -> Hasher
79
+ def self.sha384: () -> Hasher
80
+ def self.sha512: () -> Hasher
81
+ end
82
+
83
+ module CRC64
84
+ MASK: Integer
85
+
86
+ POLYNOMIAL: Integer
87
+
88
+ def self.call: (Object) -> Integer
89
+ end
90
+
91
+ module Store
92
+ @state: Monitor
93
+
94
+ @idle: MonitorMixin::ConditionVariable
95
+
96
+ @writer_mutex: Mutex
97
+
98
+ @lock_users: Integer
99
+
100
+ @operation_users: Hash[Thread, Integer]
101
+
102
+ @lock_owner: Thread?
103
+
104
+ @closed: bool
105
+
106
+ @closing: bool
107
+
108
+ @release_failed: bool
109
+
110
+ def close_unreturned: () -> void
111
+
112
+ def read_at: (Integer, Integer) -> String
113
+
114
+ def write_at: (Integer, String) -> Integer
115
+
116
+ def append: (String) -> Integer
117
+
118
+ def length: () -> Integer
119
+
120
+ def empty?: () -> bool
121
+
122
+ def truncate: (Integer) -> nil
123
+
124
+ def flush: () -> void
125
+
126
+ def sync: () -> void
127
+
128
+ def with_operation: [A] () { () -> A } -> A
129
+
130
+ def with_exclusive_lock: [A] (?timeout: Numeric, ?on_release_error: (^(Exception) -> void)?) { () -> A } -> A
131
+
132
+ def release_writer: (bool, bool, (^(Exception) -> void)?) -> void
133
+
134
+ def close: (?discard: bool) -> void
135
+
136
+ def closed?: () -> bool
137
+
138
+ def initialize_state: (?Mutex) -> void
139
+
140
+ def synchronize: [A] () { () -> A } -> A
141
+
142
+ def writable!: () -> void
143
+
144
+ def position: (Integer) -> void
145
+
146
+ def string: (String) -> void
147
+
148
+ def monotonic_time: () -> Float
149
+
150
+ def wait_for_writer: (Float) -> void
151
+
152
+ def lock_writer: (Float) -> void
153
+
154
+ def unlock_writer: () -> void
155
+
156
+ def readonly?: () -> bool
157
+
158
+ def store_length: () -> Integer
159
+
160
+ def read_bytes: (Integer, Integer) -> String
161
+
162
+ def write_bytes: (Integer, String) -> void
163
+
164
+ def truncate_bytes: (Integer) -> void
165
+
166
+ def flush_bytes: () -> void
167
+
168
+ def sync_bytes: () -> void
169
+
170
+ def close_bytes: () -> void
171
+ end
172
+
173
+ class MemoryStore
174
+ include Store
175
+ @bytes: String
176
+ attr_reader storage_identity: Object
177
+ def initialize: (?String) -> void
178
+ def readonly?: () -> false
179
+ def store_length: () -> Integer
180
+ def read_bytes: (Integer, Integer) -> String
181
+ def write_bytes: (Integer, String) -> void
182
+ def truncate_bytes: (Integer) -> void
183
+ def flush_bytes: () -> nil
184
+ def sync_bytes: () -> nil
185
+ def close_bytes: () -> String
186
+ end
187
+
188
+ class FileStore
189
+ include Store
190
+ WRITERS: Hash[Array[Integer], [ Mutex, Integer ]]
191
+ WRITERS_MUTEX: Mutex
192
+ @file: File
193
+ @sync_directory: String?
194
+ @readonly: bool
195
+ @buffer_limit: Integer
196
+ @pending: String
197
+ @pending_offset: Integer
198
+ @identity: Array[Integer]
199
+ attr_reader storage_identity: Array[Integer]
200
+ def self.open: (String, ?readonly: bool, ?buffer_limit: Integer, ?create: bool, ?exclusive: bool) -> FileStore
201
+ def self.open_file: (String, bool, bool, bool) -> File
202
+ def initialize: (File, bool, Integer, ?sync_directory: String?) -> void
203
+ def readonly?: () -> bool
204
+ def store_length: () -> Integer
205
+ def read_bytes: (Integer, Integer) -> String
206
+ def read_file: (Integer, Integer) -> String
207
+ def write_bytes: (Integer, String) -> void
208
+ def write_file: (Integer, String) -> void
209
+ def truncate_bytes: (Integer) -> void
210
+ def flush_bytes: () -> nil
211
+ def sync_bytes: () -> nil
212
+ def close_bytes: () -> void
213
+ def lock_writer: (Float) -> void
214
+ def unlock_writer: () -> void
215
+ def retry_interrupted: [A] () { () -> A } -> A
216
+ end
217
+
218
+ class ByteValue
219
+ attr_reader bytes: String
220
+ attr_reader format_tag: String?
221
+ def initialize: (String, ?format_tag: String?) -> void
222
+ end
223
+
224
+ module Bytes
225
+ CHUNK_SIZE: Integer
226
+
227
+ class Source
228
+ @database: Database
229
+ @location: String | Integer
230
+ @bound: Integer
231
+ attr_reader size: Integer
232
+ attr_reader format_tag: String?
233
+ def initialize: (Database, String | Integer, Integer, String?, Integer) -> void
234
+ def read: (Integer, Integer) -> String
235
+ end
236
+
237
+ def self.open: (Database, Slot, bound: Integer) -> Source
238
+
239
+ def self.append: (Transaction, size: Integer, ?format_tag: String?, ?prefix: String, ?representation: Symbol) ?{ (Integer, Integer) -> String? } -> Slot
240
+
241
+ def self.read_chunk: (Integer, Integer) ?{ (Integer, Integer) -> String? } -> String
242
+
243
+ def self.validate_source: (Integer, String, Symbol, String?) -> void
244
+
245
+ def self.capture_inline: (Integer, String, Symbol, Integer) ?{ (Integer, Integer) -> String? } -> String?
246
+
247
+ def self.append_source: (Transaction, String, Integer) ?{ (Integer, Integer) -> String? } -> void
248
+
249
+ def self.parse: (Database, Slot, Integer) -> [ String | Integer, Integer, String? ]
250
+
251
+ def self.locate: (Database, Slot, bound: Integer) -> [ String | Integer, Integer ]
252
+
253
+ def self.copy: (_Reader, size: Integer, database: Database, transaction: Transaction) -> Slot
254
+ end
255
+
256
+ class Database
257
+ include Replication
258
+ ROOT_OFFSET: Integer
259
+ DATA_OFFSET: Integer
260
+ TRAILER_SIZE: Integer
261
+ MINIMUM_SIZE: Integer
262
+ @store: store
263
+ @lock_timeout: Float
264
+ @needs_reopen: bool
265
+ @transaction: Transaction?
266
+ attr_reader header: Header
267
+ def self.open: (String, ?readonly: bool, ?hash_size: Integer?, ?hash_id: String?, ?file_id: Integer?, ?lock_timeout: Float, ?initialize_empty: bool, ?require_empty: bool) -> Database
268
+ | [A] (String, ?readonly: bool, ?hash_size: Integer?, ?hash_id: String?, ?file_id: Integer?, ?lock_timeout: Float, ?initialize_empty: bool, ?require_empty: bool) { (Database) -> A } -> A
269
+ def self.memory: (?hash_size: Integer, ?hash_id: String, ?file_id: Integer?) -> Database
270
+ def self.copy_replica: (to: String, source_io: _Reader, length: Integer) -> Database
271
+ def initialize: (store: store, ?hash_size: Integer?, ?hash_id: String?, ?file_id: Integer?, ?lock_timeout: Float, ?initialize_empty: bool, ?require_empty: bool) -> void
272
+ def close: () -> void
273
+ def closed?: () -> bool
274
+ def with_operation: [A] () { () -> A } -> A
275
+ def storage_identity: () -> identity
276
+ def needs_reopen?: () -> bool
277
+ def check_open!: () -> void
278
+ def committed_size: () -> Integer
279
+ def compact: (to: String) -> Database
280
+ def copy_compacted_root: (Database, FileStore, Integer, Cursor, Slot, bool, OffsetMap) -> void
281
+ def cleanup_compaction: (FileStore, Database?, OffsetMap?, bool?) -> void
282
+ def root_cursor: () -> Cursor
283
+ def transaction: () { (Cursor) -> top } -> Cursor
284
+ def handle_transaction_error: (Exception, Exception?, bool?, :not_committed | :committed | :unknown) -> bot
285
+ def finish_transaction: (Transaction, Integer, :not_committed | :committed | :unknown, bool, Exception?) -> void
286
+ def bytes: (String, ?format_tag: String?) -> Slot
287
+ def read_bytes: (Slot, ?bound: Integer?) -> ByteValue
288
+ def read_at: (Integer, Integer, bound: Integer) -> String
289
+ def close_unreturned: () -> void
290
+ def restore_empty_target: () -> void
291
+ def active_transaction: () -> Transaction
292
+ def prepare_file: (Integer?, String?, Integer?, bool, bool) -> void
293
+ def initialize_empty_file: (Integer?, String?, Integer?, bool) -> void
294
+ def reset_failed_initialization: (bool) -> void
295
+ def check_header: (Symbol, Integer | String | nil, Integer | String) -> void
296
+ def check_range!: (Integer, Integer, Integer) -> void
297
+ def committed_state: () -> [ Integer, Slot ]
298
+ def publish: (Slot, Integer) -> void
299
+ def random_id: () -> Integer
300
+ end
301
+
302
+ class Cursor
303
+ @slot: Slot
304
+ @bound: Integer
305
+ @valid: bool
306
+ @parent: Cursor?
307
+ @selector: selector
308
+ @children: ObjectSpace::WeakMap[Cursor, selector]
309
+ attr_reader database: Database
310
+ attr_reader transaction: Transaction?
311
+ attr_reader parent: Cursor?
312
+ attr_reader selector: selector
313
+ attr_reader valid: bool
314
+ def initialize: (database: Database, slot: Slot, bound: Integer, ?transaction: Transaction?) -> void
315
+ def slot: () -> Slot
316
+ def bound: () -> Integer
317
+ def replace: (Slot) -> Cursor
318
+ def child: (kind: Symbol, selector: selector) -> Cursor?
319
+ def update_collection: (Slot, ?propagate: bool) -> Cursor
320
+ def array_child: (Integer, Slot) -> Cursor
321
+ def hash_child: (String, Slot) -> Cursor
322
+ def cached_child: (selector, Slot) -> Cursor
323
+ def invalidate_children: (?index: selector?, ?from: Integer?, ?except: Cursor?) -> void
324
+ def checkpoint_state: () -> cursor_state
325
+ def restore_checkpoint_state: (cursor_state) -> void
326
+ def read_bytes: () -> ByteValue
327
+ def collection: () -> (ArrayList | LinkedArrayList | SortedMap | HashMap)
328
+ def collection_get: (selector) -> Slot?
329
+ def integer_selector: (selector) -> Integer
330
+ def string_selector: (selector) -> String
331
+ def collection_replace: (selector, Slot, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> top
332
+ def local_slot: () -> Slot
333
+ end
334
+
335
+ class Transaction
336
+ class Checkpoint < Struct[Transaction | Hash[Cursor, cursor_state] | Integer | bool]
337
+ attr_accessor owner: Transaction
338
+ attr_accessor slots: Hash[Cursor, cursor_state]
339
+ attr_accessor length: Integer
340
+ attr_accessor cancelled: bool
341
+ def self.new: (owner: Transaction, slots: Hash[Cursor, cursor_state], length: Integer, cancelled: bool) -> Checkpoint
342
+ end
343
+ @database: Database
344
+ @store: store
345
+ @owner: Thread
346
+ @active: bool
347
+ @cancelled: bool
348
+ @logical_mutation: bool?
349
+ @cursors: ObjectSpace::WeakMap[Cursor, bool]
350
+ @checkpoints: Array[Checkpoint]
351
+ attr_reader root: Cursor
352
+ attr_reader mutable_start: Integer
353
+ def initialize: (Database, store, Slot) -> void
354
+ def check_active!: () -> void
355
+ def check_logical_mutation!: () -> void
356
+ def with_logical_mutation: [A] () { () -> A } -> A
357
+ def cursor: (slot: Slot) -> Cursor
358
+ def check_cursor!: (Cursor) -> void
359
+ def check_replacement!: (Cursor, Slot) -> void
360
+ def length: () -> Integer
361
+ def append: (String) -> Integer
362
+ def read_at: (Integer, Integer) -> String
363
+ def write_at: (Integer, String) -> Integer
364
+ def freeze: () -> Integer
365
+ def checkpoint: () -> Checkpoint
366
+ def restore: (Checkpoint) -> nil
367
+ def release_checkpoint: (Checkpoint) -> nil
368
+ def cancel_publication: () -> bool
369
+ def cancelled?: () -> bool
370
+ def expire!: () -> void
371
+ def validate_slot: (Slot) -> void
372
+ end
373
+
374
+ class OffsetMap
375
+ CACHE_LIMIT: Integer
376
+ @cache: Hash[Integer, Integer]
377
+ @map: HashMap?
378
+ @closed: bool?
379
+ @cleanup_complete: bool?
380
+ @transaction: Transaction?
381
+ @store: FileStore?
382
+ @database: Database
383
+ @temporary: Tempfile?
384
+ attr_reader peak_cache_size: Integer
385
+ def initialize: () -> void
386
+ def fetch: (Integer) -> Integer?
387
+ def store: (Integer, Integer) -> Integer
388
+ def close: () -> nil
389
+ def key: (Integer) -> String
390
+ def spill: () -> void
391
+ end
392
+
393
+ class ArrayList
394
+ include Enumerable[Slot]
395
+ HEADER_SIZE: Integer
396
+ BLOCK_SIZE: Integer
397
+ EMPTY_BLOCK: String
398
+ attr_reader cursor: Cursor
399
+ def initialize: (Cursor) -> void
400
+ def size: () -> Integer
401
+ def get: (Integer) -> Slot?
402
+ def cursor_at: (Integer, ?create: bool) -> Cursor?
403
+ def append: (Slot) -> self
404
+ def put: (Integer, Slot) -> self
405
+ def replace_child: (Integer, Slot, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> self
406
+ def truncate: (Integer) -> self
407
+ def each: () -> Enumerator[Slot, self]
408
+ | () { (Slot) -> top } -> self
409
+ def header: () -> [ Integer, Integer? ]
410
+ def branches: (String, Integer, Integer, Integer) -> Array[[ Integer?, Integer, Integer ]]
411
+ def depth: (Integer) -> Integer
412
+ def resolve_index: (Integer, Integer) -> Integer?
413
+ def read: (Integer, Integer) -> String
414
+ def parse_slot: (String) -> Slot
415
+ def read_slot: (Integer) -> Slot
416
+ def read_element: (Integer, Integer, Integer) -> Slot
417
+ def validate_slot: (Slot) -> void
418
+ def mutate: () { (Transaction) -> top } -> void
419
+ def writable_header: (Transaction) -> [ Integer, Integer, Integer ]
420
+ def copy_block: (Transaction, Integer) -> Integer
421
+ def writable_element: (Transaction, Integer, Integer, Integer) -> Integer
422
+ end
423
+
424
+ class LinkedArrayList
425
+ include Enumerable[Slot]
426
+ @tree: BTree
427
+ attr_reader cursor: Cursor
428
+ def initialize: (Cursor) -> void
429
+ def size: () -> Integer
430
+ def get: (Integer) -> Slot?
431
+ def append: (Slot) -> self
432
+ def put: (Integer, Slot) -> self
433
+ def delete_at: (Integer) -> Slot?
434
+ def slice: (Integer, Integer) -> LinkedArrayList
435
+ def split: (Integer) -> Array[LinkedArrayList]
436
+ def concat: (LinkedArrayList) -> LinkedArrayList
437
+ def replace_child: (Integer, Slot, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> self
438
+ def cursor_at: (Integer, ?create: bool) -> Cursor?
439
+ def each: () -> Enumerator[Slot, self]
440
+ | () { (Slot) -> top } -> self
441
+ def each_from_index: (Integer) -> Enumerator[Slot, self]
442
+ | (Integer) { (Slot) -> top } -> self
443
+ end
444
+
445
+ class HashMap
446
+ BLOCK_SIZE: Integer
447
+ EMPTY_BLOCK: String
448
+ TAGS: Array[Symbol]
449
+ @tag: tag
450
+ attr_reader cursor: Cursor
451
+ def initialize: (Cursor, ?counted: bool, ?set: bool) -> void
452
+ def self.from_cursor: (Cursor) -> HashMap
453
+ def get: (String) -> Slot?
454
+ def key: (String) -> Slot?
455
+ def include?: (String) -> bool
456
+ def size: () -> Integer
457
+ def put: (String, key: Slot, value: Slot) -> self
458
+ def add: (String, key: Slot) -> self
459
+ def cursor_at: (String, ?create: bool) -> Cursor?
460
+ def replace_child: (String, Slot, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> self
461
+ def remove: (String) -> bool
462
+ def each_entry: () -> Enumerator[[ String, Slot, Slot ], self]
463
+ | () { (String, Slot, Slot) -> top } -> self
464
+ def counted_tag?: (tag) -> bool
465
+ def counted?: () -> bool
466
+ def count_bytes: () -> Integer
467
+ def hash_size: () -> Integer
468
+ def validate_hash: (String) -> String
469
+ def validate_slot: (Slot) -> void
470
+ def nibble: (String, Integer) -> Integer
471
+ def root_pointer: () -> Integer?
472
+ def read: (Integer, Integer) -> String
473
+ def parse_slot: (String) -> Slot
474
+ def read_record: (Slot) -> [ String, Slot, Slot ]
475
+ def entry: (String) -> [ Slot, Slot ]?
476
+ def writable!: () -> void
477
+ def mutate: () { (Transaction) -> top } -> void
478
+ def writable_root: (Transaction) -> Integer
479
+ def publish: (Integer, ?propagate: bool) -> Cursor
480
+ def adjust_count: (Transaction, Integer, Integer) -> void
481
+ def write_entry: (String, key: Slot?, value: Slot?, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> void
482
+ def collapse_path: (Transaction, Integer, Array[[ Integer, String, Integer ]]) -> void
483
+ def collection_tag: (bool, bool) -> Symbol
484
+ def collapsible?: (Integer, Integer, Array[Slot]) -> bool
485
+ def write_leaf: (Transaction, Integer, Slot, String, Integer, Integer, Slot?, Slot?) -> Integer?
486
+ end
487
+
488
+ class HashSet < HashMap
489
+ def initialize: (Cursor, ?counted: bool) -> void
490
+ end
491
+
492
+ class CountedHashMap < HashMap
493
+ def initialize: (Cursor) -> void
494
+ end
495
+
496
+ class CountedHashSet < HashSet
497
+ def initialize: (Cursor) -> void
498
+ end
499
+
500
+ class BTree
501
+ HEADER_SIZE: Integer
502
+ CAPACITY: Integer
503
+ SPLIT_COUNT: Integer
504
+ LEAF_SIZE: Integer
505
+ BRANCH_SIZE: Integer
506
+ type node = Node | SortedMap::Tree::Node
507
+ type path = Array[[ Integer, node, Integer ]]
508
+ type ref = [ Integer?, Integer, Integer? ]
509
+ class Node
510
+ attr_accessor kind: Integer
511
+ attr_accessor slots: Array[Slot]
512
+ attr_accessor counts: Array[Integer]
513
+ def self.new: (Integer, Array[Slot], Array[Integer]) -> Node
514
+ def initialize: (Integer, Array[Slot], Array[Integer]) -> void
515
+ def size: () -> Integer
516
+ end
517
+ @tag: tag
518
+ attr_reader cursor: Cursor
519
+ def initialize: (Cursor, ?tag: tag) -> void
520
+ def size: () -> Integer
521
+ def at: (Integer) -> Slot?
522
+ def insert: (Integer, Slot) -> self
523
+ def replace: (Integer, Slot, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> self
524
+ def delete_at: (Integer) -> Slot?
525
+ def split: (Integer) -> Array[BTree]
526
+ def slice: (Integer, Integer) -> BTree
527
+ def concat: (BTree) -> BTree
528
+ def each_from_index: (Integer) -> Enumerator[Slot, self]
529
+ | (Integer) { (Slot) -> top } -> self
530
+ def integer_index: (Integer) -> void
531
+ def next_frame: (path) -> [ Integer, node, Integer ]?
532
+ def rebalance_child: (Transaction, node, node, Integer, Integer?) -> void
533
+ def merge_neighbor: (node, node, Integer) -> [ node, Integer ]
534
+ def collapse_root: (Transaction, node, Integer?, Integer) -> Integer
535
+ def resolve_index: (Integer, Integer) -> Integer?
536
+ def read: (Integer, Integer, ?bound: Integer) -> String
537
+ def header: () -> [ Integer, Integer? ]
538
+ def read_node: (Integer, Integer, ?bound: Integer) -> node
539
+ def read_node_header: (Integer, Integer) -> [ Integer, Integer ]
540
+ def node_slots: (String, Integer, Integer) -> Array[Slot]
541
+ def validate_node: (Node, Integer) -> void
542
+ def validate_branch: (Node) -> void
543
+ def validate_leaf: (Node) -> void
544
+ def descend: (Integer?, Integer, Integer, ?insertion: bool, ?ancestors: Array[Integer]) -> [ path, node, Integer ]
545
+ def pointer_for: (path, Integer?) -> Integer?
546
+ def validate_slot: (Slot) -> void
547
+ def mutate: [A] () { (Transaction) -> A } -> A
548
+ def node_for: (ref) -> node
549
+ def child_ref: (ref, node, Integer) -> ref
550
+ def merge_nodes: (node, node) -> node
551
+ def assemble: (Transaction, node) -> Array[ref]
552
+ def branch: (Array[ref]) -> node
553
+ def height: (ref) -> Integer
554
+ def join_roots: (Transaction, ref, ref) -> ref
555
+ def sibling_root: (Transaction, ref, node, Range[Integer]) -> ref
556
+ def split_root: (Transaction, ref, Integer) -> [ ref, ref ]
557
+ def detached: (Transaction, ref) -> BTree
558
+ def write_node: (Transaction, node, ?Integer?) -> Integer
559
+ def write_split: (Transaction, node, Integer?) -> Array[[ Integer, Integer ]]
560
+ def publish: (Transaction, Integer, Integer, ?propagate: bool) -> Cursor
561
+ end
562
+
563
+ class SortedMap
564
+ include Enumerable[[ String, Slot ]]
565
+ @tree: Tree
566
+ attr_reader cursor: Cursor
567
+ def initialize: (Cursor, ?set: bool) -> void
568
+ def size: () -> Integer
569
+ def get: (String) -> Slot?
570
+ def include?: (String) -> bool
571
+ def put: (String, value: Slot) -> self
572
+ def add: (String) -> self
573
+ def remove: (String) -> bool
574
+ def rank: (String) -> Integer
575
+ def at: (Integer) -> [ String, Slot ]?
576
+ def each: () -> Enumerator[[ String, Slot ], self]
577
+ | () { ([ String, Slot ]) -> top } -> self
578
+ def each_from: (String) -> Enumerator[[ String, Slot ], self]
579
+ | (String) { ([ String, Slot ]) -> top } -> self
580
+ def each_from_index: (Integer) -> Enumerator[[ String, Slot ], self]
581
+ | (Integer) { ([ String, Slot ]) -> top } -> self
582
+ def cursor_at: (String, ?create: bool) -> Cursor?
583
+ def replace_child: (String, Slot, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> self
584
+ def decode: (Slot) -> [ String, Slot ]
585
+ class Tree < BTree
586
+ BRANCH_SIZE: Integer
587
+ type sorted_path = Array[[ Integer, Node, Integer ]]
588
+ class Node
589
+ attr_accessor kind: Integer
590
+ attr_accessor slots: Array[Slot]
591
+ attr_accessor counts: Array[Integer]
592
+ attr_accessor separators: Array[Slot]
593
+ def self.new: (Integer, Array[Slot], Array[Integer], Array[Slot]) -> Node
594
+ def initialize: (Integer, Array[Slot], Array[Integer], Array[Slot]) -> void
595
+ def size: () -> Integer
596
+ end
597
+ def record: (Slot) -> [ Slot, Slot ]
598
+ def find: (String) -> Slot?
599
+ def locate: (String) -> [ sorted_path, Node, Integer, bool, Integer ]
600
+ def store: (String, ?value: Slot?, ?key_only: bool, ?owner: Cursor?, ?collection: bool, ?propagate: bool) -> self
601
+ def store_leaf: (Transaction, String, Node, Integer, bool, bool, Slot?) -> void
602
+ def write_path: (Transaction, sorted_path, Node, Integer?) -> Integer
603
+ def collapse_sorted_root: (Transaction, Node, Integer?, Integer) -> Integer
604
+ def remove: (String) -> bool
605
+ def lower_bound: (Integer) { (Integer) -> bool } -> Integer
606
+ def split_separator: (Array[[ Integer, Integer, Slot? ]]) -> Slot
607
+ def key_bytes: (Slot) -> String
608
+ def read_node: (Integer, Integer, ?bound: Integer) -> Node
609
+ def validate_header: (Integer, Integer) -> void
610
+ def valid_node?: (Node) -> bool
611
+ def write_node: (Transaction, BTree::node, ?Integer?) -> Integer
612
+ def padded_slots: (Array[Slot]) -> String
613
+ def split_node: (Transaction, Node, Integer?) -> Array[[ Integer, Integer, Slot? ]]
614
+ end
615
+ end
616
+
617
+ class SortedSet < SortedMap
618
+ def initialize: (Cursor) -> void
619
+ end
620
+
621
+ class Compaction
622
+ INLINE_TAGS: Array[Symbol]
623
+ BLOCK_SIZE: Integer
624
+ @source: Database
625
+ @bound: Integer
626
+ @transaction: Transaction
627
+ @offsets: OffsetMap
628
+ @stack: Array[^() -> void]
629
+ def initialize: (Database, Cursor, Transaction, OffsetMap) -> void
630
+ def copy: (Slot) -> Slot
631
+ def read: (Integer, Integer) -> String
632
+ def parse: (String) -> Slot
633
+ def remap: (Slot) -> Slot
634
+ def remap_pointer: (Slot) -> Integer
635
+ def reserve: (Integer, Integer, ?cache: bool) { (Integer, Integer) -> void } -> Integer
636
+ def reserve_slots: (Integer, Integer, Integer, Integer) -> Integer
637
+ def copy_bytes: (Slot) -> Integer
638
+ def slots: (Integer, Integer, Integer, Integer) -> void
639
+ def array_header: (Integer, Integer) -> void
640
+ def array_index: (Integer, Integer, Integer) -> Integer
641
+ def partial_array: (Integer, Integer, Integer, Integer) -> void
642
+ def tree_header: (Integer, Integer, bool) -> void
643
+ def tree_node: (Integer, bool) -> Integer
644
+ def tree_branch: (Integer, Integer, bool) -> void
645
+ end
646
+
647
+ class ReplicaState < Data
648
+ attr_reader committed_size: Integer
649
+ attr_reader checksum: Integer
650
+ def self.new: (committed_size: Integer, checksum: Integer) -> ReplicaState
651
+ end
652
+
653
+ module Replication
654
+ @store: store
655
+
656
+ @lock_timeout: Float
657
+
658
+ @needs_reopen: bool
659
+
660
+ def with_operation: [A] () { () -> A } -> A
661
+
662
+ def committed_state: () -> [ Integer, Slot ]
663
+
664
+ def header: () -> Header
665
+
666
+ CHUNK_SIZE: Integer
667
+
668
+ def replica_state: () -> ReplicaState
669
+
670
+ def replication_start: (ReplicaState) -> Integer
671
+
672
+ def read_committed: (Integer, Integer, _Writer) -> nil
673
+
674
+ def apply_replicated: (Integer, _Reader, Integer) -> nil
675
+
676
+ def append_replica_chunks: (_Reader, Integer, Integer) -> void
677
+
678
+ def recover_replica_application: (Integer, bool, :not_committed | :committed | :unknown) -> void
679
+
680
+ def self.validate_replica: (store, Integer) -> void
681
+
682
+ def self.cleanup_staged_replica: (FileStore, bool, :not_committed | :committed | :unknown) -> void
683
+
684
+ def self.copy_replica: (to: String, source_io: _Reader, length: Integer) -> Database
685
+
686
+ def self.position: (Integer) -> void
687
+
688
+ def self.trailer: (store, Header, Integer, Integer) -> [ Slot, Integer ]
689
+
690
+ def self.read_chunks: (_Reader, Integer) { (String) -> top } -> void
691
+
692
+ def self.write_all: (_Writer, String) -> void
693
+
694
+ def self.storage_write: [A] (?outcome: :not_committed | :committed | :unknown) { () -> A } -> A
695
+ end
696
+ end
697
+ end
data/sig/manifest.yaml ADDED
@@ -0,0 +1,10 @@
1
+ dependencies:
2
+ - name: bigdecimal
3
+ - name: date
4
+ - name: digest
5
+ - name: monitor
6
+ - name: objspace
7
+ - name: pathname
8
+ - name: securerandom
9
+ - name: stringio
10
+ - name: tempfile