sqlite3 1.7.3 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +292 -0
- data/CONTRIBUTING.md +33 -7
- data/FAQ.md +43 -77
- data/INSTALLATION.md +14 -6
- data/LICENSE +18 -22
- data/README.md +97 -9
- data/dependencies.yml +10 -11
- data/ext/sqlite3/aggregator.c +142 -145
- data/ext/sqlite3/aggregator.h +2 -4
- data/ext/sqlite3/backup.c +74 -65
- data/ext/sqlite3/backup.h +2 -2
- data/ext/sqlite3/database.c +621 -493
- data/ext/sqlite3/database.h +13 -4
- data/ext/sqlite3/exception.c +116 -92
- data/ext/sqlite3/exception.h +5 -1
- data/ext/sqlite3/extconf.rb +33 -24
- data/ext/sqlite3/sqlite3.c +176 -115
- data/ext/sqlite3/sqlite3_ruby.h +2 -2
- data/ext/sqlite3/statement.c +553 -300
- data/ext/sqlite3/statement.h +4 -3
- data/ext/sqlite3/timespec.h +20 -0
- data/lib/sqlite3/constants.rb +195 -47
- data/lib/sqlite3/database.rb +223 -187
- data/lib/sqlite3/errors.rb +54 -1
- data/lib/sqlite3/fork_safety.rb +66 -0
- data/lib/sqlite3/pragmas.rb +140 -136
- data/lib/sqlite3/resultset.rb +14 -97
- data/lib/sqlite3/statement.rb +58 -13
- data/lib/sqlite3/value.rb +17 -20
- data/lib/sqlite3/version.rb +2 -21
- data/lib/sqlite3/version_info.rb +17 -0
- data/lib/sqlite3.rb +8 -4
- data/ports/archives/sqlite-autoconf-3470200.tar.gz +0 -0
- metadata +9 -37
- data/API_CHANGES.md +0 -49
- data/ChangeLog.cvs +0 -88
- data/Gemfile +0 -10
- data/LICENSE-DEPENDENCIES +0 -20
- data/lib/sqlite3/translator.rb +0 -117
- data/ports/archives/sqlite-autoconf-3450200.tar.gz +0 -0
- data/test/helper.rb +0 -27
- data/test/test_backup.rb +0 -33
- data/test/test_collation.rb +0 -82
- data/test/test_database.rb +0 -668
- data/test/test_database_flags.rb +0 -95
- data/test/test_database_readonly.rb +0 -36
- data/test/test_database_readwrite.rb +0 -41
- data/test/test_deprecated.rb +0 -49
- data/test/test_encoding.rb +0 -165
- data/test/test_integration.rb +0 -507
- data/test/test_integration_aggregate.rb +0 -336
- data/test/test_integration_open_close.rb +0 -30
- data/test/test_integration_pending.rb +0 -115
- data/test/test_integration_resultset.rb +0 -142
- data/test/test_integration_statement.rb +0 -194
- data/test/test_pragmas.rb +0 -22
- data/test/test_result_set.rb +0 -47
- data/test/test_sqlite3.rb +0 -30
- data/test/test_statement.rb +0 -290
- data/test/test_statement_execute.rb +0 -39
data/lib/sqlite3/pragmas.rb
CHANGED
@@ -1,59 +1,55 @@
|
|
1
|
-
require
|
1
|
+
require "sqlite3/errors"
|
2
2
|
|
3
3
|
module SQLite3
|
4
|
-
|
5
4
|
# This module is intended for inclusion solely by the Database class. It
|
6
5
|
# defines convenience methods for the various pragmas supported by SQLite3.
|
7
6
|
#
|
8
7
|
# For a detailed description of these pragmas, see the SQLite3 documentation
|
9
8
|
# at http://sqlite.org/pragma.html.
|
10
9
|
module Pragmas
|
11
|
-
|
12
10
|
# Returns +true+ or +false+ depending on the value of the named pragma.
|
13
|
-
def get_boolean_pragma(
|
14
|
-
get_first_value(
|
11
|
+
def get_boolean_pragma(name)
|
12
|
+
get_first_value("PRAGMA #{name}") != 0
|
15
13
|
end
|
16
14
|
|
17
15
|
# Sets the given pragma to the given boolean value. The value itself
|
18
16
|
# may be +true+ or +false+, or any other commonly used string or
|
19
17
|
# integer that represents truth.
|
20
|
-
def set_boolean_pragma(
|
18
|
+
def set_boolean_pragma(name, mode)
|
21
19
|
case mode
|
22
20
|
when String
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
21
|
+
case mode.downcase
|
22
|
+
when "on", "yes", "true", "y", "t" then mode = "'ON'"
|
23
|
+
when "off", "no", "false", "n", "f" then mode = "'OFF'"
|
24
|
+
else
|
25
|
+
raise SQLite3::Exception, "unrecognized pragma parameter #{mode.inspect}"
|
26
|
+
end
|
30
27
|
when true, 1
|
31
|
-
|
28
|
+
mode = "ON"
|
32
29
|
when false, 0, nil
|
33
|
-
|
30
|
+
mode = "OFF"
|
34
31
|
else
|
35
|
-
|
36
|
-
"unrecognized pragma parameter #{mode.inspect}"
|
32
|
+
raise SQLite3::Exception, "unrecognized pragma parameter #{mode.inspect}"
|
37
33
|
end
|
38
34
|
|
39
|
-
execute(
|
35
|
+
execute("PRAGMA #{name}=#{mode}")
|
40
36
|
end
|
41
37
|
|
42
38
|
# Requests the given pragma (and parameters), and if the block is given,
|
43
39
|
# each row of the result set will be yielded to it. Otherwise, the results
|
44
40
|
# are returned as an array.
|
45
|
-
def get_query_pragma(
|
41
|
+
def get_query_pragma(name, *params, &block) # :yields: row
|
46
42
|
if params.empty?
|
47
|
-
execute(
|
43
|
+
execute("PRAGMA #{name}", &block)
|
48
44
|
else
|
49
45
|
args = "'" + params.join("','") + "'"
|
50
|
-
execute(
|
46
|
+
execute("PRAGMA #{name}( #{args} )", &block)
|
51
47
|
end
|
52
48
|
end
|
53
49
|
|
54
50
|
# Return the value of the given pragma.
|
55
|
-
def get_enum_pragma(
|
56
|
-
get_first_value(
|
51
|
+
def get_enum_pragma(name)
|
52
|
+
get_first_value("PRAGMA #{name}")
|
57
53
|
end
|
58
54
|
|
59
55
|
# Set the value of the given pragma to +mode+. The +mode+ parameter must
|
@@ -61,51 +57,52 @@ module SQLite3
|
|
61
57
|
# the array is another array comprised of elements in the enumeration that
|
62
58
|
# have duplicate values. See #synchronous, #default_synchronous,
|
63
59
|
# #temp_store, and #default_temp_store for usage examples.
|
64
|
-
def set_enum_pragma(
|
60
|
+
def set_enum_pragma(name, mode, enums)
|
65
61
|
match = enums.find { |p| p.find { |i| i.to_s.downcase == mode.to_s.downcase } }
|
66
|
-
|
67
|
-
"unrecognized #{name} #{mode.inspect}"
|
68
|
-
|
62
|
+
unless match
|
63
|
+
raise SQLite3::Exception, "unrecognized #{name} #{mode.inspect}"
|
64
|
+
end
|
65
|
+
execute("PRAGMA #{name}='#{match.first.upcase}'")
|
69
66
|
end
|
70
67
|
|
71
68
|
# Returns the value of the given pragma as an integer.
|
72
|
-
def get_int_pragma(
|
73
|
-
get_first_value(
|
69
|
+
def get_int_pragma(name)
|
70
|
+
get_first_value("PRAGMA #{name}").to_i
|
74
71
|
end
|
75
72
|
|
76
73
|
# Set the value of the given pragma to the integer value of the +value+
|
77
74
|
# parameter.
|
78
|
-
def set_int_pragma(
|
79
|
-
execute(
|
75
|
+
def set_int_pragma(name, value)
|
76
|
+
execute("PRAGMA #{name}=#{value.to_i}")
|
80
77
|
end
|
81
78
|
|
82
79
|
# The enumeration of valid synchronous modes.
|
83
|
-
SYNCHRONOUS_MODES = [
|
80
|
+
SYNCHRONOUS_MODES = [["full", 2], ["normal", 1], ["off", 0]]
|
84
81
|
|
85
82
|
# The enumeration of valid temp store modes.
|
86
|
-
TEMP_STORE_MODES
|
83
|
+
TEMP_STORE_MODES = [["default", 0], ["file", 1], ["memory", 2]]
|
87
84
|
|
88
85
|
# The enumeration of valid auto vacuum modes.
|
89
|
-
AUTO_VACUUM_MODES
|
86
|
+
AUTO_VACUUM_MODES = [["none", 0], ["full", 1], ["incremental", 2]]
|
90
87
|
|
91
88
|
# The list of valid journaling modes.
|
92
|
-
JOURNAL_MODES
|
93
|
-
|
89
|
+
JOURNAL_MODES = [["delete"], ["truncate"], ["persist"], ["memory"],
|
90
|
+
["wal"], ["off"]]
|
94
91
|
|
95
92
|
# The list of valid locking modes.
|
96
|
-
LOCKING_MODES
|
93
|
+
LOCKING_MODES = [["normal"], ["exclusive"]]
|
97
94
|
|
98
95
|
# The list of valid encodings.
|
99
|
-
ENCODINGS = [
|
96
|
+
ENCODINGS = [["utf-8"], ["utf-16"], ["utf-16le"], ["utf-16be"]]
|
100
97
|
|
101
98
|
# The list of valid WAL checkpoints.
|
102
|
-
WAL_CHECKPOINTS = [
|
99
|
+
WAL_CHECKPOINTS = [["passive"], ["full"], ["restart"], ["truncate"]]
|
103
100
|
|
104
101
|
def application_id
|
105
102
|
get_int_pragma "application_id"
|
106
103
|
end
|
107
104
|
|
108
|
-
def application_id=(
|
105
|
+
def application_id=(integer)
|
109
106
|
set_int_pragma "application_id", integer
|
110
107
|
end
|
111
108
|
|
@@ -113,7 +110,7 @@ module SQLite3
|
|
113
110
|
get_enum_pragma "auto_vacuum"
|
114
111
|
end
|
115
112
|
|
116
|
-
def auto_vacuum=(
|
113
|
+
def auto_vacuum=(mode)
|
117
114
|
set_enum_pragma "auto_vacuum", mode, AUTO_VACUUM_MODES
|
118
115
|
end
|
119
116
|
|
@@ -121,7 +118,7 @@ module SQLite3
|
|
121
118
|
get_boolean_pragma "automatic_index"
|
122
119
|
end
|
123
120
|
|
124
|
-
def automatic_index=(
|
121
|
+
def automatic_index=(mode)
|
125
122
|
set_boolean_pragma "automatic_index", mode
|
126
123
|
end
|
127
124
|
|
@@ -129,7 +126,7 @@ module SQLite3
|
|
129
126
|
get_int_pragma "busy_timeout"
|
130
127
|
end
|
131
128
|
|
132
|
-
def busy_timeout=(
|
129
|
+
def busy_timeout=(milliseconds)
|
133
130
|
set_int_pragma "busy_timeout", milliseconds
|
134
131
|
end
|
135
132
|
|
@@ -137,7 +134,7 @@ module SQLite3
|
|
137
134
|
get_int_pragma "cache_size"
|
138
135
|
end
|
139
136
|
|
140
|
-
def cache_size=(
|
137
|
+
def cache_size=(size)
|
141
138
|
set_int_pragma "cache_size", size
|
142
139
|
end
|
143
140
|
|
@@ -145,11 +142,11 @@ module SQLite3
|
|
145
142
|
get_boolean_pragma "cache_spill"
|
146
143
|
end
|
147
144
|
|
148
|
-
def cache_spill=(
|
145
|
+
def cache_spill=(mode)
|
149
146
|
set_boolean_pragma "cache_spill", mode
|
150
147
|
end
|
151
148
|
|
152
|
-
def case_sensitive_like=(
|
149
|
+
def case_sensitive_like=(mode)
|
153
150
|
set_boolean_pragma "case_sensitive_like", mode
|
154
151
|
end
|
155
152
|
|
@@ -157,7 +154,7 @@ module SQLite3
|
|
157
154
|
get_boolean_pragma "cell_size_check"
|
158
155
|
end
|
159
156
|
|
160
|
-
def cell_size_check=(
|
157
|
+
def cell_size_check=(mode)
|
161
158
|
set_boolean_pragma "cell_size_check", mode
|
162
159
|
end
|
163
160
|
|
@@ -165,15 +162,15 @@ module SQLite3
|
|
165
162
|
get_boolean_pragma "checkpoint_fullfsync"
|
166
163
|
end
|
167
164
|
|
168
|
-
def checkpoint_fullfsync=(
|
165
|
+
def checkpoint_fullfsync=(mode)
|
169
166
|
set_boolean_pragma "checkpoint_fullfsync", mode
|
170
167
|
end
|
171
168
|
|
172
|
-
def collation_list(
|
169
|
+
def collation_list(&block) # :yields: row
|
173
170
|
get_query_pragma "collation_list", &block
|
174
171
|
end
|
175
172
|
|
176
|
-
def compile_options(
|
173
|
+
def compile_options(&block) # :yields: row
|
177
174
|
get_query_pragma "compile_options", &block
|
178
175
|
end
|
179
176
|
|
@@ -181,7 +178,7 @@ module SQLite3
|
|
181
178
|
get_boolean_pragma "count_changes"
|
182
179
|
end
|
183
180
|
|
184
|
-
def count_changes=(
|
181
|
+
def count_changes=(mode)
|
185
182
|
set_boolean_pragma "count_changes", mode
|
186
183
|
end
|
187
184
|
|
@@ -189,7 +186,7 @@ module SQLite3
|
|
189
186
|
get_int_pragma "data_version"
|
190
187
|
end
|
191
188
|
|
192
|
-
def database_list(
|
189
|
+
def database_list(&block) # :yields: row
|
193
190
|
get_query_pragma "database_list", &block
|
194
191
|
end
|
195
192
|
|
@@ -197,7 +194,7 @@ module SQLite3
|
|
197
194
|
get_int_pragma "default_cache_size"
|
198
195
|
end
|
199
196
|
|
200
|
-
def default_cache_size=(
|
197
|
+
def default_cache_size=(size)
|
201
198
|
set_int_pragma "default_cache_size", size
|
202
199
|
end
|
203
200
|
|
@@ -205,7 +202,7 @@ module SQLite3
|
|
205
202
|
get_enum_pragma "default_synchronous"
|
206
203
|
end
|
207
204
|
|
208
|
-
def default_synchronous=(
|
205
|
+
def default_synchronous=(mode)
|
209
206
|
set_enum_pragma "default_synchronous", mode, SYNCHRONOUS_MODES
|
210
207
|
end
|
211
208
|
|
@@ -213,7 +210,7 @@ module SQLite3
|
|
213
210
|
get_enum_pragma "default_temp_store"
|
214
211
|
end
|
215
212
|
|
216
|
-
def default_temp_store=(
|
213
|
+
def default_temp_store=(mode)
|
217
214
|
set_enum_pragma "default_temp_store", mode, TEMP_STORE_MODES
|
218
215
|
end
|
219
216
|
|
@@ -221,7 +218,7 @@ module SQLite3
|
|
221
218
|
get_boolean_pragma "defer_foreign_keys"
|
222
219
|
end
|
223
220
|
|
224
|
-
def defer_foreign_keys=(
|
221
|
+
def defer_foreign_keys=(mode)
|
225
222
|
set_boolean_pragma "defer_foreign_keys", mode
|
226
223
|
end
|
227
224
|
|
@@ -229,15 +226,15 @@ module SQLite3
|
|
229
226
|
get_enum_pragma "encoding"
|
230
227
|
end
|
231
228
|
|
232
|
-
def encoding=(
|
229
|
+
def encoding=(mode)
|
233
230
|
set_enum_pragma "encoding", mode, ENCODINGS
|
234
231
|
end
|
235
232
|
|
236
|
-
def foreign_key_check(
|
233
|
+
def foreign_key_check(*table, &block) # :yields: row
|
237
234
|
get_query_pragma "foreign_key_check", *table, &block
|
238
235
|
end
|
239
236
|
|
240
|
-
def foreign_key_list(
|
237
|
+
def foreign_key_list(table, &block) # :yields: row
|
241
238
|
get_query_pragma "foreign_key_list", table, &block
|
242
239
|
end
|
243
240
|
|
@@ -245,7 +242,7 @@ module SQLite3
|
|
245
242
|
get_boolean_pragma "foreign_keys"
|
246
243
|
end
|
247
244
|
|
248
|
-
def foreign_keys=(
|
245
|
+
def foreign_keys=(mode)
|
249
246
|
set_boolean_pragma "foreign_keys", mode
|
250
247
|
end
|
251
248
|
|
@@ -257,7 +254,7 @@ module SQLite3
|
|
257
254
|
get_boolean_pragma "full_column_names"
|
258
255
|
end
|
259
256
|
|
260
|
-
def full_column_names=(
|
257
|
+
def full_column_names=(mode)
|
261
258
|
set_boolean_pragma "full_column_names", mode
|
262
259
|
end
|
263
260
|
|
@@ -265,31 +262,31 @@ module SQLite3
|
|
265
262
|
get_boolean_pragma "fullfsync"
|
266
263
|
end
|
267
264
|
|
268
|
-
def fullfsync=(
|
265
|
+
def fullfsync=(mode)
|
269
266
|
set_boolean_pragma "fullfsync", mode
|
270
267
|
end
|
271
268
|
|
272
|
-
def ignore_check_constraints=(
|
269
|
+
def ignore_check_constraints=(mode)
|
273
270
|
set_boolean_pragma "ignore_check_constraints", mode
|
274
271
|
end
|
275
272
|
|
276
|
-
def incremental_vacuum(
|
273
|
+
def incremental_vacuum(pages, &block) # :yields: row
|
277
274
|
get_query_pragma "incremental_vacuum", pages, &block
|
278
275
|
end
|
279
276
|
|
280
|
-
def index_info(
|
277
|
+
def index_info(index, &block) # :yields: row
|
281
278
|
get_query_pragma "index_info", index, &block
|
282
279
|
end
|
283
280
|
|
284
|
-
def index_list(
|
281
|
+
def index_list(table, &block) # :yields: row
|
285
282
|
get_query_pragma "index_list", table, &block
|
286
283
|
end
|
287
284
|
|
288
|
-
def index_xinfo(
|
285
|
+
def index_xinfo(index, &block) # :yields: row
|
289
286
|
get_query_pragma "index_xinfo", index, &block
|
290
287
|
end
|
291
288
|
|
292
|
-
def integrity_check(
|
289
|
+
def integrity_check(*num_errors, &block) # :yields: row
|
293
290
|
get_query_pragma "integrity_check", *num_errors, &block
|
294
291
|
end
|
295
292
|
|
@@ -297,7 +294,7 @@ module SQLite3
|
|
297
294
|
get_enum_pragma "journal_mode"
|
298
295
|
end
|
299
296
|
|
300
|
-
def journal_mode=(
|
297
|
+
def journal_mode=(mode)
|
301
298
|
set_enum_pragma "journal_mode", mode, JOURNAL_MODES
|
302
299
|
end
|
303
300
|
|
@@ -305,7 +302,7 @@ module SQLite3
|
|
305
302
|
get_int_pragma "journal_size_limit"
|
306
303
|
end
|
307
304
|
|
308
|
-
def journal_size_limit=(
|
305
|
+
def journal_size_limit=(size)
|
309
306
|
set_int_pragma "journal_size_limit", size
|
310
307
|
end
|
311
308
|
|
@@ -313,7 +310,7 @@ module SQLite3
|
|
313
310
|
get_boolean_pragma "legacy_file_format"
|
314
311
|
end
|
315
312
|
|
316
|
-
def legacy_file_format=(
|
313
|
+
def legacy_file_format=(mode)
|
317
314
|
set_boolean_pragma "legacy_file_format", mode
|
318
315
|
end
|
319
316
|
|
@@ -321,7 +318,7 @@ module SQLite3
|
|
321
318
|
get_enum_pragma "locking_mode"
|
322
319
|
end
|
323
320
|
|
324
|
-
def locking_mode=(
|
321
|
+
def locking_mode=(mode)
|
325
322
|
set_enum_pragma "locking_mode", mode, LOCKING_MODES
|
326
323
|
end
|
327
324
|
|
@@ -329,7 +326,7 @@ module SQLite3
|
|
329
326
|
get_int_pragma "max_page_count"
|
330
327
|
end
|
331
328
|
|
332
|
-
def max_page_count=(
|
329
|
+
def max_page_count=(size)
|
333
330
|
set_int_pragma "max_page_count", size
|
334
331
|
end
|
335
332
|
|
@@ -337,10 +334,24 @@ module SQLite3
|
|
337
334
|
get_int_pragma "mmap_size"
|
338
335
|
end
|
339
336
|
|
340
|
-
def mmap_size=(
|
337
|
+
def mmap_size=(size)
|
341
338
|
set_int_pragma "mmap_size", size
|
342
339
|
end
|
343
340
|
|
341
|
+
# Attempt to optimize the database.
|
342
|
+
#
|
343
|
+
# To customize the optimization options, pass +bitmask+ with a combination
|
344
|
+
# of the Constants::Optimize masks.
|
345
|
+
#
|
346
|
+
# See https://www.sqlite.org/pragma.html#pragma_optimize for more information.
|
347
|
+
def optimize(bitmask = nil)
|
348
|
+
if bitmask
|
349
|
+
set_int_pragma "optimize", bitmask
|
350
|
+
else
|
351
|
+
execute("PRAGMA optimize")
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
344
355
|
def page_count
|
345
356
|
get_int_pragma "page_count"
|
346
357
|
end
|
@@ -349,11 +360,11 @@ module SQLite3
|
|
349
360
|
get_int_pragma "page_size"
|
350
361
|
end
|
351
362
|
|
352
|
-
def page_size=(
|
363
|
+
def page_size=(size)
|
353
364
|
set_int_pragma "page_size", size
|
354
365
|
end
|
355
366
|
|
356
|
-
def parser_trace=(
|
367
|
+
def parser_trace=(mode)
|
357
368
|
set_boolean_pragma "parser_trace", mode
|
358
369
|
end
|
359
370
|
|
@@ -361,11 +372,11 @@ module SQLite3
|
|
361
372
|
get_boolean_pragma "query_only"
|
362
373
|
end
|
363
374
|
|
364
|
-
def query_only=(
|
375
|
+
def query_only=(mode)
|
365
376
|
set_boolean_pragma "query_only", mode
|
366
377
|
end
|
367
378
|
|
368
|
-
def quick_check(
|
379
|
+
def quick_check(*num_errors, &block) # :yields: row
|
369
380
|
get_query_pragma "quick_check", *num_errors, &block
|
370
381
|
end
|
371
382
|
|
@@ -373,7 +384,7 @@ module SQLite3
|
|
373
384
|
get_boolean_pragma "read_uncommitted"
|
374
385
|
end
|
375
386
|
|
376
|
-
def read_uncommitted=(
|
387
|
+
def read_uncommitted=(mode)
|
377
388
|
set_boolean_pragma "read_uncommitted", mode
|
378
389
|
end
|
379
390
|
|
@@ -381,7 +392,7 @@ module SQLite3
|
|
381
392
|
get_boolean_pragma "recursive_triggers"
|
382
393
|
end
|
383
394
|
|
384
|
-
def recursive_triggers=(
|
395
|
+
def recursive_triggers=(mode)
|
385
396
|
set_boolean_pragma "recursive_triggers", mode
|
386
397
|
end
|
387
398
|
|
@@ -389,7 +400,7 @@ module SQLite3
|
|
389
400
|
get_boolean_pragma "reverse_unordered_selects"
|
390
401
|
end
|
391
402
|
|
392
|
-
def reverse_unordered_selects=(
|
403
|
+
def reverse_unordered_selects=(mode)
|
393
404
|
set_boolean_pragma "reverse_unordered_selects", mode
|
394
405
|
end
|
395
406
|
|
@@ -397,7 +408,7 @@ module SQLite3
|
|
397
408
|
get_int_pragma "schema_cookie"
|
398
409
|
end
|
399
410
|
|
400
|
-
def schema_cookie=(
|
411
|
+
def schema_cookie=(cookie)
|
401
412
|
set_int_pragma "schema_cookie", cookie
|
402
413
|
end
|
403
414
|
|
@@ -405,7 +416,7 @@ module SQLite3
|
|
405
416
|
get_int_pragma "schema_version"
|
406
417
|
end
|
407
418
|
|
408
|
-
def schema_version=(
|
419
|
+
def schema_version=(version)
|
409
420
|
set_int_pragma "schema_version", version
|
410
421
|
end
|
411
422
|
|
@@ -413,7 +424,7 @@ module SQLite3
|
|
413
424
|
get_boolean_pragma "secure_delete"
|
414
425
|
end
|
415
426
|
|
416
|
-
def secure_delete=(
|
427
|
+
def secure_delete=(mode)
|
417
428
|
set_boolean_pragma "secure_delete", mode
|
418
429
|
end
|
419
430
|
|
@@ -421,23 +432,23 @@ module SQLite3
|
|
421
432
|
get_boolean_pragma "short_column_names"
|
422
433
|
end
|
423
434
|
|
424
|
-
def short_column_names=(
|
435
|
+
def short_column_names=(mode)
|
425
436
|
set_boolean_pragma "short_column_names", mode
|
426
437
|
end
|
427
438
|
|
428
439
|
def shrink_memory
|
429
|
-
execute(
|
440
|
+
execute("PRAGMA shrink_memory")
|
430
441
|
end
|
431
442
|
|
432
443
|
def soft_heap_limit
|
433
444
|
get_int_pragma "soft_heap_limit"
|
434
445
|
end
|
435
446
|
|
436
|
-
def soft_heap_limit=(
|
447
|
+
def soft_heap_limit=(mode)
|
437
448
|
set_int_pragma "soft_heap_limit", mode
|
438
449
|
end
|
439
450
|
|
440
|
-
def stats(
|
451
|
+
def stats(&block) # :yields: row
|
441
452
|
get_query_pragma "stats", &block
|
442
453
|
end
|
443
454
|
|
@@ -445,7 +456,7 @@ module SQLite3
|
|
445
456
|
get_enum_pragma "synchronous"
|
446
457
|
end
|
447
458
|
|
448
|
-
def synchronous=(
|
459
|
+
def synchronous=(mode)
|
449
460
|
set_enum_pragma "synchronous", mode, SYNCHRONOUS_MODES
|
450
461
|
end
|
451
462
|
|
@@ -453,7 +464,7 @@ module SQLite3
|
|
453
464
|
get_enum_pragma "temp_store"
|
454
465
|
end
|
455
466
|
|
456
|
-
def temp_store=(
|
467
|
+
def temp_store=(mode)
|
457
468
|
set_enum_pragma "temp_store", mode, TEMP_STORE_MODES
|
458
469
|
end
|
459
470
|
|
@@ -461,7 +472,7 @@ module SQLite3
|
|
461
472
|
get_int_pragma "threads"
|
462
473
|
end
|
463
474
|
|
464
|
-
def threads=(
|
475
|
+
def threads=(count)
|
465
476
|
set_int_pragma "threads", count
|
466
477
|
end
|
467
478
|
|
@@ -469,7 +480,7 @@ module SQLite3
|
|
469
480
|
get_int_pragma "user_cookie"
|
470
481
|
end
|
471
482
|
|
472
|
-
def user_cookie=(
|
483
|
+
def user_cookie=(cookie)
|
473
484
|
set_int_pragma "user_cookie", cookie
|
474
485
|
end
|
475
486
|
|
@@ -477,19 +488,19 @@ module SQLite3
|
|
477
488
|
get_int_pragma "user_version"
|
478
489
|
end
|
479
490
|
|
480
|
-
def user_version=(
|
491
|
+
def user_version=(version)
|
481
492
|
set_int_pragma "user_version", version
|
482
493
|
end
|
483
494
|
|
484
|
-
def vdbe_addoptrace=(
|
495
|
+
def vdbe_addoptrace=(mode)
|
485
496
|
set_boolean_pragma "vdbe_addoptrace", mode
|
486
497
|
end
|
487
498
|
|
488
|
-
def vdbe_debug=(
|
499
|
+
def vdbe_debug=(mode)
|
489
500
|
set_boolean_pragma "vdbe_debug", mode
|
490
501
|
end
|
491
502
|
|
492
|
-
def vdbe_listing=(
|
503
|
+
def vdbe_listing=(mode)
|
493
504
|
set_boolean_pragma "vdbe_listing", mode
|
494
505
|
end
|
495
506
|
|
@@ -497,7 +508,7 @@ module SQLite3
|
|
497
508
|
get_boolean_pragma "vdbe_trace"
|
498
509
|
end
|
499
510
|
|
500
|
-
def vdbe_trace=(
|
511
|
+
def vdbe_trace=(mode)
|
501
512
|
set_boolean_pragma "vdbe_trace", mode
|
502
513
|
end
|
503
514
|
|
@@ -505,7 +516,7 @@ module SQLite3
|
|
505
516
|
get_int_pragma "wal_autocheckpoint"
|
506
517
|
end
|
507
518
|
|
508
|
-
def wal_autocheckpoint=(
|
519
|
+
def wal_autocheckpoint=(mode)
|
509
520
|
set_int_pragma "wal_autocheckpoint", mode
|
510
521
|
end
|
511
522
|
|
@@ -513,11 +524,11 @@ module SQLite3
|
|
513
524
|
get_enum_pragma "wal_checkpoint"
|
514
525
|
end
|
515
526
|
|
516
|
-
def wal_checkpoint=(
|
527
|
+
def wal_checkpoint=(mode)
|
517
528
|
set_enum_pragma "wal_checkpoint", mode, WAL_CHECKPOINTS
|
518
529
|
end
|
519
530
|
|
520
|
-
def writable_schema=(
|
531
|
+
def writable_schema=(mode)
|
521
532
|
set_boolean_pragma "writable_schema", mode
|
522
533
|
end
|
523
534
|
|
@@ -525,7 +536,7 @@ module SQLite3
|
|
525
536
|
# Returns information about +table+. Yields each row of table information
|
526
537
|
# if a block is provided.
|
527
538
|
def table_info table
|
528
|
-
stmt
|
539
|
+
stmt = prepare "PRAGMA table_info(#{table})"
|
529
540
|
columns = stmt.columns
|
530
541
|
|
531
542
|
needs_tweak_default =
|
@@ -533,21 +544,15 @@ module SQLite3
|
|
533
544
|
|
534
545
|
result = [] unless block_given?
|
535
546
|
stmt.each do |row|
|
536
|
-
new_row =
|
537
|
-
|
538
|
-
# FIXME: This should be removed but is required for older versions
|
539
|
-
# of rails
|
540
|
-
if(Object.const_defined?(:ActiveRecord))
|
541
|
-
new_row['notnull'] = new_row['notnull'].to_s
|
542
|
-
end
|
547
|
+
new_row = columns.zip(row).to_h
|
543
548
|
|
544
549
|
tweak_default(new_row) if needs_tweak_default
|
545
550
|
|
546
551
|
# Ensure the type value is downcased. On Mac and Windows
|
547
552
|
# platforms this value is now being returned as all upper
|
548
553
|
# case.
|
549
|
-
if new_row[
|
550
|
-
new_row[
|
554
|
+
if new_row["type"]
|
555
|
+
new_row["type"] = new_row["type"].downcase
|
551
556
|
end
|
552
557
|
|
553
558
|
if block_given?
|
@@ -563,33 +568,32 @@ module SQLite3
|
|
563
568
|
|
564
569
|
private
|
565
570
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
end
|
577
|
-
return 0
|
571
|
+
# Compares two version strings
|
572
|
+
def version_compare(v1, v2)
|
573
|
+
v1 = v1.split(".").map { |i| i.to_i }
|
574
|
+
v2 = v2.split(".").map { |i| i.to_i }
|
575
|
+
parts = [v1.length, v2.length].max
|
576
|
+
v1.push 0 while v1.length < parts
|
577
|
+
v2.push 0 while v2.length < parts
|
578
|
+
v1.zip(v2).each do |a, b|
|
579
|
+
return -1 if a < b
|
580
|
+
return 1 if a > b
|
578
581
|
end
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
582
|
+
0
|
583
|
+
end
|
584
|
+
|
585
|
+
# Since SQLite 3.3.8, the table_info pragma has returned the default
|
586
|
+
# value of the row as a quoted SQL value. This method essentially
|
587
|
+
# unquotes those values.
|
588
|
+
def tweak_default(hash)
|
589
|
+
case hash["dflt_value"]
|
590
|
+
when /^null$/i
|
591
|
+
hash["dflt_value"] = nil
|
592
|
+
when /^'(.*)'$/m
|
593
|
+
hash["dflt_value"] = $1.gsub("''", "'")
|
594
|
+
when /^"(.*)"$/m
|
595
|
+
hash["dflt_value"] = $1.gsub('""', '"')
|
592
596
|
end
|
597
|
+
end
|
593
598
|
end
|
594
|
-
|
595
599
|
end
|