4 # :title: Sqlite3 registry implementation
13 class SqliteAccessor < AbstractAccessor
15 def initialize(filename)
16 super filename + '.db'
22 @registry = SQLite3::Database.new(@filename)
24 @registry.execute('SELECT COUNT(*) FROM data')
26 @registry.execute('CREATE TABLE data (key PRIMARY KEY, value)')
33 return unless @registry
34 @registry.execute('VACUUM')
40 value = registry.get_first_row('SELECT value FROM data WHERE key = ?', key.to_s)
41 return restore(value.first)
51 value = SQLite3::Blob.new(store(value))
53 registry.execute('UPDATE data SET value = ? WHERE key = ?', value, key.to_s)
55 registry.execute('INSERT INTO data VALUES (?, ?)', key.to_s, value)
60 return nil unless dbexists?
61 res = registry.execute('SELECT * FROM data')
64 block.call(key, restore(value))
71 return nil unless dbexists?
72 res = registry.get_first_row('SELECT COUNT(*) FROM data WHERE key = ?', key.to_s)
76 alias include? has_key?
77 alias member? has_key?
81 return nil unless dbexists?
82 value = SQLite3::Blob.new(store(value))
83 res = registry.get_first_row('SELECT COUNT(*) FROM data WHERE value = ?', value)
88 return default unless dbexists?
91 registry.execute('DELETE FROM data WHERE key = ?', key.to_s)
92 value if registry.changes > 0
98 # returns a list of your keys
100 return [] unless dbexists?
101 res = registry.execute('SELECT key FROM data')
102 res.map { |row| row.first }
106 return unless dbexists?
107 registry.execute('DELETE FROM data')
112 # returns the number of keys in your registry namespace
114 return 0 unless dbexists?
115 res = registry.get_first_row('SELECT COUNT(key) FROM data')