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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +28 -0
- data/LICENSE +21 -0
- data/README.md +131 -0
- data/docs/benchmarks.md +135 -0
- data/docs/core.md +123 -0
- data/docs/portable.md +99 -0
- data/docs/releasing.md +37 -0
- data/docs/ruby-profile-v1.md +226 -0
- data/docs/ruby.md +61 -0
- data/examples/indexed_users.rb +23 -0
- data/examples/portable.rb +62 -0
- data/examples/ruby.rb +56 -0
- data/lib/xitdb/context.rb +360 -0
- data/lib/xitdb/conversion.rb +222 -0
- data/lib/xitdb/core/array_list.rb +282 -0
- data/lib/xitdb/core/b_tree.rb +546 -0
- data/lib/xitdb/core/bytes.rb +181 -0
- data/lib/xitdb/core/compaction.rb +172 -0
- data/lib/xitdb/core/crc64.rb +22 -0
- data/lib/xitdb/core/cursor.rb +201 -0
- data/lib/xitdb/core/database.rb +359 -0
- data/lib/xitdb/core/file_store.rb +194 -0
- data/lib/xitdb/core/format.rb +148 -0
- data/lib/xitdb/core/hash_map.rb +371 -0
- data/lib/xitdb/core/hasher.rb +49 -0
- data/lib/xitdb/core/linked_array_list.rb +85 -0
- data/lib/xitdb/core/memory_store.rb +277 -0
- data/lib/xitdb/core/offset_map.rb +85 -0
- data/lib/xitdb/core/replication.rb +242 -0
- data/lib/xitdb/core/sorted_map.rb +361 -0
- data/lib/xitdb/core/transaction.rb +159 -0
- data/lib/xitdb/core.rb +17 -0
- data/lib/xitdb/database.rb +332 -0
- data/lib/xitdb/declarations.rb +73 -0
- data/lib/xitdb/errors.rb +84 -0
- data/lib/xitdb/history.rb +58 -0
- data/lib/xitdb/input_guard.rb +39 -0
- data/lib/xitdb/profiles/portable.rb +407 -0
- data/lib/xitdb/profiles/ruby.rb +173 -0
- data/lib/xitdb/revision.rb +42 -0
- data/lib/xitdb/ruby/codec.rb +123 -0
- data/lib/xitdb/ruby/containers.rb +495 -0
- data/lib/xitdb/ruby/key_encoding.rb +60 -0
- data/lib/xitdb/ruby/ordered_keys.rb +87 -0
- data/lib/xitdb/ruby/scalars.rb +296 -0
- data/lib/xitdb/ruby/wire.rb +146 -0
- data/lib/xitdb/ruby.rb +46 -0
- data/lib/xitdb/snapshot.rb +13 -0
- data/lib/xitdb/streams.rb +148 -0
- data/lib/xitdb/value_walker.rb +192 -0
- data/lib/xitdb/version.rb +5 -0
- data/lib/xitdb/views/array.rb +303 -0
- data/lib/xitdb/views/base.rb +271 -0
- data/lib/xitdb/views/linked_array.rb +18 -0
- data/lib/xitdb/views/map.rb +162 -0
- data/lib/xitdb/views/set.rb +41 -0
- data/lib/xitdb/views/sorted.rb +77 -0
- data/lib/xitdb.rb +20 -0
- data/sig/base.rbs +76 -0
- data/sig/core.rbs +697 -0
- data/sig/manifest.yaml +10 -0
- data/sig/native.rbs +118 -0
- data/sig/public.rbs +427 -0
- data/sig/ruby.rbs +337 -0
- 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
|