@@ -60,11 +60,20 @@ def get_enum_pragma(name)
6060 # have duplicate values. See #synchronous, #default_synchronous,
6161 # #temp_store, and #default_temp_store for usage examples.
6262 def set_enum_pragma ( name , mode , enums )
63- match = enums . find { |p | p . find { |i | i . to_s . downcase == mode . to_s . downcase } }
63+ match = if enums . is_a? ( Array )
64+ # maybe deprecate this?
65+ enums . find { |p | p . find { |i | i . to_s . downcase == mode . to_s . downcase } }
66+ elsif mode . is_a? ( String )
67+ enums . fetch ( mode . downcase )
68+ else
69+ mode
70+ end
71+
6472 unless match
6573 raise SQLite3 ::Exception , "unrecognized #{ name } #{ mode . inspect } "
6674 end
67- execute ( "PRAGMA #{ name } ='#{ match . first . upcase } '" )
75+
76+ execute ( "PRAGMA #{ name } ='#{ match } '" )
6877 end
6978
7079 # Returns the value of the given pragma as an integer.
@@ -79,26 +88,57 @@ def set_int_pragma(name, value)
7988 end
8089
8190 # The enumeration of valid synchronous modes.
82- SYNCHRONOUS_MODES = [ [ "full" , 2 ] , [ "normal" , 1 ] , [ "off" , 0 ] ] . map ( &:freeze ) . freeze
91+ SYNCHRONOUS_MODES = {
92+ "full" => 2 ,
93+ "normal" => 1 ,
94+ "off" => 0
95+ } . freeze
8396
8497 # The enumeration of valid temp store modes.
85- TEMP_STORE_MODES = [ [ "default" , 0 ] , [ "file" , 1 ] , [ "memory" , 2 ] ] . map ( &:freeze ) . freeze
98+ TEMP_STORE_MODES = {
99+ "default" => 0 ,
100+ "file" => 1 ,
101+ "memory" => 2
102+ } . freeze
86103
87104 # The enumeration of valid auto vacuum modes.
88- AUTO_VACUUM_MODES = [ [ "none" , 0 ] , [ "full" , 1 ] , [ "incremental" , 2 ] ] . map ( &:freeze ) . freeze
105+ AUTO_VACUUM_MODES = {
106+ "none" => 0 ,
107+ "full" => 1 ,
108+ "incremental" => 2
109+ } . freeze
89110
90111 # The list of valid journaling modes.
91- JOURNAL_MODES = [ [ "delete" ] , [ "truncate" ] , [ "persist" ] , [ "memory" ] ,
92- [ "wal" ] , [ "off" ] ] . map ( &:freeze ) . freeze
112+ JOURNAL_MODES = {
113+ "delete" => "delete" ,
114+ "truncate" => "truncate" ,
115+ "persist" => "persist" ,
116+ "memory" => "memory" ,
117+ "wal" => "wal" ,
118+ "off" => "off"
119+ } . freeze
93120
94121 # The list of valid locking modes.
95- LOCKING_MODES = [ [ "normal" ] , [ "exclusive" ] ] . map ( &:freeze ) . freeze
122+ LOCKING_MODES = {
123+ "normal" => "normal" ,
124+ "exclusive" => "exclusive"
125+ } . freeze
96126
97127 # The list of valid encodings.
98- ENCODINGS = [ [ "utf-8" ] , [ "utf-16" ] , [ "utf-16le" ] , [ "utf-16be" ] ] . map ( &:freeze ) . freeze
128+ ENCODINGS = {
129+ "utf-8" => "utf-8" ,
130+ "utf-16" => "utf-16" ,
131+ "utf-16le" => "utf-16le" ,
132+ "utf-16be" => "utf-16be"
133+ } . freeze
99134
100135 # The list of valid WAL checkpoints.
101- WAL_CHECKPOINTS = [ [ "passive" ] , [ "full" ] , [ "restart" ] , [ "truncate" ] ] . map ( &:freeze ) . freeze
136+ WAL_CHECKPOINTS = {
137+ "passive" => "passive" ,
138+ "full" => "full" ,
139+ "restart" => "restart" ,
140+ "truncate" => "truncate"
141+ } . freeze
102142
103143 def application_id
104144 get_int_pragma "application_id"
@@ -229,7 +269,7 @@ def encoding
229269 end
230270
231271 def encoding = ( mode )
232- set_enum_pragma "encoding" , mode , ENCODINGS
272+ set_string_pragma "encoding" , mode , ENCODINGS
233273 end
234274
235275 def foreign_key_check ( *table , &block ) # :yields: row
@@ -297,7 +337,7 @@ def journal_mode
297337 end
298338
299339 def journal_mode = ( mode )
300- set_enum_pragma "journal_mode" , mode , JOURNAL_MODES
340+ set_string_pragma "journal_mode" , mode , JOURNAL_MODES
301341 end
302342
303343 def journal_size_limit
@@ -321,7 +361,7 @@ def locking_mode
321361 end
322362
323363 def locking_mode = ( mode )
324- set_enum_pragma "locking_mode" , mode , LOCKING_MODES
364+ set_string_pragma "locking_mode" , mode , LOCKING_MODES
325365 end
326366
327367 def max_page_count
@@ -527,7 +567,7 @@ def wal_checkpoint
527567 end
528568
529569 def wal_checkpoint = ( mode )
530- set_enum_pragma "wal_checkpoint" , mode , WAL_CHECKPOINTS
570+ set_string_pragma "wal_checkpoint" , mode , WAL_CHECKPOINTS
531571 end
532572
533573 def writable_schema = ( mode )
@@ -570,6 +610,13 @@ def table_info table
570610
571611 private
572612
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+
573620 # Compares two version strings
574621 def version_compare ( v1 , v2 )
575622 v1 = v1 . split ( "." ) . map { |i | i . to_i }
0 commit comments