Class: Sq::Dbsync::TableRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/sq/dbsync/table_registry.rb

Overview

A key-value abstraction that is used to store metadata about loads on a per-table basis.

Instance Method Summary collapse

Constructor Details

#initialize(db) ⇒ TableRegistry

Returns a new instance of TableRegistry.



6
7
8
9
# File 'lib/sq/dbsync/table_registry.rb', line 6

def initialize(db)
  @db    = db
  @table = db[table_name]
end

Instance Method Details

#delete(key) ⇒ Object



11
12
13
# File 'lib/sq/dbsync/table_registry.rb', line 11

def delete(key)
  table.filter(table_name: key.to_s).delete
end

#ensure_storage_existsObject



54
55
56
57
58
59
60
61
# File 'lib/sq/dbsync/table_registry.rb', line 54

def ensure_storage_exists
  db.create_table?(table_name, charset: 'utf8') do
    String   :table_name, primary_key: true
    DateTime :last_synced_at
    DateTime :last_batch_synced_at
    DateTime :last_row_at
  end
end

#get(key) ⇒ Object



39
40
41
42
43
44
# File 'lib/sq/dbsync/table_registry.rb', line 39

def get(key)
  table.
    select(:last_synced_at, :last_row_at, :last_batch_synced_at).
    filter(table_name: key.to_s).
    first
end

#purge_except(keys) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/sq/dbsync/table_registry.rb', line 46

def purge_except(keys)
  query = table
  if keys.any?
    query = query.where('table_name NOT IN ?', keys.map(&:to_s))
  end
  query.delete
end

#set(key, values) ⇒ Object

Set a value if an existing value does not already exist.



16
17
18
19
20
# File 'lib/sq/dbsync/table_registry.rb', line 16

def set(key, values)
  unless exists?(key)
    table.insert(values.merge(table_name: key.to_s))
  end
end

#set!(key, values) ⇒ Object

Set a value, overriding any existing.



23
24
25
26
27
28
# File 'lib/sq/dbsync/table_registry.rb', line 23

def set!(key, values)
  db.transaction do
    delete(key)
    set(key, values)
  end
end

#update(key, lock, values) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/sq/dbsync/table_registry.rb', line 30

def update(key, lock, values)
  table.
    filter(
      table_name:           key.to_s,
      last_batch_synced_at: lock
    ).
    update(values)
end