dbmlite3 1.0.a1

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.
@@ -0,0 +1,2588 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Class: Lite3::DBM
8
+
9
+ &mdash; Documentation by YARD 0.9.25
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "Lite3::DBM";
19
+ relpath = '../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../_index.html">Index (D)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../Lite3.html" title="Lite3 (module)">Lite3</a></span></span>
41
+ &raquo;
42
+ <span class="title">DBM</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Class: Lite3::DBM
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName">Object</span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next">Lite3::DBM</li>
78
+
79
+ </ul>
80
+ <a href="#" class="inheritanceTree">show all</a>
81
+
82
+ </dd>
83
+ </dl>
84
+
85
+
86
+
87
+
88
+
89
+
90
+ <dl>
91
+ <dt>Includes:</dt>
92
+ <dd>Enumerable</dd>
93
+ </dl>
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <dl>
101
+ <dt>Defined in:</dt>
102
+ <dd>lib/dbmlite3.rb</dd>
103
+ </dl>
104
+
105
+ </div>
106
+
107
+ <h2>Overview</h2><div class="docstring">
108
+ <div class="discussion">
109
+ <p>Lite3::DBM encapsulates a single table in a single SQLite3
110
+ database file and lets you access it as easily as a Hash:</p>
111
+
112
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbmlite3</span><span class='tstring_end'>&#39;</span></span>
113
+
114
+ <span class='id identifier rubyid_db'>db</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Lite3.html" title="Lite3 (module)">Lite3</a></span></span><span class='op'>::</span><span class='const'>DBM</span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="#initialize-instance_method" title="Lite3::DBM#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>database.sqlite3</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>table</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
115
+ <span class='id identifier rubyid_db'>db</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>speed</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='int'>88</span>
116
+ <span class='id identifier rubyid_db'>db</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>date</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'>Date</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>1955</span><span class='comma'>,</span> <span class='int'>11</span><span class='comma'>,</span> <span class='int'>5</span><span class='rparen'>)</span>
117
+ <span class='id identifier rubyid_db'>db</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>power_threshold</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='float'>2.2</span>
118
+
119
+ <span class='id identifier rubyid_db'>db</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_k'>k</span><span class='embexpr_end'>}</span><span class='tstring_content'> -&gt; </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_v'>v</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbrace'>}</span>
120
+
121
+ <span class='id identifier rubyid_double_speed'>double_speed</span> <span class='op'>=</span> <span class='id identifier rubyid_db'>db</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>speed</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>*</span> <span class='int'>2</span>
122
+
123
+ <span class='id identifier rubyid_db'>db</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
124
+ </code></pre>
125
+
126
+ <p>Note that keys must be Strings. As a special exception, Symbols
127
+ are also allowed but are transparently converted to Strings
128
+ first. This means that while something like this will work:</p>
129
+
130
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_db'>db</span><span class='lbracket'>[</span><span class='symbol'>:foo</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='int'>42</span>
131
+ </code></pre>
132
+
133
+ <p>a subseqent</p>
134
+
135
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_db'>db</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='symbol'>:foo</span><span class='rparen'>)</span> <span class='kw'>or</span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'>AbjectFailure</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
136
+ </code></pre>
137
+
138
+ <p>will raise an exception because the key <code>:foo</code> was turned into a
139
+ string. you will need to do this instead:</p>
140
+
141
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_db'>db</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>foo</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>or</span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'>AbjectFailure</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
142
+ </code></pre>
143
+
144
+ <p>Unlike DBM, values may (optionally) be any serializable Ruby type.</p>
145
+
146
+ <p>You can select the serialization method with an optional third
147
+ constructor argument. Options are <code>YAML</code> (the default), <code>Marshal</code>
148
+ or simple string conversion with <code>to_s</code>. Each of these methods will
149
+ have their own pros and cons.</p>
150
+
151
+ <p>The table name must be a valid name identifier (i.e. matches
152
+ /^[a-zA-Z_]\w*$/).</p>
153
+
154
+ <p>Lite3::DBM also provides access to SQLite3 transactions with the
155
+ <code>transaction</code> method:</p>
156
+
157
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_db'>db</span><span class='period'>.</span><span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span>
158
+ <span class='lparen'>(</span><span class='int'>1</span><span class='op'>..</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_db'>db</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>key_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_n'>n</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_n'>n</span><span class='comma'>,</span> <span class='id identifier rubyid_n'>n</span><span class='op'>*</span><span class='int'>2</span><span class='comma'>,</span> <span class='id identifier rubyid_n'>n</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='rbrace'>}</span>
159
+ <span class='rbrace'>}</span>
160
+ </code></pre>
161
+
162
+ <p>Outside of a transaction statement, each Lite3::DBM method that accesses
163
+ the database does so in a single transaction.</p>
164
+
165
+ <p>Note that if you need to do a large number of database operations,
166
+ there is often a significant performance advantage to grouping them
167
+ together in a transaction.</p>
168
+
169
+ <p>The underlying table will have the given name prefixed with the
170
+ string <code>dbmlite3_</code>. In addition, the table <code>meta_dbmlite3</code> holds
171
+ some related metadata. If your program also uses the SQLite3 gem to
172
+ access the database directly, you should not touch these tables or
173
+ expect their format to remain consistant.</p>
174
+
175
+
176
+ </div>
177
+ </div>
178
+ <div class="tags">
179
+
180
+
181
+ </div>
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+ <h2>
190
+ Class Method Summary
191
+ <small><a href="#" class="summary_toggle">collapse</a></small>
192
+ </h2>
193
+
194
+ <ul class="summary">
195
+
196
+ <li class="public ">
197
+ <span class="summary_signature">
198
+
199
+ <a href="#open-class_method" title="open (class method)">.<strong>open</strong>(filename, tablename, serializer = :yaml, &amp;block) &#x21d2; Object </a>
200
+
201
+
202
+
203
+ </span>
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+ <span class="summary_desc"><div class='inline'><p>Identical to <code>initialize</code> except that if a block is provided, it is evaluated with a new Lite3::DBM which is then closed afterward.</p>
214
+ </div></span>
215
+
216
+ </li>
217
+
218
+
219
+ </ul>
220
+
221
+ <h2>
222
+ Instance Method Summary
223
+ <small><a href="#" class="summary_toggle">collapse</a></small>
224
+ </h2>
225
+
226
+ <ul class="summary">
227
+
228
+ <li class="public ">
229
+ <span class="summary_signature">
230
+
231
+ <a href="#[]-instance_method" title="#[] (instance method)">#<strong>[]</strong>(key) &#x21d2; Object </a>
232
+
233
+
234
+
235
+ </span>
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+ <span class="summary_desc"><div class='inline'><p>Retrieve the value associated with <code>key</code> from the database or nil if it is not present.</p>
246
+ </div></span>
247
+
248
+ </li>
249
+
250
+
251
+ <li class="public ">
252
+ <span class="summary_signature">
253
+
254
+ <a href="#[]=-instance_method" title="#[]= (instance method)">#<strong>[]=</strong>(key, value) &#x21d2; Object </a>
255
+
256
+
257
+
258
+ (also: #store)
259
+
260
+ </span>
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+ <span class="summary_desc"><div class='inline'><p>Store <code>value</code> at <code>key</code> in the database.</p>
271
+ </div></span>
272
+
273
+ </li>
274
+
275
+
276
+ <li class="public ">
277
+ <span class="summary_signature">
278
+
279
+ <a href="#clear-instance_method" title="#clear (instance method)">#<strong>clear</strong> &#x21d2; Object </a>
280
+
281
+
282
+
283
+ </span>
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+ <span class="summary_desc"><div class='inline'><p>Delete all entries from the table.</p>
294
+ </div></span>
295
+
296
+ </li>
297
+
298
+
299
+ <li class="public ">
300
+ <span class="summary_signature">
301
+
302
+ <a href="#close-instance_method" title="#close (instance method)">#<strong>close</strong> &#x21d2; Object </a>
303
+
304
+
305
+
306
+ </span>
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+ <span class="summary_desc"><div class='inline'><p>Close <code>self</code>.</p>
317
+ </div></span>
318
+
319
+ </li>
320
+
321
+
322
+ <li class="public ">
323
+ <span class="summary_signature">
324
+
325
+ <a href="#closed%3F-instance_method" title="#closed? (instance method)">#<strong>closed?</strong> &#x21d2; Boolean </a>
326
+
327
+
328
+
329
+ </span>
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+ <span class="summary_desc"><div class='inline'><p>Test if this object has been closed.</p>
340
+ </div></span>
341
+
342
+ </li>
343
+
344
+
345
+ <li class="public ">
346
+ <span class="summary_signature">
347
+
348
+ <a href="#delete-instance_method" title="#delete (instance method)">#<strong>delete</strong>(key) &#x21d2; Object </a>
349
+
350
+
351
+
352
+ </span>
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+ <span class="summary_desc"><div class='inline'><p>Remove <code>key</code> and its associated value from <code>self</code>.</p>
363
+ </div></span>
364
+
365
+ </li>
366
+
367
+
368
+ <li class="public ">
369
+ <span class="summary_signature">
370
+
371
+ <a href="#delete_if-instance_method" title="#delete_if (instance method)">#<strong>delete_if</strong> {|value| ... } &#x21d2; Object </a>
372
+
373
+
374
+
375
+ (also: #reject!)
376
+
377
+ </span>
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+ <span class="summary_desc"><div class='inline'><p>Evaluate the block on each key-value pair in <code>self</code> end delete each entry for which the block returns true.</p>
388
+ </div></span>
389
+
390
+ </li>
391
+
392
+
393
+ <li class="public ">
394
+ <span class="summary_signature">
395
+
396
+ <a href="#each-instance_method" title="#each (instance method)">#<strong>each</strong> {|key, value| ... } &#x21d2; Object </a>
397
+
398
+
399
+
400
+ (also: #each_pair)
401
+
402
+ </span>
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+ <span class="summary_desc"><div class='inline'><p>Calls the given block with each key-value pair in the usual order, then return self.</p>
413
+ </div></span>
414
+
415
+ </li>
416
+
417
+
418
+ <li class="public ">
419
+ <span class="summary_signature">
420
+
421
+ <a href="#each_key-instance_method" title="#each_key (instance method)">#<strong>each_key</strong> {|key| ... } &#x21d2; Object </a>
422
+
423
+
424
+
425
+ </span>
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+ <span class="summary_desc"><div class='inline'><p>Calls the given block with each key; returns self.</p>
436
+ </div></span>
437
+
438
+ </li>
439
+
440
+
441
+ <li class="public ">
442
+ <span class="summary_signature">
443
+
444
+ <a href="#each_value-instance_method" title="#each_value (instance method)">#<strong>each_value</strong> {|value| ... } &#x21d2; Object </a>
445
+
446
+
447
+
448
+ </span>
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+ <span class="summary_desc"><div class='inline'><p>Calls the given block with each value; returns self.</p>
459
+ </div></span>
460
+
461
+ </li>
462
+
463
+
464
+ <li class="public ">
465
+ <span class="summary_signature">
466
+
467
+ <a href="#empty%3F-instance_method" title="#empty? (instance method)">#<strong>empty?</strong> &#x21d2; Boolean </a>
468
+
469
+
470
+
471
+ </span>
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+ <span class="summary_desc"><div class='inline'><p>Test if <code>self</code> is empty.</p>
482
+ </div></span>
483
+
484
+ </li>
485
+
486
+
487
+ <li class="public ">
488
+ <span class="summary_signature">
489
+
490
+ <a href="#fetch-instance_method" title="#fetch (instance method)">#<strong>fetch</strong>(key, *args) {|key| ... } &#x21d2; Object </a>
491
+
492
+
493
+
494
+ </span>
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+ <span class="summary_desc"><div class='inline'><p>Retrieve the value associated with <code>key</code>.</p>
505
+ </div></span>
506
+
507
+ </li>
508
+
509
+
510
+ <li class="public ">
511
+ <span class="summary_signature">
512
+
513
+ <a href="#handle_closed%3F-instance_method" title="#handle_closed? (instance method)">#<strong>handle_closed?</strong> &#x21d2; Boolean </a>
514
+
515
+
516
+
517
+ </span>
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+ <span class="summary_desc"><div class='inline'><p>Test if the underlying <code>SQLite3::Database</code> is closed.</p>
528
+ </div></span>
529
+
530
+ </li>
531
+
532
+
533
+ <li class="public ">
534
+ <span class="summary_signature">
535
+
536
+ <a href="#has_key%3F-instance_method" title="#has_key? (instance method)">#<strong>has_key?</strong>(key) &#x21d2; Boolean </a>
537
+
538
+
539
+
540
+ (also: #include?, #member?, #key?)
541
+
542
+ </span>
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+ <span class="summary_desc"><div class='inline'><p>Return <code>true</code> if the table contains <code>key</code>; otherwise, return <code>false</code>.</p>
553
+ </div></span>
554
+
555
+ </li>
556
+
557
+
558
+ <li class="public ">
559
+ <span class="summary_signature">
560
+
561
+ <a href="#has_value%3F-instance_method" title="#has_value? (instance method)">#<strong>has_value?</strong>(val) &#x21d2; Boolean </a>
562
+
563
+
564
+
565
+ (also: #value?)
566
+
567
+ </span>
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+ <span class="summary_desc"><div class='inline'><p>Test if <code>val</code> is one of the values in this table.</p>
578
+ </div></span>
579
+
580
+ </li>
581
+
582
+
583
+ <li class="public ">
584
+ <span class="summary_signature">
585
+
586
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(filename, tablename, serializer = :yaml) &#x21d2; DBM </a>
587
+
588
+
589
+
590
+ </span>
591
+
592
+
593
+ <span class="note title constructor">constructor</span>
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+ <span class="summary_desc"><div class='inline'><p>Create a new <code>Lite3::DBM</code> object that opens database file <code>filename</code> and performs subsequent operations on <code>table</code>.</p>
603
+ </div></span>
604
+
605
+ </li>
606
+
607
+
608
+ <li class="public ">
609
+ <span class="summary_signature">
610
+
611
+ <a href="#invert-instance_method" title="#invert (instance method)">#<strong>invert</strong> &#x21d2; Object </a>
612
+
613
+
614
+
615
+ </span>
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+ <span class="summary_desc"><div class='inline'><p>Return a <code>Hash</code> whose keys are the table&#39;s values and whose values are the table&#39;s keys.</p>
626
+ </div></span>
627
+
628
+ </li>
629
+
630
+
631
+ <li class="public ">
632
+ <span class="summary_signature">
633
+
634
+ <a href="#keys-instance_method" title="#keys (instance method)">#<strong>keys</strong> &#x21d2; Object </a>
635
+
636
+
637
+
638
+ </span>
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+ <span class="summary_desc"><div class='inline'><p>Return an <code>Array</code> of all of the keys in the table.</p>
649
+ </div></span>
650
+
651
+ </li>
652
+
653
+
654
+ <li class="public ">
655
+ <span class="summary_signature">
656
+
657
+ <a href="#shift-instance_method" title="#shift (instance method)">#<strong>shift</strong> &#x21d2; Object </a>
658
+
659
+
660
+
661
+ </span>
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+ <span class="summary_desc"><div class='inline'><p>Remove the first key/value pair from <code>self</code> and return it.</p>
672
+ </div></span>
673
+
674
+ </li>
675
+
676
+
677
+ <li class="public ">
678
+ <span class="summary_signature">
679
+
680
+ <a href="#size-instance_method" title="#size (instance method)">#<strong>size</strong> &#x21d2; Object </a>
681
+
682
+
683
+
684
+ (also: #length)
685
+
686
+ </span>
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+ <span class="summary_desc"><div class='inline'><p>Return the number of entries (key-value pairs) in <code>self</code>.</p>
697
+ </div></span>
698
+
699
+ </li>
700
+
701
+
702
+ <li class="public ">
703
+ <span class="summary_signature">
704
+
705
+ <a href="#to_a-instance_method" title="#to_a (instance method)">#<strong>to_a</strong> &#x21d2; Object </a>
706
+
707
+
708
+
709
+ </span>
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+ <span class="summary_desc"><div class='inline'><p>Returns an <code>Array</code> of 2-element <code>Array</code> objects each containing a key-value pair from <code>self</code>.</p>
720
+ </div></span>
721
+
722
+ </li>
723
+
724
+
725
+ <li class="public ">
726
+ <span class="summary_signature">
727
+
728
+ <a href="#to_hash-instance_method" title="#to_hash (instance method)">#<strong>to_hash</strong> &#x21d2; Object </a>
729
+
730
+
731
+
732
+ </span>
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+ <span class="summary_desc"><div class='inline'><p>Copies the table into a <code>Hash</code> and returns it.</p>
743
+ </div></span>
744
+
745
+ </li>
746
+
747
+
748
+ <li class="public ">
749
+ <span class="summary_signature">
750
+
751
+ <a href="#to_s-instance_method" title="#to_s (instance method)">#<strong>to_s</strong> &#x21d2; Object </a>
752
+
753
+
754
+
755
+ (also: #inspect)
756
+
757
+ </span>
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+ <span class="summary_desc"><div class='inline'></div></span>
768
+
769
+ </li>
770
+
771
+
772
+ <li class="public ">
773
+ <span class="summary_signature">
774
+
775
+ <a href="#transaction-instance_method" title="#transaction (instance method)">#<strong>transaction</strong> {|db| ... } &#x21d2; Object </a>
776
+
777
+
778
+
779
+ </span>
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+ <span class="summary_desc"><div class='inline'><p>Begins a transaction, evaluates the given block and then ends the transaction.</p>
790
+ </div></span>
791
+
792
+ </li>
793
+
794
+
795
+ <li class="public ">
796
+ <span class="summary_signature">
797
+
798
+ <a href="#transaction_active%3F-instance_method" title="#transaction_active? (instance method)">#<strong>transaction_active?</strong> &#x21d2; Boolean </a>
799
+
800
+
801
+
802
+ </span>
803
+
804
+
805
+
806
+
807
+
808
+
809
+
810
+
811
+
812
+ <span class="summary_desc"><div class='inline'><p>Test if there is currently a transaction in progress.</p>
813
+ </div></span>
814
+
815
+ </li>
816
+
817
+
818
+ <li class="public ">
819
+ <span class="summary_signature">
820
+
821
+ <a href="#update-instance_method" title="#update (instance method)">#<strong>update</strong>(hash) &#x21d2; Object </a>
822
+
823
+
824
+
825
+ </span>
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+ <span class="summary_desc"><div class='inline'><p>Updates the database with multiple values from the specified object.</p>
836
+ </div></span>
837
+
838
+ </li>
839
+
840
+
841
+ <li class="public ">
842
+ <span class="summary_signature">
843
+
844
+ <a href="#values-instance_method" title="#values (instance method)">#<strong>values</strong> &#x21d2; Object </a>
845
+
846
+
847
+
848
+ </span>
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+ <span class="summary_desc"><div class='inline'><p>Return an array of all values in the table.</p>
859
+ </div></span>
860
+
861
+ </li>
862
+
863
+
864
+ <li class="public ">
865
+ <span class="summary_signature">
866
+
867
+ <a href="#values_at-instance_method" title="#values_at (instance method)">#<strong>values_at</strong>(*keys) &#x21d2; Object </a>
868
+
869
+
870
+
871
+ </span>
872
+
873
+
874
+
875
+
876
+
877
+
878
+
879
+
880
+
881
+ <span class="summary_desc"><div class='inline'><p>Return a new <code>Array</code> containing the values corresponding to the given keys.</p>
882
+ </div></span>
883
+
884
+ </li>
885
+
886
+
887
+ </ul>
888
+
889
+
890
+
891
+ <div id="constructor_details" class="method_details_list">
892
+ <h2>Constructor Details</h2>
893
+
894
+ <div class="method_details first">
895
+ <h3 class="signature first" id="initialize-instance_method">
896
+
897
+ #<strong>initialize</strong>(filename, tablename, serializer = :yaml) &#x21d2; <tt><span class='object_link'><a href="" title="Lite3::DBM (class)">DBM</a></span></tt>
898
+
899
+
900
+
901
+
902
+
903
+ </h3><div class="docstring">
904
+ <div class="discussion">
905
+ <p>Create a new <code>Lite3::DBM</code> object that opens database file
906
+ <code>filename</code> and performs subsequent operations on <code>table</code>. Both
907
+ the database file and the table will be created if they do not
908
+ yet exist.</p>
909
+
910
+ <p>The optional third argument <code>serializer</code> is used to choose the
911
+ serialization method for converting Ruby values into storable
912
+ strings. There are three options:</p>
913
+
914
+ <ul>
915
+ <li><code>:yaml</code> uses the <code>YAML</code> module.</li>
916
+ <li><code>:marshal</code> uses the <code>Marshal</code> module.</li>
917
+ <li><code>:string</code> simply uses the default <code>to_s</code> method, just like the
918
+ stock <code>DBM</code>.</li>
919
+ </ul>
920
+
921
+ <p>Each of these will have their pros and cons. The default is
922
+ <code>:yaml</code> because that is the most portable across Ruby versions.
923
+ <code>:marshal</code> tends to be faster but is not stable across Ruby
924
+ versions. Note that <code>DBM</code> does not check your Marshal version.</p>
925
+
926
+ <p>Your serializer choice is registered in a metadata table when
927
+ <code>tablename</code> is created in the SQLite3 file. Afterward, it is an
928
+ error to attempt to open the table with a different serializer
929
+ and will result in a Lite3::Error exception.</p>
930
+
931
+
932
+ </div>
933
+ </div>
934
+ <div class="tags">
935
+
936
+
937
+ </div><table class="source_code">
938
+ <tr>
939
+ <td>
940
+ <pre class="lines">
941
+
942
+
943
+ 407
944
+ 408
945
+ 409
946
+ 410
947
+ 411
948
+ 412
949
+ 413
950
+ 414
951
+ 415
952
+ 416
953
+ 417
954
+ 418
955
+ 419
956
+ 420
957
+ 421
958
+ 422
959
+ 423
960
+ 424
961
+ 425
962
+ 426
963
+ 427</pre>
964
+ </td>
965
+ <td>
966
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 407</span>
967
+
968
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='id identifier rubyid_tablename'>tablename</span><span class='comma'>,</span> <span class='id identifier rubyid_serializer'>serializer</span> <span class='op'>=</span> <span class='symbol'>:yaml</span><span class='rparen'>)</span>
969
+ <span class='ivar'>@filename</span> <span class='op'>=</span> <span class='id identifier rubyid_filename'>filename</span>
970
+ <span class='ivar'>@tablename</span> <span class='op'>=</span> <span class='id identifier rubyid_tablename'>tablename</span>
971
+ <span class='ivar'>@valenc</span><span class='comma'>,</span>
972
+ <span class='ivar'>@valdec</span> <span class='op'>=</span> <span class='id identifier rubyid_value_encoders'>value_encoders</span><span class='lparen'>(</span><span class='id identifier rubyid_serializer'>serializer</span><span class='rparen'>)</span>
973
+ <span class='ivar'>@handle</span> <span class='op'>=</span> <span class='const'>HandlePool</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='rparen'>)</span>
974
+
975
+ <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_addref'>addref</span><span class='lparen'>(</span><span class='kw'>self</span><span class='rparen'>)</span>
976
+
977
+ <span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Malformed table name &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_tablename'>tablename</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;; must be a valid identifer</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='lbrace'>{</span>
978
+ <span class='id identifier rubyid_tablename'>tablename</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^[a-zA-Z_]\w*$</span><span class='regexp_end'>/</span></span>
979
+ <span class='rbrace'>}</span>
980
+
981
+ <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span>
982
+ <span class='id identifier rubyid_register_serialization_scheme'>register_serialization_scheme</span><span class='lparen'>(</span><span class='id identifier rubyid_serializer'>serializer</span><span class='rparen'>)</span>
983
+ <span class='id identifier rubyid_create_table_if_not_present'>create_table_if_not_present</span><span class='lparen'>(</span><span class='rparen'>)</span>
984
+ <span class='rbrace'>}</span>
985
+ <span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="Error.html" title="Lite3::Error (class)">Error</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
986
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span> <span class='kw'>if</span> <span class='ivar'>@handle</span>
987
+ <span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_e'>e</span>
988
+ <span class='kw'>end</span></pre>
989
+ </td>
990
+ </tr>
991
+ </table>
992
+ </div>
993
+
994
+ </div>
995
+
996
+
997
+ <div id="class_method_details" class="method_details_list">
998
+ <h2>Class Method Details</h2>
999
+
1000
+
1001
+ <div class="method_details first">
1002
+ <h3 class="signature first" id="open-class_method">
1003
+
1004
+ .<strong>open</strong>(filename, tablename, serializer = :yaml, &amp;block) &#x21d2; <tt>Object</tt>
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+ </h3><div class="docstring">
1011
+ <div class="discussion">
1012
+ <p>Identical to <code>initialize</code> except that if a block is provided, it
1013
+ is evaluated with a new Lite3::DBM which is then closed afterward.
1014
+ This is analagous to <code>File.open</code>.</p>
1015
+
1016
+
1017
+ </div>
1018
+ </div>
1019
+ <div class="tags">
1020
+
1021
+
1022
+ </div><table class="source_code">
1023
+ <tr>
1024
+ <td>
1025
+ <pre class="lines">
1026
+
1027
+
1028
+ 433
1029
+ 434
1030
+ 435
1031
+ 436
1032
+ 437
1033
+ 438
1034
+ 439
1035
+ 440
1036
+ 441
1037
+ 442</pre>
1038
+ </td>
1039
+ <td>
1040
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 433</span>
1041
+
1042
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='id identifier rubyid_tablename'>tablename</span><span class='comma'>,</span> <span class='id identifier rubyid_serializer'>serializer</span> <span class='op'>=</span> <span class='symbol'>:yaml</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1043
+ <span class='id identifier rubyid_instance'>instance</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='id identifier rubyid_tablename'>tablename</span><span class='comma'>,</span> <span class='id identifier rubyid_serializer'>serializer</span><span class='rparen'>)</span>
1044
+ <span class='kw'>return</span> <span class='id identifier rubyid_instance'>instance</span> <span class='kw'>unless</span> <span class='id identifier rubyid_block'>block</span>
1045
+
1046
+ <span class='kw'>begin</span>
1047
+ <span class='kw'>return</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_instance'>instance</span><span class='rparen'>)</span>
1048
+ <span class='kw'>ensure</span>
1049
+ <span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
1050
+ <span class='kw'>end</span>
1051
+ <span class='kw'>end</span></pre>
1052
+ </td>
1053
+ </tr>
1054
+ </table>
1055
+ </div>
1056
+
1057
+ </div>
1058
+
1059
+ <div id="instance_method_details" class="method_details_list">
1060
+ <h2>Instance Method Details</h2>
1061
+
1062
+
1063
+ <div class="method_details first">
1064
+ <h3 class="signature first" id="[]-instance_method">
1065
+
1066
+ #<strong>[]</strong>(key) &#x21d2; <tt>Object</tt>
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+ </h3><div class="docstring">
1073
+ <div class="discussion">
1074
+ <p>Retrieve the value associated with <code>key</code> from the database or
1075
+ nil if it is not present.</p>
1076
+
1077
+
1078
+ </div>
1079
+ </div>
1080
+ <div class="tags">
1081
+
1082
+
1083
+ </div><table class="source_code">
1084
+ <tr>
1085
+ <td>
1086
+ <pre class="lines">
1087
+
1088
+
1089
+ 613
1090
+ 614
1091
+ 615</pre>
1092
+ </td>
1093
+ <td>
1094
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 613</span>
1095
+
1096
+ <span class='kw'>def</span> <span class='op'>[]</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1097
+ <span class='kw'>return</span> <span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1098
+ <span class='kw'>end</span></pre>
1099
+ </td>
1100
+ </tr>
1101
+ </table>
1102
+ </div>
1103
+
1104
+ <div class="method_details ">
1105
+ <h3 class="signature " id="[]=-instance_method">
1106
+
1107
+ #<strong>[]=</strong>(key, value) &#x21d2; <tt>Object</tt>
1108
+
1109
+
1110
+
1111
+ <span class="aliases">Also known as:
1112
+ <span class="names"><span id='store-instance_method'>store</span></span>
1113
+ </span>
1114
+
1115
+
1116
+
1117
+ </h3><div class="docstring">
1118
+ <div class="discussion">
1119
+ <p>Store <code>value</code> at <code>key</code> in the database.</p>
1120
+
1121
+ <p><code>key</code> <strong>must</strong> be a String or a Symbol.</p>
1122
+
1123
+ <p><code>value</code> <strong>must</strong> be convertable to string by whichever
1124
+ serialization method you have chosen.</p>
1125
+
1126
+
1127
+ </div>
1128
+ </div>
1129
+ <div class="tags">
1130
+
1131
+
1132
+ </div><table class="source_code">
1133
+ <tr>
1134
+ <td>
1135
+ <pre class="lines">
1136
+
1137
+
1138
+ 595
1139
+ 596
1140
+ 597
1141
+ 598
1142
+ 599
1143
+ 600
1144
+ 601
1145
+ 602
1146
+ 603
1147
+ 604
1148
+ 605
1149
+ 606
1150
+ 607
1151
+ 608</pre>
1152
+ </td>
1153
+ <td>
1154
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 595</span>
1155
+
1156
+ <span class='kw'>def</span> <span class='op'>[]=</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
1157
+ <span class='id identifier rubyid_key'>key</span> <span class='op'>=</span> <span class='id identifier rubyid_check_key'>check_key</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1158
+ <span class='id identifier rubyid_valstr'>valstr</span> <span class='op'>=</span> <span class='const'>SQLite3</span><span class='op'>::</span><span class='const'>Blob</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='ivar'>@valenc</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span> <span class='rparen'>)</span>
1159
+
1160
+ <span class='id identifier rubyid_insert'>insert</span> <span class='op'>=</span> <span class='heredoc_beg'>&lt;&lt;~SQL</span>
1161
+ <span class='tstring_content'> insert into </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_actual_tbl'>actual_tbl</span><span class='embexpr_end'>}</span><span class='tstring_content'> (key, value) values (?,?)
1162
+ </span><span class='tstring_content'> on conflict(key) do update set value = ?;
1163
+ </span><span class='heredoc_end'> SQL
1164
+ </span> <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span>
1165
+ <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_sql'>sql</span><span class='lparen'>(</span><span class='id identifier rubyid_insert'>insert</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_valstr'>valstr</span><span class='comma'>,</span> <span class='id identifier rubyid_valstr'>valstr</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1166
+ <span class='rbrace'>}</span>
1167
+
1168
+ <span class='kw'>return</span> <span class='id identifier rubyid_value'>value</span>
1169
+ <span class='kw'>end</span></pre>
1170
+ </td>
1171
+ </tr>
1172
+ </table>
1173
+ </div>
1174
+
1175
+ <div class="method_details ">
1176
+ <h3 class="signature " id="clear-instance_method">
1177
+
1178
+ #<strong>clear</strong> &#x21d2; <tt>Object</tt>
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+ </h3><div class="docstring">
1185
+ <div class="discussion">
1186
+ <p>Delete all entries from the table.</p>
1187
+
1188
+
1189
+ </div>
1190
+ </div>
1191
+ <div class="tags">
1192
+
1193
+
1194
+ </div><table class="source_code">
1195
+ <tr>
1196
+ <td>
1197
+ <pre class="lines">
1198
+
1199
+
1200
+ 697
1201
+ 698
1202
+ 699</pre>
1203
+ </td>
1204
+ <td>
1205
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 697</span>
1206
+
1207
+ <span class='kw'>def</span> <span class='id identifier rubyid_clear'>clear</span>
1208
+ <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span> <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_sql'>sql</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>delete from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_actual_tbl'>actual_tbl</span><span class='embexpr_end'>}</span><span class='tstring_content'>;</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
1209
+ <span class='kw'>end</span></pre>
1210
+ </td>
1211
+ </tr>
1212
+ </table>
1213
+ </div>
1214
+
1215
+ <div class="method_details ">
1216
+ <h3 class="signature " id="close-instance_method">
1217
+
1218
+ #<strong>close</strong> &#x21d2; <tt>Object</tt>
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+ </h3><div class="docstring">
1225
+ <div class="discussion">
1226
+ <p>Close <code>self</code>. Subsequent attempts at database operations will
1227
+ fail with an exception but <code>closed?</code> will still work.</p>
1228
+
1229
+ <p>Note that the underlying file handle (via the
1230
+ <code>SQLite3::Database</code> object) will <strong>only</strong> be closed if there are
1231
+ no other <code>DBM</code> objects using that file.</p>
1232
+
1233
+
1234
+ </div>
1235
+ </div>
1236
+ <div class="tags">
1237
+
1238
+
1239
+ </div><table class="source_code">
1240
+ <tr>
1241
+ <td>
1242
+ <pre class="lines">
1243
+
1244
+
1245
+ 530
1246
+ 531
1247
+ 532
1248
+ 533</pre>
1249
+ </td>
1250
+ <td>
1251
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 530</span>
1252
+
1253
+ <span class='kw'>def</span> <span class='id identifier rubyid_close'>close</span>
1254
+ <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_delref'>delref</span><span class='lparen'>(</span><span class='kw'>self</span><span class='rparen'>)</span>
1255
+ <span class='ivar'>@handle</span> <span class='op'>=</span> <span class='const'>ClosedHandle</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='ivar'>@filename</span><span class='comma'>,</span> <span class='ivar'>@tablename</span><span class='rparen'>)</span>
1256
+ <span class='kw'>end</span></pre>
1257
+ </td>
1258
+ </tr>
1259
+ </table>
1260
+ </div>
1261
+
1262
+ <div class="method_details ">
1263
+ <h3 class="signature " id="closed?-instance_method">
1264
+
1265
+ #<strong>closed?</strong> &#x21d2; <tt>Boolean</tt>
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+ </h3><div class="docstring">
1272
+ <div class="discussion">
1273
+ <p>Test if this object has been closed. This is safe to call on a
1274
+ closed <code>DBM</code>.</p>
1275
+
1276
+
1277
+ </div>
1278
+ </div>
1279
+ <div class="tags">
1280
+
1281
+ <p class="tag_title">Returns:</p>
1282
+ <ul class="return">
1283
+
1284
+ <li>
1285
+
1286
+
1287
+ <span class='type'>(<tt>Boolean</tt>)</span>
1288
+
1289
+
1290
+
1291
+ </li>
1292
+
1293
+ </ul>
1294
+
1295
+ </div><table class="source_code">
1296
+ <tr>
1297
+ <td>
1298
+ <pre class="lines">
1299
+
1300
+
1301
+ 537
1302
+ 538
1303
+ 539</pre>
1304
+ </td>
1305
+ <td>
1306
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 537</span>
1307
+
1308
+ <span class='kw'>def</span> <span class='id identifier rubyid_closed?'>closed?</span><span class='lparen'>(</span><span class='rparen'>)</span>
1309
+ <span class='kw'>return</span> <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>ClosedHandle</span>
1310
+ <span class='kw'>end</span></pre>
1311
+ </td>
1312
+ </tr>
1313
+ </table>
1314
+ </div>
1315
+
1316
+ <div class="method_details ">
1317
+ <h3 class="signature " id="delete-instance_method">
1318
+
1319
+ #<strong>delete</strong>(key) &#x21d2; <tt>Object</tt>
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+ </h3><div class="docstring">
1326
+ <div class="discussion">
1327
+ <p>Remove <code>key</code> and its associated value from <code>self</code>. If <code>key</code> is
1328
+ not present, does nothing.</p>
1329
+
1330
+
1331
+ </div>
1332
+ </div>
1333
+ <div class="tags">
1334
+
1335
+
1336
+ </div><table class="source_code">
1337
+ <tr>
1338
+ <td>
1339
+ <pre class="lines">
1340
+
1341
+
1342
+ 786
1343
+ 787
1344
+ 788
1345
+ 789
1346
+ 790</pre>
1347
+ </td>
1348
+ <td>
1349
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 786</span>
1350
+
1351
+ <span class='kw'>def</span> <span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1352
+ <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span>
1353
+ <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_sql'>sql</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>delete from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_actual_tbl'>actual_tbl</span><span class='embexpr_end'>}</span><span class='tstring_content'> where key = ?</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1354
+ <span class='rbrace'>}</span>
1355
+ <span class='kw'>end</span></pre>
1356
+ </td>
1357
+ </tr>
1358
+ </table>
1359
+ </div>
1360
+
1361
+ <div class="method_details ">
1362
+ <h3 class="signature " id="delete_if-instance_method">
1363
+
1364
+ #<strong>delete_if</strong> {|value| ... } &#x21d2; <tt>Object</tt>
1365
+
1366
+
1367
+
1368
+ <span class="aliases">Also known as:
1369
+ <span class="names"><span id='reject!-instance_method'>reject!</span></span>
1370
+ </span>
1371
+
1372
+
1373
+
1374
+ </h3><div class="docstring">
1375
+ <div class="discussion">
1376
+ <p>Evaluate the block on each key-value pair in <code>self</code> end delete
1377
+ each entry for which the block returns true.</p>
1378
+
1379
+
1380
+ </div>
1381
+ </div>
1382
+ <div class="tags">
1383
+
1384
+ <p class="tag_title">Yields:</p>
1385
+ <ul class="yield">
1386
+
1387
+ <li>
1388
+
1389
+
1390
+ <span class='type'>(<tt>value</tt>)</span>
1391
+
1392
+
1393
+
1394
+ &mdash;
1395
+ <div class='inline'><p>The block to evaluate</p>
1396
+ </div>
1397
+
1398
+ </li>
1399
+
1400
+ </ul>
1401
+
1402
+ </div><table class="source_code">
1403
+ <tr>
1404
+ <td>
1405
+ <pre class="lines">
1406
+
1407
+
1408
+ 796
1409
+ 797
1410
+ 798
1411
+ 799
1412
+ 800</pre>
1413
+ </td>
1414
+ <td>
1415
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 796</span>
1416
+
1417
+ <span class='kw'>def</span> <span class='id identifier rubyid_delete_if'>delete_if</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1418
+ <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span>
1419
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='rparen'>)</span> <span class='kw'>and</span> <span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_k'>k</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
1420
+ <span class='rbrace'>}</span>
1421
+ <span class='kw'>end</span></pre>
1422
+ </td>
1423
+ </tr>
1424
+ </table>
1425
+ </div>
1426
+
1427
+ <div class="method_details ">
1428
+ <h3 class="signature " id="each-instance_method">
1429
+
1430
+ #<strong>each</strong> {|key, value| ... } &#x21d2; <tt>Object</tt>
1431
+
1432
+
1433
+
1434
+ <span class="aliases">Also known as:
1435
+ <span class="names"><span id='each_pair-instance_method'>each_pair</span></span>
1436
+ </span>
1437
+
1438
+
1439
+
1440
+ </h3><div class="docstring">
1441
+ <div class="discussion">
1442
+ <p>Calls the given block with each key-value pair in the usual
1443
+ order, then return self. The entire call takes place in its own
1444
+ transaction.</p>
1445
+
1446
+ <p>If no block is given, returns an Enumerator instead. The
1447
+ Enumerator does <em>not</em> start a transaction but individual
1448
+ accesses of it (e.g. calling <code>next</code>) each take place in their
1449
+ own transaction.</p>
1450
+
1451
+
1452
+ </div>
1453
+ </div>
1454
+ <div class="tags">
1455
+
1456
+ <p class="tag_title">Yields:</p>
1457
+ <ul class="yield">
1458
+
1459
+ <li>
1460
+
1461
+
1462
+ <span class='type'>(<tt>key</tt>, <tt>value</tt>)</span>
1463
+
1464
+
1465
+
1466
+ &mdash;
1467
+ <div class='inline'><p>The block to evaluate</p>
1468
+ </div>
1469
+
1470
+ </li>
1471
+
1472
+ </ul>
1473
+
1474
+ </div><table class="source_code">
1475
+ <tr>
1476
+ <td>
1477
+ <pre class="lines">
1478
+
1479
+
1480
+ 711
1481
+ 712
1482
+ 713
1483
+ 714
1484
+ 715</pre>
1485
+ </td>
1486
+ <td>
1487
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 711</span>
1488
+
1489
+ <span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1490
+ <span class='kw'>return</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_enum'>to_enum</span><span class='lparen'>(</span><span class='symbol'>:nt_each</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_block'>block</span>
1491
+ <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_nt_each'>nt_each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
1492
+ <span class='kw'>return</span> <span class='kw'>self</span>
1493
+ <span class='kw'>end</span></pre>
1494
+ </td>
1495
+ </tr>
1496
+ </table>
1497
+ </div>
1498
+
1499
+ <div class="method_details ">
1500
+ <h3 class="signature " id="each_key-instance_method">
1501
+
1502
+ #<strong>each_key</strong> {|key| ... } &#x21d2; <tt>Object</tt>
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+ </h3><div class="docstring">
1509
+ <div class="discussion">
1510
+ <p>Calls the given block with each key; returns self. Exactly like
1511
+ <code>each</code> except for the block argument.</p>
1512
+
1513
+
1514
+ </div>
1515
+ </div>
1516
+ <div class="tags">
1517
+
1518
+ <p class="tag_title">Yields:</p>
1519
+ <ul class="yield">
1520
+
1521
+ <li>
1522
+
1523
+
1524
+ <span class='type'>(<tt>key</tt>)</span>
1525
+
1526
+
1527
+
1528
+ &mdash;
1529
+ <div class='inline'><p>The block to evaluate</p>
1530
+ </div>
1531
+
1532
+ </li>
1533
+
1534
+ </ul>
1535
+
1536
+ </div><table class="source_code">
1537
+ <tr>
1538
+ <td>
1539
+ <pre class="lines">
1540
+
1541
+
1542
+ 761
1543
+ 762
1544
+ 763
1545
+ 764</pre>
1546
+ </td>
1547
+ <td>
1548
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 761</span>
1549
+
1550
+ <span class='kw'>def</span> <span class='id identifier rubyid_each_key'>each_key</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1551
+ <span class='kw'>return</span> <span class='const'>Enumerator</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_y'>y</span><span class='op'>|</span> <span class='id identifier rubyid_nt_each'>nt_each</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_y'>y</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_k'>k</span> <span class='rbrace'>}</span> <span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='id identifier rubyid_block'>block</span>
1552
+ <span class='kw'>return</span> <span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_k'>k</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
1553
+ <span class='kw'>end</span></pre>
1554
+ </td>
1555
+ </tr>
1556
+ </table>
1557
+ </div>
1558
+
1559
+ <div class="method_details ">
1560
+ <h3 class="signature " id="each_value-instance_method">
1561
+
1562
+ #<strong>each_value</strong> {|value| ... } &#x21d2; <tt>Object</tt>
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+ </h3><div class="docstring">
1569
+ <div class="discussion">
1570
+ <p>Calls the given block with each value; returns self. Exactly like
1571
+ <code>each</code> except for the block argument.</p>
1572
+
1573
+
1574
+ </div>
1575
+ </div>
1576
+ <div class="tags">
1577
+
1578
+ <p class="tag_title">Yields:</p>
1579
+ <ul class="yield">
1580
+
1581
+ <li>
1582
+
1583
+
1584
+ <span class='type'>(<tt>value</tt>)</span>
1585
+
1586
+
1587
+
1588
+ &mdash;
1589
+ <div class='inline'><p>The block to evaluate</p>
1590
+ </div>
1591
+
1592
+ </li>
1593
+
1594
+ </ul>
1595
+
1596
+ </div><table class="source_code">
1597
+ <tr>
1598
+ <td>
1599
+ <pre class="lines">
1600
+
1601
+
1602
+ 770
1603
+ 771
1604
+ 772
1605
+ 773</pre>
1606
+ </td>
1607
+ <td>
1608
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 770</span>
1609
+
1610
+ <span class='kw'>def</span> <span class='id identifier rubyid_each_value'>each_value</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1611
+ <span class='kw'>return</span> <span class='const'>Enumerator</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_y'>y</span><span class='op'>|</span> <span class='id identifier rubyid_nt_each'>nt_each</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_y'>y</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_v'>v</span> <span class='rbrace'>}</span> <span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='id identifier rubyid_block'>block</span>
1612
+ <span class='kw'>return</span> <span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_v'>v</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
1613
+ <span class='kw'>end</span></pre>
1614
+ </td>
1615
+ </tr>
1616
+ </table>
1617
+ </div>
1618
+
1619
+ <div class="method_details ">
1620
+ <h3 class="signature " id="empty?-instance_method">
1621
+
1622
+ #<strong>empty?</strong> &#x21d2; <tt>Boolean</tt>
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+ </h3><div class="docstring">
1629
+ <div class="discussion">
1630
+ <p>Test if <code>self</code> is empty.</p>
1631
+
1632
+
1633
+ </div>
1634
+ </div>
1635
+ <div class="tags">
1636
+
1637
+ <p class="tag_title">Returns:</p>
1638
+ <ul class="return">
1639
+
1640
+ <li>
1641
+
1642
+
1643
+ <span class='type'>(<tt>Boolean</tt>)</span>
1644
+
1645
+
1646
+
1647
+ </li>
1648
+
1649
+ </ul>
1650
+
1651
+ </div><table class="source_code">
1652
+ <tr>
1653
+ <td>
1654
+ <pre class="lines">
1655
+
1656
+
1657
+ 813
1658
+ 814
1659
+ 815</pre>
1660
+ </td>
1661
+ <td>
1662
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 813</span>
1663
+
1664
+ <span class='kw'>def</span> <span class='id identifier rubyid_empty?'>empty?</span>
1665
+ <span class='kw'>return</span> <span class='id identifier rubyid_size'>size</span> <span class='op'>==</span> <span class='int'>0</span>
1666
+ <span class='kw'>end</span></pre>
1667
+ </td>
1668
+ </tr>
1669
+ </table>
1670
+ </div>
1671
+
1672
+ <div class="method_details ">
1673
+ <h3 class="signature " id="fetch-instance_method">
1674
+
1675
+ #<strong>fetch</strong>(key, *args) {|key| ... } &#x21d2; <tt>Object</tt>
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+ </h3><div class="docstring">
1682
+ <div class="discussion">
1683
+ <p>Retrieve the value associated with <code>key</code>.</p>
1684
+
1685
+ <p>If it is not present and a block is given, evaluate the block
1686
+ with the key as its argument and return that.</p>
1687
+
1688
+ <p>If no block was given either but one extra parameter was given,
1689
+ that value is returned instead.</p>
1690
+
1691
+ <p>Finally, if none of these was given, it throws an <code>IndexError</code>
1692
+ exception.</p>
1693
+
1694
+ <p>It is an error if <code>fetch</code> is called with more than two arguments.</p>
1695
+
1696
+
1697
+ </div>
1698
+ </div>
1699
+ <div class="tags">
1700
+
1701
+ <p class="tag_title">Yields:</p>
1702
+ <ul class="yield">
1703
+
1704
+ <li>
1705
+
1706
+
1707
+ <span class='type'>(<tt>key</tt>)</span>
1708
+
1709
+
1710
+
1711
+ &mdash;
1712
+ <div class='inline'><p>The fallback block.</p>
1713
+ </div>
1714
+
1715
+ </li>
1716
+
1717
+ </ul>
1718
+ <p class="tag_title">Raises:</p>
1719
+ <ul class="raise">
1720
+
1721
+ <li>
1722
+
1723
+
1724
+ <span class='type'>(<tt>IndexError</tt>)</span>
1725
+
1726
+
1727
+
1728
+ </li>
1729
+
1730
+ </ul>
1731
+
1732
+ </div><table class="source_code">
1733
+ <tr>
1734
+ <td>
1735
+ <pre class="lines">
1736
+
1737
+
1738
+ 631
1739
+ 632
1740
+ 633
1741
+ 634
1742
+ 635
1743
+ 636
1744
+ 637
1745
+ 638
1746
+ 639
1747
+ 640
1748
+ 641
1749
+ 642
1750
+ 643
1751
+ 644
1752
+ 645
1753
+ 646
1754
+ 647
1755
+ 648
1756
+ 649
1757
+ 650
1758
+ 651
1759
+ 652
1760
+ 653
1761
+ 654
1762
+ 655
1763
+ 656
1764
+ 657</pre>
1765
+ </td>
1766
+ <td>
1767
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 631</span>
1768
+
1769
+ <span class='kw'>def</span> <span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_default_block'>default_block</span><span class='rparen'>)</span>
1770
+
1771
+ <span class='comment'># Ensure there are no extra arguments
1772
+ </span> <span class='id identifier rubyid_nargs'>nargs</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>+</span> <span class='int'>1</span>
1773
+ <span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Too many arguments for &#39;fetch&#39;; expected 1 or 2; got </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_nargs'>nargs</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='lbrace'>{</span>
1774
+ <span class='id identifier rubyid_nargs'>nargs</span> <span class='op'>&lt;=</span> <span class='int'>2</span>
1775
+ <span class='rbrace'>}</span>
1776
+
1777
+ <span class='comment'># Retrieve the value
1778
+ </span> <span class='id identifier rubyid_key'>key</span> <span class='op'>=</span> <span class='id identifier rubyid_check_key'>check_key</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1779
+ <span class='id identifier rubyid_rows'>rows</span> <span class='op'>=</span> <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_sql'>sql</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>select * from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_actual_tbl'>actual_tbl</span><span class='embexpr_end'>}</span><span class='tstring_content'> where key=?</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
1780
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> order by rowid;</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1781
+ <span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Multiple matches for key &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_key'>key</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;!</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_rows'>rows</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>&lt;=</span> <span class='int'>1</span> <span class='rbrace'>}</span>
1782
+
1783
+ <span class='comment'># Return the value if found
1784
+ </span> <span class='kw'>return</span> <span class='ivar'>@valdec</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_rows'>rows</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_rows'>rows</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
1785
+
1786
+ <span class='comment'># Otherwise, evaluate the block and use its result if a block was
1787
+ </span> <span class='comment'># given
1788
+ </span> <span class='kw'>return</span> <span class='id identifier rubyid_default_block'>default_block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_default_block'>default_block</span>
1789
+
1790
+ <span class='comment'># Next, see if we have a default value we can return
1791
+ </span> <span class='kw'>return</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>&gt;</span> <span class='int'>0</span>
1792
+
1793
+ <span class='comment'># And if all else fails, raise an IndexError.
1794
+ </span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'>IndexError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>key &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_key'>key</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39; not found.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
1795
+ <span class='kw'>end</span></pre>
1796
+ </td>
1797
+ </tr>
1798
+ </table>
1799
+ </div>
1800
+
1801
+ <div class="method_details ">
1802
+ <h3 class="signature " id="handle_closed?-instance_method">
1803
+
1804
+ #<strong>handle_closed?</strong> &#x21d2; <tt>Boolean</tt>
1805
+
1806
+
1807
+
1808
+
1809
+
1810
+ </h3><div class="docstring">
1811
+ <div class="discussion">
1812
+ <p>Test if the underlying <code>SQLite3::Database</code> is closed. You
1813
+ probably don&#39;t need to care about this method; it&#39;s mostly here
1814
+ to help with unit tests.</p>
1815
+
1816
+ <p>This will <strong>not</strong> work if <code>self</code> has been closed.</p>
1817
+
1818
+
1819
+ </div>
1820
+ </div>
1821
+ <div class="tags">
1822
+
1823
+ <p class="tag_title">Returns:</p>
1824
+ <ul class="return">
1825
+
1826
+ <li>
1827
+
1828
+
1829
+ <span class='type'>(<tt>Boolean</tt>)</span>
1830
+
1831
+
1832
+
1833
+ </li>
1834
+
1835
+ </ul>
1836
+
1837
+ </div><table class="source_code">
1838
+ <tr>
1839
+ <td>
1840
+ <pre class="lines">
1841
+
1842
+
1843
+ 546
1844
+ 547
1845
+ 548</pre>
1846
+ </td>
1847
+ <td>
1848
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 546</span>
1849
+
1850
+ <span class='kw'>def</span> <span class='id identifier rubyid_handle_closed?'>handle_closed?</span>
1851
+ <span class='kw'>return</span> <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span>
1852
+ <span class='kw'>end</span></pre>
1853
+ </td>
1854
+ </tr>
1855
+ </table>
1856
+ </div>
1857
+
1858
+ <div class="method_details ">
1859
+ <h3 class="signature " id="has_key?-instance_method">
1860
+
1861
+ #<strong>has_key?</strong>(key) &#x21d2; <tt>Boolean</tt>
1862
+
1863
+
1864
+
1865
+ <span class="aliases">Also known as:
1866
+ <span class="names"><span id='include?-instance_method'>include?</span>, <span id='member?-instance_method'>member?</span>, <span id='key?-instance_method'>key?</span></span>
1867
+ </span>
1868
+
1869
+
1870
+
1871
+ </h3><div class="docstring">
1872
+ <div class="discussion">
1873
+ <p>Return <code>true</code> if the table contains <code>key</code>; otherwise, return
1874
+ <code>false</code>.</p>
1875
+
1876
+
1877
+ </div>
1878
+ </div>
1879
+ <div class="tags">
1880
+
1881
+ <p class="tag_title">Returns:</p>
1882
+ <ul class="return">
1883
+
1884
+ <li>
1885
+
1886
+
1887
+ <span class='type'>(<tt>Boolean</tt>)</span>
1888
+
1889
+
1890
+
1891
+ </li>
1892
+
1893
+ </ul>
1894
+
1895
+ </div><table class="source_code">
1896
+ <tr>
1897
+ <td>
1898
+ <pre class="lines">
1899
+
1900
+
1901
+ 687
1902
+ 688
1903
+ 689
1904
+ 690
1905
+ 691</pre>
1906
+ </td>
1907
+ <td>
1908
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 687</span>
1909
+
1910
+ <span class='kw'>def</span> <span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1911
+ <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>unless</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>String</span> <span class='op'>||</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>Symbol</span>
1912
+ <span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span> <span class='id identifier rubyid_key'>key</span> <span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='kw'>return</span> <span class='kw'>false</span> <span class='rbrace'>}</span>
1913
+ <span class='kw'>return</span> <span class='kw'>true</span>
1914
+ <span class='kw'>end</span></pre>
1915
+ </td>
1916
+ </tr>
1917
+ </table>
1918
+ </div>
1919
+
1920
+ <div class="method_details ">
1921
+ <h3 class="signature " id="has_value?-instance_method">
1922
+
1923
+ #<strong>has_value?</strong>(val) &#x21d2; <tt>Boolean</tt>
1924
+
1925
+
1926
+
1927
+ <span class="aliases">Also known as:
1928
+ <span class="names"><span id='value?-instance_method'>value?</span></span>
1929
+ </span>
1930
+
1931
+
1932
+
1933
+ </h3><div class="docstring">
1934
+ <div class="discussion">
1935
+ <p>Test if <code>val</code> is one of the values in this table.</p>
1936
+
1937
+ <p>Potentially very slow, especially on large tables.</p>
1938
+
1939
+
1940
+ </div>
1941
+ </div>
1942
+ <div class="tags">
1943
+
1944
+ <p class="tag_title">Returns:</p>
1945
+ <ul class="return">
1946
+
1947
+ <li>
1948
+
1949
+
1950
+ <span class='type'>(<tt>Boolean</tt>)</span>
1951
+
1952
+
1953
+
1954
+ </li>
1955
+
1956
+ </ul>
1957
+
1958
+ </div><table class="source_code">
1959
+ <tr>
1960
+ <td>
1961
+ <pre class="lines">
1962
+
1963
+
1964
+ 856
1965
+ 857
1966
+ 858
1967
+ 859</pre>
1968
+ </td>
1969
+ <td>
1970
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 856</span>
1971
+
1972
+ <span class='kw'>def</span> <span class='id identifier rubyid_has_value?'>has_value?</span><span class='lparen'>(</span><span class='id identifier rubyid_val'>val</span><span class='rparen'>)</span>
1973
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id identifier rubyid_v'>v</span> <span class='op'>==</span> <span class='id identifier rubyid_val'>val</span><span class='rbrace'>}</span>
1974
+ <span class='kw'>return</span> <span class='kw'>false</span>
1975
+ <span class='kw'>end</span></pre>
1976
+ </td>
1977
+ </tr>
1978
+ </table>
1979
+ </div>
1980
+
1981
+ <div class="method_details ">
1982
+ <h3 class="signature " id="invert-instance_method">
1983
+
1984
+ #<strong>invert</strong> &#x21d2; <tt>Object</tt>
1985
+
1986
+
1987
+
1988
+
1989
+
1990
+ </h3><div class="docstring">
1991
+ <div class="discussion">
1992
+ <p>Return a <code>Hash</code> whose keys are the table&#39;s values and whose values
1993
+ are the table&#39;s keys.</p>
1994
+
1995
+ <p><strong>WARNING:</strong> it is possible for tables to be significantly larger
1996
+ than available RAM; in that case, this will likely crash your
1997
+ program.</p>
1998
+
1999
+
2000
+ </div>
2001
+ </div>
2002
+ <div class="tags">
2003
+
2004
+
2005
+ </div><table class="source_code">
2006
+ <tr>
2007
+ <td>
2008
+ <pre class="lines">
2009
+
2010
+
2011
+ 868
2012
+ 869
2013
+ 870
2014
+ 871
2015
+ 872</pre>
2016
+ </td>
2017
+ <td>
2018
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 868</span>
2019
+
2020
+ <span class='kw'>def</span> <span class='id identifier rubyid_invert'>invert</span>
2021
+ <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
2022
+ <span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_result'>result</span><span class='lbracket'>[</span><span class='id identifier rubyid_v'>v</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_k'>k</span><span class='rbrace'>}</span>
2023
+ <span class='kw'>return</span> <span class='id identifier rubyid_result'>result</span>
2024
+ <span class='kw'>end</span></pre>
2025
+ </td>
2026
+ </tr>
2027
+ </table>
2028
+ </div>
2029
+
2030
+ <div class="method_details ">
2031
+ <h3 class="signature " id="keys-instance_method">
2032
+
2033
+ #<strong>keys</strong> &#x21d2; <tt>Object</tt>
2034
+
2035
+
2036
+
2037
+
2038
+
2039
+ </h3><div class="docstring">
2040
+ <div class="discussion">
2041
+ <p>Return an <code>Array</code> of all of the keys in the table.</p>
2042
+
2043
+ <p><strong>WARNING:</strong> since this list is being read from disk, it is possible
2044
+ that the result could exceed available memory.</p>
2045
+
2046
+
2047
+ </div>
2048
+ </div>
2049
+ <div class="tags">
2050
+
2051
+
2052
+ </div><table class="source_code">
2053
+ <tr>
2054
+ <td>
2055
+ <pre class="lines">
2056
+
2057
+
2058
+ 669
2059
+ 670
2060
+ 671
2061
+ 672
2062
+ 673</pre>
2063
+ </td>
2064
+ <td>
2065
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 669</span>
2066
+
2067
+ <span class='kw'>def</span> <span class='id identifier rubyid_keys'>keys</span>
2068
+ <span class='id identifier rubyid_keys'>keys</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
2069
+ <span class='id identifier rubyid_each_key'>each_key</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='op'>|</span> <span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_k'>k</span><span class='rbrace'>}</span>
2070
+ <span class='kw'>return</span> <span class='id identifier rubyid_keys'>keys</span>
2071
+ <span class='kw'>end</span></pre>
2072
+ </td>
2073
+ </tr>
2074
+ </table>
2075
+ </div>
2076
+
2077
+ <div class="method_details ">
2078
+ <h3 class="signature " id="shift-instance_method">
2079
+
2080
+ #<strong>shift</strong> &#x21d2; <tt>Object</tt>
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+ </h3><div class="docstring">
2087
+ <div class="discussion">
2088
+ <p>Remove the first key/value pair from <code>self</code> and return it. &quot;First&quot;
2089
+ is defined by <code>self</code>&#39;s row order, which is the order of insertion
2090
+ as determined by SQLite3.</p>
2091
+
2092
+
2093
+ </div>
2094
+ </div>
2095
+ <div class="tags">
2096
+
2097
+
2098
+ </div><table class="source_code">
2099
+ <tr>
2100
+ <td>
2101
+ <pre class="lines">
2102
+
2103
+
2104
+ 877
2105
+ 878
2106
+ 879
2107
+ 880
2108
+ 881
2109
+ 882
2110
+ 883
2111
+ 884
2112
+ 885
2113
+ 886</pre>
2114
+ </td>
2115
+ <td>
2116
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 877</span>
2117
+
2118
+ <span class='kw'>def</span> <span class='id identifier rubyid_shift'>shift</span>
2119
+ <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span>
2120
+ <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_empty?'>empty?</span>
2121
+
2122
+ <span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
2123
+ <span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
2124
+
2125
+ <span class='kw'>return</span> <span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='rbracket'>]</span>
2126
+ <span class='rbrace'>}</span>
2127
+ <span class='kw'>end</span></pre>
2128
+ </td>
2129
+ </tr>
2130
+ </table>
2131
+ </div>
2132
+
2133
+ <div class="method_details ">
2134
+ <h3 class="signature " id="size-instance_method">
2135
+
2136
+ #<strong>size</strong> &#x21d2; <tt>Object</tt>
2137
+
2138
+
2139
+
2140
+ <span class="aliases">Also known as:
2141
+ <span class="names"><span id='length-instance_method'>length</span></span>
2142
+ </span>
2143
+
2144
+
2145
+
2146
+ </h3><div class="docstring">
2147
+ <div class="discussion">
2148
+ <p>Return the number of entries (key-value pairs) in <code>self</code>.</p>
2149
+
2150
+
2151
+ </div>
2152
+ </div>
2153
+ <div class="tags">
2154
+
2155
+
2156
+ </div><table class="source_code">
2157
+ <tr>
2158
+ <td>
2159
+ <pre class="lines">
2160
+
2161
+
2162
+ 804
2163
+ 805
2164
+ 806
2165
+ 807
2166
+ 808
2167
+ 809</pre>
2168
+ </td>
2169
+ <td>
2170
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 804</span>
2171
+
2172
+ <span class='kw'>def</span> <span class='id identifier rubyid_size'>size</span>
2173
+ <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_sql'>sql</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>select count(*) from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_actual_tbl'>actual_tbl</span><span class='embexpr_end'>}</span><span class='tstring_content'>;</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_row'>row</span><span class='op'>|</span>
2174
+ <span class='kw'>return</span> <span class='id identifier rubyid_row'>row</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
2175
+ <span class='rbrace'>}</span>
2176
+ <span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>count query failed!</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
2177
+ <span class='kw'>end</span></pre>
2178
+ </td>
2179
+ </tr>
2180
+ </table>
2181
+ </div>
2182
+
2183
+ <div class="method_details ">
2184
+ <h3 class="signature " id="to_a-instance_method">
2185
+
2186
+ #<strong>to_a</strong> &#x21d2; <tt>Object</tt>
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+ </h3><div class="docstring">
2193
+ <div class="discussion">
2194
+ <p>Returns an <code>Array</code> of 2-element <code>Array</code> objects each containing a
2195
+ key-value pair from <code>self</code>.</p>
2196
+
2197
+ <p><strong>WARNING:</strong> it is possible for tables to be significantly larger
2198
+ than available RAM; in that case, this will likely crash your
2199
+ program.</p>
2200
+
2201
+
2202
+ </div>
2203
+ </div>
2204
+ <div class="tags">
2205
+
2206
+
2207
+ </div><table class="source_code">
2208
+ <tr>
2209
+ <td>
2210
+ <pre class="lines">
2211
+
2212
+
2213
+ 841
2214
+ 842
2215
+ 843
2216
+ 844
2217
+ 845</pre>
2218
+ </td>
2219
+ <td>
2220
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 841</span>
2221
+
2222
+ <span class='kw'>def</span> <span class='id identifier rubyid_to_a'>to_a</span>
2223
+ <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
2224
+ <span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='rbracket'>]</span> <span class='rbrace'>}</span>
2225
+ <span class='kw'>return</span> <span class='id identifier rubyid_result'>result</span>
2226
+ <span class='kw'>end</span></pre>
2227
+ </td>
2228
+ </tr>
2229
+ </table>
2230
+ </div>
2231
+
2232
+ <div class="method_details ">
2233
+ <h3 class="signature " id="to_hash-instance_method">
2234
+
2235
+ #<strong>to_hash</strong> &#x21d2; <tt>Object</tt>
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+ </h3><div class="docstring">
2242
+ <div class="discussion">
2243
+ <p>Copies the table into a <code>Hash</code> and returns it.</p>
2244
+
2245
+ <p><strong>WARNING:</strong> it is possible for tables to be significantly larger
2246
+ than available RAM; in that case, this will likely crash your
2247
+ program.</p>
2248
+
2249
+
2250
+ </div>
2251
+ </div>
2252
+ <div class="tags">
2253
+
2254
+
2255
+ </div><table class="source_code">
2256
+ <tr>
2257
+ <td>
2258
+ <pre class="lines">
2259
+
2260
+
2261
+ 828
2262
+ 829
2263
+ 830
2264
+ 831
2265
+ 832</pre>
2266
+ </td>
2267
+ <td>
2268
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 828</span>
2269
+
2270
+ <span class='kw'>def</span> <span class='id identifier rubyid_to_hash'>to_hash</span>
2271
+ <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
2272
+ <span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_result'>result</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_v'>v</span><span class='rbrace'>}</span>
2273
+ <span class='kw'>return</span> <span class='id identifier rubyid_result'>result</span>
2274
+ <span class='kw'>end</span></pre>
2275
+ </td>
2276
+ </tr>
2277
+ </table>
2278
+ </div>
2279
+
2280
+ <div class="method_details ">
2281
+ <h3 class="signature " id="to_s-instance_method">
2282
+
2283
+ #<strong>to_s</strong> &#x21d2; <tt>Object</tt>
2284
+
2285
+
2286
+
2287
+ <span class="aliases">Also known as:
2288
+ <span class="names"><span id='inspect-instance_method'>inspect</span></span>
2289
+ </span>
2290
+
2291
+
2292
+
2293
+ </h3><table class="source_code">
2294
+ <tr>
2295
+ <td>
2296
+ <pre class="lines">
2297
+
2298
+
2299
+ 517
2300
+ 518
2301
+ 519
2302
+ 520
2303
+ 521</pre>
2304
+ </td>
2305
+ <td>
2306
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 517</span>
2307
+
2308
+ <span class='kw'>def</span> <span class='id identifier rubyid_to_s'>to_s</span>
2309
+ <span class='id identifier rubyid_openstr'>openstr</span> <span class='op'>=</span> <span class='id identifier rubyid_closed?'>closed?</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>CLOSED</span><span class='tstring_end'>&#39;</span></span> <span class='op'>:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>OPEN</span><span class='tstring_end'>&#39;</span></span>
2310
+ <span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&lt;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'>:0x</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_object_id'>object_id</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='lparen'>(</span><span class='int'>16</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'> file=&#39;</span><span class='embexpr_beg'>#{</span><span class='ivar'>@filename</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
2311
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> tablename=&#39;</span><span class='embexpr_beg'>#{</span><span class='ivar'>@tablename</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39; </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_openstr'>openstr</span><span class='embexpr_end'>}</span><span class='tstring_content'>&gt;</span><span class='tstring_end'>&quot;</span></span>
2312
+ <span class='kw'>end</span></pre>
2313
+ </td>
2314
+ </tr>
2315
+ </table>
2316
+ </div>
2317
+
2318
+ <div class="method_details ">
2319
+ <h3 class="signature " id="transaction-instance_method">
2320
+
2321
+ #<strong>transaction</strong> {|db| ... } &#x21d2; <tt>Object</tt>
2322
+
2323
+
2324
+
2325
+
2326
+
2327
+ </h3><div class="docstring">
2328
+ <div class="discussion">
2329
+ <p>Begins a transaction, evaluates the given block and then ends the
2330
+ transaction. If no error occurred, the transaction is committed;
2331
+ otherwise, it is rolled back.</p>
2332
+
2333
+ <p>It is safe to call <code>DBM.transaction</code> within another
2334
+ <code>DBM.transaction</code> block&#39;s call chain because <code>DBM</code> will not
2335
+ start a new transaction on a database handle that already has
2336
+ one in progress. (It may be possible to trick <code>DBM</code> into trying
2337
+ via fibers or other flow control trickery; don&#39;t do that.)</p>
2338
+
2339
+ <p>It is also not safe to mix <code>DBM</code> transactions and bare <code>SQLite3</code>
2340
+ transactions.</p>
2341
+
2342
+ <p>Transactions are always executed in <code>:deferred</code> mode.</p>
2343
+
2344
+
2345
+ </div>
2346
+ </div>
2347
+ <div class="tags">
2348
+
2349
+ <p class="tag_title">Yields:</p>
2350
+ <ul class="yield">
2351
+
2352
+ <li>
2353
+
2354
+
2355
+ <span class='type'>(<tt>db</tt>)</span>
2356
+
2357
+
2358
+
2359
+ &mdash;
2360
+ <div class='inline'><p>The block takes a reference to the receiver as an
2361
+ argument.</p>
2362
+ </div>
2363
+
2364
+ </li>
2365
+
2366
+ </ul>
2367
+
2368
+ </div><table class="source_code">
2369
+ <tr>
2370
+ <td>
2371
+ <pre class="lines">
2372
+
2373
+
2374
+ 574
2375
+ 575
2376
+ 576</pre>
2377
+ </td>
2378
+ <td>
2379
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 574</span>
2380
+
2381
+ <span class='kw'>def</span> <span class='id identifier rubyid_transaction'>transaction</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
2382
+ <span class='kw'>return</span> <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='kw'>self</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
2383
+ <span class='kw'>end</span></pre>
2384
+ </td>
2385
+ </tr>
2386
+ </table>
2387
+ </div>
2388
+
2389
+ <div class="method_details ">
2390
+ <h3 class="signature " id="transaction_active?-instance_method">
2391
+
2392
+ #<strong>transaction_active?</strong> &#x21d2; <tt>Boolean</tt>
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+ </h3><div class="docstring">
2399
+ <div class="discussion">
2400
+ <p>Test if there is currently a transaction in progress</p>
2401
+
2402
+
2403
+ </div>
2404
+ </div>
2405
+ <div class="tags">
2406
+
2407
+ <p class="tag_title">Returns:</p>
2408
+ <ul class="return">
2409
+
2410
+ <li>
2411
+
2412
+
2413
+ <span class='type'>(<tt>Boolean</tt>)</span>
2414
+
2415
+
2416
+
2417
+ </li>
2418
+
2419
+ </ul>
2420
+
2421
+ </div><table class="source_code">
2422
+ <tr>
2423
+ <td>
2424
+ <pre class="lines">
2425
+
2426
+
2427
+ 579
2428
+ 580
2429
+ 581</pre>
2430
+ </td>
2431
+ <td>
2432
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 579</span>
2433
+
2434
+ <span class='kw'>def</span> <span class='id identifier rubyid_transaction_active?'>transaction_active?</span>
2435
+ <span class='kw'>return</span> <span class='ivar'>@handle</span><span class='period'>.</span><span class='id identifier rubyid_transaction_active?'>transaction_active?</span>
2436
+ <span class='kw'>end</span></pre>
2437
+ </td>
2438
+ </tr>
2439
+ </table>
2440
+ </div>
2441
+
2442
+ <div class="method_details ">
2443
+ <h3 class="signature " id="update-instance_method">
2444
+
2445
+ #<strong>update</strong>(hash) &#x21d2; <tt>Object</tt>
2446
+
2447
+
2448
+
2449
+
2450
+
2451
+ </h3><div class="docstring">
2452
+ <div class="discussion">
2453
+ <p>Updates the database with multiple values from the specified
2454
+ object. Takes any object which implements the each_pair method,
2455
+ including <code>Hash</code> and <code>DBM</code> objects.</p>
2456
+
2457
+
2458
+ </div>
2459
+ </div>
2460
+ <div class="tags">
2461
+
2462
+
2463
+ </div><table class="source_code">
2464
+ <tr>
2465
+ <td>
2466
+ <pre class="lines">
2467
+
2468
+
2469
+ 778
2470
+ 779
2471
+ 780
2472
+ 781
2473
+ 782</pre>
2474
+ </td>
2475
+ <td>
2476
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 778</span>
2477
+
2478
+ <span class='kw'>def</span> <span class='id identifier rubyid_update'>update</span><span class='lparen'>(</span><span class='id identifier rubyid_hash'>hash</span><span class='rparen'>)</span>
2479
+ <span class='id identifier rubyid_transaction'>transaction</span> <span class='lbrace'>{</span>
2480
+ <span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_v'>v</span> <span class='rbrace'>}</span>
2481
+ <span class='rbrace'>}</span>
2482
+ <span class='kw'>end</span></pre>
2483
+ </td>
2484
+ </tr>
2485
+ </table>
2486
+ </div>
2487
+
2488
+ <div class="method_details ">
2489
+ <h3 class="signature " id="values-instance_method">
2490
+
2491
+ #<strong>values</strong> &#x21d2; <tt>Object</tt>
2492
+
2493
+
2494
+
2495
+
2496
+
2497
+ </h3><div class="docstring">
2498
+ <div class="discussion">
2499
+ <p>Return an array of all values in the table.</p>
2500
+
2501
+ <p><strong>WARNING:</strong> since this list is being read from disk, it is possible
2502
+ that the result could exceed available memory.</p>
2503
+
2504
+
2505
+ </div>
2506
+ </div>
2507
+ <div class="tags">
2508
+
2509
+
2510
+ </div><table class="source_code">
2511
+ <tr>
2512
+ <td>
2513
+ <pre class="lines">
2514
+
2515
+
2516
+ 679
2517
+ 680
2518
+ 681
2519
+ 682
2520
+ 683</pre>
2521
+ </td>
2522
+ <td>
2523
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 679</span>
2524
+
2525
+ <span class='kw'>def</span> <span class='id identifier rubyid_values'>values</span>
2526
+ <span class='id identifier rubyid_values'>values</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
2527
+ <span class='id identifier rubyid_each_value'>each_value</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_val'>val</span><span class='op'>|</span> <span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_val'>val</span> <span class='rbrace'>}</span>
2528
+ <span class='kw'>return</span> <span class='id identifier rubyid_values'>values</span>
2529
+ <span class='kw'>end</span></pre>
2530
+ </td>
2531
+ </tr>
2532
+ </table>
2533
+ </div>
2534
+
2535
+ <div class="method_details ">
2536
+ <h3 class="signature " id="values_at-instance_method">
2537
+
2538
+ #<strong>values_at</strong>(*keys) &#x21d2; <tt>Object</tt>
2539
+
2540
+
2541
+
2542
+
2543
+
2544
+ </h3><div class="docstring">
2545
+ <div class="discussion">
2546
+ <p>Return a new <code>Array</code> containing the values corresponding to the
2547
+ given keys.</p>
2548
+
2549
+
2550
+ </div>
2551
+ </div>
2552
+ <div class="tags">
2553
+
2554
+
2555
+ </div><table class="source_code">
2556
+ <tr>
2557
+ <td>
2558
+ <pre class="lines">
2559
+
2560
+
2561
+ 661
2562
+ 662
2563
+ 663</pre>
2564
+ </td>
2565
+ <td>
2566
+ <pre class="code"><span class="info file"># File 'lib/dbmlite3.rb', line 661</span>
2567
+
2568
+ <span class='kw'>def</span> <span class='id identifier rubyid_values_at'>values_at</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_keys'>keys</span><span class='rparen'>)</span>
2569
+ <span class='kw'>return</span> <span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='op'>|</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span><span class='rbrace'>}</span>
2570
+ <span class='kw'>end</span></pre>
2571
+ </td>
2572
+ </tr>
2573
+ </table>
2574
+ </div>
2575
+
2576
+ </div>
2577
+
2578
+ </div>
2579
+
2580
+ <div id="footer">
2581
+ Generated on Fri Feb 25 14:42:43 2022 by
2582
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2583
+ 0.9.25 (ruby-2.7.0).
2584
+ </div>
2585
+
2586
+ </div>
2587
+ </body>
2588
+ </html>