Class: Nostrb::SQLite::Reader
Constant Summary collapse
Constants inherited from Storage
Storage::CONFIG, Storage::FILENAME, Storage::GB, Storage::KB, Storage::MB, Storage::SQLITE_USAGE
Instance Attribute Summary
Attributes inherited from Storage
Class Method Summary collapse
- .event_clauses(filter) ⇒ Object
-
.hydrate(hash) ⇒ Object
parse the JSON tags into a Ruby array.
-
.tag_clauses(filter_tags) ⇒ Object
filter_tags: { ‘a’ => [String] }.
Instance Method Summary collapse
-
#initialize(filename = FILENAME, **kwargs) ⇒ Reader
constructor
A new instance of Reader.
- #process_events(filter = nil) ⇒ Object
- #process_events_table(table = 'events', filter = nil) ⇒ Object
- #process_r_events(filter = nil) ⇒ Object
-
#select_events(filter = nil) ⇒ Object
these are presumably filtered so cannot be prepared use Database#query to get a ResultSet.
-
#select_events_table(table = 'events', filter = nil) ⇒ Object
Regular Events.
-
#select_r_events(filter = nil) ⇒ Object
Replaceable Events.
- #select_r_tags(event_id:, created_at:) ⇒ Object
-
#select_tags(event_id:, created_at:) ⇒ Object
use a prepared statement to get a ResultSet.
Methods inherited from Storage
#all_index_names, #all_table_names, #compile_options, #database_files, #index_names, #pragma_scalars, #reader, #report, #set_pragmas, #setup, #table_names, #writer
Constructor Details
Class Method Details
.event_clauses(filter) ⇒ Object
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 |
# File 'lib/nostrb/sqlite.rb', line 301 def self.event_clauses(filter) clauses = [] if !filter.ids.empty? clauses << format("id IN ('%s')", filter.ids.join("','")) end if !filter..empty? clauses << format("pubkey in ('%s')", filter..join("','")) end if !filter.kinds.empty? clauses << format("kind in (%s)", filter.kinds.join(',')) end if filter.since clauses << format("created_at >= %i", filter.since) end if filter.until clauses << format("created_at <= %i", filter.until) end clauses.join(' AND ') end |
.hydrate(hash) ⇒ Object
parse the JSON tags into a Ruby array
296 297 298 299 |
# File 'lib/nostrb/sqlite.rb', line 296 def self.hydrate(hash) hash["tags"] = Nostrb.parse(hash.fetch("tags")) hash end |
.tag_clauses(filter_tags) ⇒ Object
filter_tags: { ‘a’ => [String] }
322 323 324 325 326 327 328 329 |
# File 'lib/nostrb/sqlite.rb', line 322 def self.tag_clauses() clauses = [] .each { |tag, values| clauses << format("tag = %s", tag) clauses << format("value in (%s)", values.join(',')) } clauses.join(' AND ') end |
Instance Method Details
#process_events(filter = nil) ⇒ Object
362 363 364 |
# File 'lib/nostrb/sqlite.rb', line 362 def process_events(filter = nil) process_events_table('events', filter) end |
#process_events_table(table = 'events', filter = nil) ⇒ Object
348 349 350 351 352 353 354 |
# File 'lib/nostrb/sqlite.rb', line 348 def process_events_table(table = 'events', filter = nil) a = [] select_events_table(table, filter).each_hash { |h| a << Reader.hydrate(h) } a end |
#process_r_events(filter = nil) ⇒ Object
383 384 385 |
# File 'lib/nostrb/sqlite.rb', line 383 def process_r_events(filter = nil) process_events_table('r_events', filter) end |
#select_events(filter = nil) ⇒ Object
these are presumably filtered so cannot be prepared use Database#query to get a ResultSet
358 359 360 |
# File 'lib/nostrb/sqlite.rb', line 358 def select_events(filter = nil) select_events_table('events', filter) end |
#select_events_table(table = 'events', filter = nil) ⇒ Object
Regular Events
339 340 341 342 343 344 345 346 |
# File 'lib/nostrb/sqlite.rb', line 339 def select_events_table(table = 'events', filter = nil) sql = format("SELECT content, kind, tags, pubkey, created_at, id, sig FROM %s", table) if !filter.nil? sql += format(" WHERE %s", Reader.event_clauses(filter)) end @db.query sql end |
#select_r_events(filter = nil) ⇒ Object
Replaceable Events
379 380 381 |
# File 'lib/nostrb/sqlite.rb', line 379 def select_r_events(filter = nil) select_events_table('r_events', filter) end |
#select_r_tags(event_id:, created_at:) ⇒ Object
387 388 389 390 391 392 393 |
# File 'lib/nostrb/sqlite.rb', line 387 def (event_id:, created_at:) @select_r_tags ||= @db.prepare("SELECT tag, value, json FROM r_tags WHERE r_event_id = :event_id AND created_at = :created_at") @select_r_tags.execute(event_id: event_id, created_at: created_at) end |
#select_tags(event_id:, created_at:) ⇒ Object
use a prepared statement to get a ResultSet
367 368 369 370 371 372 373 |
# File 'lib/nostrb/sqlite.rb', line 367 def (event_id:, created_at:) @select_tags ||= @db.prepare("SELECT tag, value, json FROM tags WHERE event_id = :event_id AND created_at = :created_at") @select_tags.execute(event_id: event_id, created_at: created_at) end |