Class: Nostrb::SQLite::Storage
- Inherits:
-
Object
- Object
- Nostrb::SQLite::Storage
- Defined in:
- lib/nostrb/sqlite.rb
Direct Known Subclasses
Constant Summary collapse
- KB =
1024- MB =
KB * 1024
- GB =
MB * 1024
- FILENAME =
'sqlite.tmp.db'- CONFIG =
{ default_transaction_mode: :immediate, }
- SQLITE_USAGE =
/\Asqlite_/- PRAGMAS =
{ foreign_keys: true, # enable FK constraints mmap_size: 128 * MB, # enable mmap I/O, 128 MB # Write Ahead Log, append-only so safe for infrequent fsync journal_mode: 'wal', # enable WAL, less read/write contention journal_size_limit: 64 * MB, # enable, 64 MB synchronous: 1, # 1=normal, default, good for WAL wal_autocheckpoint: 1000, # default, pages per fsync }
Instance Attribute Summary collapse
-
#db ⇒ Object
readonly
Returns the value of attribute db.
-
#filename ⇒ Object
readonly
Returns the value of attribute filename.
-
#pragma ⇒ Object
readonly
Returns the value of attribute pragma.
Instance Method Summary collapse
- #all_index_names(table_name) ⇒ Object
- #all_table_names ⇒ Object
-
#compile_options ⇒ Object
below methods all return an array of strings.
- #database_files ⇒ Object
- #index_names(table_name) ⇒ Object
-
#initialize(filename = FILENAME, set_pragmas: true, **kwargs) ⇒ Storage
constructor
A new instance of Storage.
- #pragma_scalars ⇒ Object
- #reader ⇒ Object
- #report ⇒ Object
- #set_pragmas ⇒ Object
- #setup ⇒ Object
- #table_names ⇒ Object
- #writer ⇒ Object
Constructor Details
#initialize(filename = FILENAME, set_pragmas: true, **kwargs) ⇒ Storage
Returns a new instance of Storage.
134 135 136 137 138 139 140 |
# File 'lib/nostrb/sqlite.rb', line 134 def initialize(filename = FILENAME, set_pragmas: true, **kwargs) @filename = filename @db = SQLite3::Database.new(@filename, **CONFIG.merge(kwargs)) @db.busy_handler_timeout = 5000 # 5 seconds, release GVL every ms @pragma = Pragma.new(@db) self.set_pragmas if set_pragmas end |
Instance Attribute Details
#db ⇒ Object (readonly)
Returns the value of attribute db.
132 133 134 |
# File 'lib/nostrb/sqlite.rb', line 132 def db @db end |
#filename ⇒ Object (readonly)
Returns the value of attribute filename.
132 133 134 |
# File 'lib/nostrb/sqlite.rb', line 132 def filename @filename end |
#pragma ⇒ Object (readonly)
Returns the value of attribute pragma.
132 133 134 |
# File 'lib/nostrb/sqlite.rb', line 132 def pragma @pragma end |
Instance Method Details
#all_index_names(table_name) ⇒ Object
167 168 169 |
# File 'lib/nostrb/sqlite.rb', line 167 def all_index_names(table_name) @pragma.list(:index_list, table_name).map { |a| a[1] } end |
#all_table_names ⇒ Object
161 |
# File 'lib/nostrb/sqlite.rb', line 161 def all_table_names = @pragma.list(:table_list).map { |a| a[1] } |
#compile_options ⇒ Object
below methods all return an array of strings
159 |
# File 'lib/nostrb/sqlite.rb', line 159 def = @pragma.list(:compile_options).map { |a| a[0] } |
#database_files ⇒ Object
160 |
# File 'lib/nostrb/sqlite.rb', line 160 def database_files = @pragma.list(:database_list).map { |a| a[2] } |
#index_names(table_name) ⇒ Object
171 172 173 |
# File 'lib/nostrb/sqlite.rb', line 171 def index_names(table_name) all_index_names(table_name).select { |name| !SQLITE_USAGE.match name } end |
#pragma_scalars ⇒ Object
175 176 177 178 179 180 181 |
# File 'lib/nostrb/sqlite.rb', line 175 def pragma_scalars Pragma::SCALAR.map { |pragma| val, enum = @pragma.get(pragma), Pragma::ENUM[pragma] val = format("%i (%s)", val, enum[val]) if enum format("%s: %s", pragma, val) } end |
#reader ⇒ Object
150 151 152 |
# File 'lib/nostrb/sqlite.rb', line 150 def reader Reader.new(@filename) end |
#report ⇒ Object
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'lib/nostrb/sqlite.rb', line 183 def report lines = ['compile_options', '---'] lines += self. lines += ['', 'database_files', '---'] lines += self.database_files lines += ['', "table_names", '---'] tables = self.table_names lines += tables tables.each { |tbl| lines += ['', "table_info(#{tbl})", '---'] lines += @pragma.table_info(tbl).map(&:inspect) fks = @pragma.foreign_key_list(tbl).map(&:inspect) if fks.length > 1 lines += ['', "foreign_key_list(#{tbl})", '---'] lines += fks end idxs = self.index_names(tbl) if !idxs.empty? lines += ['', "index_names(#{tbl})", '---'] lines += idxs end idxs.each { |idx| lines += ['', "index_info(#{idx})", '---'] lines += @pragma.index_info(idx).map(&:inspect) } } lines += ['', "pragma values", '---'] lines += self.pragma_scalars lines end |
#set_pragmas ⇒ Object
142 143 144 |
# File 'lib/nostrb/sqlite.rb', line 142 def set_pragmas PRAGMAS.each { |name, val| @pragma.set(name, val) } end |
#setup ⇒ Object
146 147 148 |
# File 'lib/nostrb/sqlite.rb', line 146 def setup Setup.new(@filename) end |
#table_names ⇒ Object
163 164 165 |
# File 'lib/nostrb/sqlite.rb', line 163 def table_names all_table_names().select { |name| !SQLITE_USAGE.match name } end |