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 string, value blob)')
41 value = @registry.get_first_row('SELECT value FROM data WHERE key = ?', key.to_s)
42 return restore(value.first)
52 value = SQLite3::Blob.new(store(value))
54 registry.execute('UPDATE data SET value = ? WHERE key = ?', value, key.to_s)
56 registry.execute('INSERT INTO data VALUES (?, ?)', key.to_s, value)
61 return nil unless dbexists?
62 res = registry.execute('SELECT * FROM data')
65 block.call(key, restore(value))
70 return nil unless dbexists?
71 res = registry.get_first_row('SELECT COUNT(*) FROM data WHERE key = ?', key.to_s)
76 return nil unless dbexists?
77 value = SQLite3::Blob.new(store(value))
78 res = registry.get_first_row('SELECT COUNT(*) FROM data WHERE value = ?', value)
83 return default unless dbexists?
85 registry.execute('DELETE FROM data WHERE key = ?', key.to_s)
92 # returns a list of your keys
94 return [] unless dbexists?
95 res = registry.execute('SELECT key FROM data')
96 res.map { |row| row.first }
100 return unless dbexists?
101 registry.execute('DELETE FROM data')
104 # returns the number of keys in your registry namespace
106 return 0 unless dbexists?
107 res = registry.get_first_row('SELECT COUNT(key) FROM data')