Class: MysqlCacheManager::CacheImage::SQLite3
- Inherits:
-
Object
- Object
- MysqlCacheManager::CacheImage::SQLite3
- Defined in:
- lib/mysql_cache_manager/cache_image/sqlite3.rb
Constant Summary collapse
- TABLE_SCHEMA =
{ "metadata" => " CREATE TABLE metadata ( k STRING NOT NULL, v STRING NOT NULL, PRIMARY KEY (k) ) ", "pages" => " CREATE TABLE pages ( space INTEGER NOT NULL, page_number INTEGER NOT NULL ) ", }
Instance Method Summary collapse
- #add_metadata(k, v) ⇒ Object
- #each_page(space) ⇒ Object
- #each_page_batch(space, batch_size) ⇒ Object
- #each_space ⇒ Object
- #empty! ⇒ Object
-
#initialize(filename, create_if_needed) ⇒ SQLite3
constructor
A new instance of SQLite3.
- #metadata ⇒ Object
- #save_page(space, page_number) ⇒ Object
- #save_pages(page_iterator) ⇒ Object
Constructor Details
#initialize(filename, create_if_needed) ⇒ SQLite3
Returns a new instance of SQLite3.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 22 def initialize(filename, create_if_needed) @filename = filename if File.exists?(filename) @db = ::SQLite3::Database.new(@filename) else if create_if_needed @db = ::SQLite3::Database.new(@filename) TABLE_SCHEMA.each do |name, schema| @db.query(schema) end else raise "File not found: #{filename}" end end @db.cache_size = 200000 @db.synchronous = "off" @db.temp_store = "memory" end |
Instance Method Details
#add_metadata(k, v) ⇒ Object
48 49 50 51 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 48 def (k, v) @insert_metadata ||= @db.prepare("INSERT INTO metadata (k, v) VALUES (?, ?)") @insert_metadata.execute(k, v) end |
#each_page(space) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 92 def each_page(space) unless block_given? return Enumerable::Enumerator.new(self, :each_page, space) end pages = 0 @db.execute("SELECT page_number FROM pages WHERE space = #{space} ORDER BY page_number") do |row| pages += 1 yield row[0] end pages end |
#each_page_batch(space, batch_size) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 106 def each_page_batch(space, batch_size) unless block_given? return Enumerable::Enumerator.new(self, :each_page_batch, space, batch_size) end batch_pages = Array.new pages = each_page(space) do |page_number| batch_pages << page_number if batch_pages.size >= batch_size yield batch_pages batch_pages.clear end end unless batch_pages.empty? yield batch_pages end pages end |
#each_space ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 78 def each_space unless block_given? return Enumerable::Enumerator.new(self, :each_space) end spaces = 0 @db.execute("SELECT DISTINCT space FROM pages ORDER BY space") do |row| spaces += 1 yield row[0] end spaces end |
#empty! ⇒ Object
43 44 45 46 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 43 def empty! @db.query("DELETE FROM metadata") @db.query("DELETE FROM pages") end |
#metadata ⇒ Object
53 54 55 56 57 58 59 60 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 53 def = {} @db.execute("SELECT k, v FROM metadata ORDER BY k") do |row| [row[0]] = row[1] end end |
#save_page(space, page_number) ⇒ Object
72 73 74 75 76 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 72 def save_page(space, page_number) @insert_page ||= @db.prepare("INSERT OR IGNORE INTO pages (space, page_number) VALUES (?, ?)") @insert_page.execute(space, page_number) end |
#save_pages(page_iterator) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/mysql_cache_manager/cache_image/sqlite3.rb', line 62 def save_pages(page_iterator) @db.transaction pages = page_iterator.each do |page| save_page(*page) end @db.commit pages end |