Skip to content

Commit fde8c22

Browse files
committed
Add parameter checking for string value pragmas
1 parent 9ffb27d commit fde8c22

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

lib/sqlite3/pragmas.rb

+11-4
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ def encoding
269269
end
270270

271271
def encoding=(mode)
272-
set_enum_pragma "encoding", mode, ENCODINGS
272+
set_string_pragma "encoding", mode, ENCODINGS
273273
end
274274

275275
def foreign_key_check(*table, &block) # :yields: row
@@ -337,7 +337,7 @@ def journal_mode
337337
end
338338

339339
def journal_mode=(mode)
340-
set_enum_pragma "journal_mode", mode, JOURNAL_MODES
340+
set_string_pragma "journal_mode", mode, JOURNAL_MODES
341341
end
342342

343343
def journal_size_limit
@@ -361,7 +361,7 @@ def locking_mode
361361
end
362362

363363
def locking_mode=(mode)
364-
set_enum_pragma "locking_mode", mode, LOCKING_MODES
364+
set_string_pragma "locking_mode", mode, LOCKING_MODES
365365
end
366366

367367
def max_page_count
@@ -567,7 +567,7 @@ def wal_checkpoint
567567
end
568568

569569
def wal_checkpoint=(mode)
570-
set_enum_pragma "wal_checkpoint", mode, WAL_CHECKPOINTS
570+
set_string_pragma "wal_checkpoint", mode, WAL_CHECKPOINTS
571571
end
572572

573573
def writable_schema=(mode)
@@ -610,6 +610,13 @@ def table_info table
610610

611611
private
612612

613+
def set_string_pragma(pragma_name, value, valid_values)
614+
valid_values.fetch(value.to_s.downcase) {
615+
raise SQLite3::Exception, "unrecognized #{pragma_name} #{value.inspect}"
616+
}
617+
set_enum_pragma(pragma_name, value, valid_values)
618+
end
619+
613620
# Compares two version strings
614621
def version_compare(v1, v2)
615622
v1 = v1.split(".").map { |i| i.to_i }

test/test_pragmas.rb

+6
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ def test_pragma_errors
5353
end
5454
end
5555

56+
def test_invalid_pragma
57+
assert_raises(SQLite3::Exception) do
58+
@db.journal_mode = 0
59+
end
60+
end
61+
5662
def test_get_boolean_pragma
5763
refute(@db.get_boolean_pragma("read_uncommitted"))
5864
end

0 commit comments

Comments
 (0)