Module: Sq::Dbsync::Database::Common

Included in:
Mysql, Postgres
Defined in:
lib/sq/dbsync/database/common.rb

Constant Summary collapse

SQD =
::Sq::Dbsync

Instance Method Summary collapse

Instance Method Details

#__getobj__Object



44
45
46
# File 'lib/sq/dbsync/database/common.rb', line 44

def __getobj__
  db
end

#__setobj__(db) ⇒ Object



48
49
50
# File 'lib/sq/dbsync/database/common.rb', line 48

def __setobj__(db)
  @db = db
end

#ensure_connectionObject

Since we go so long without using connections (during a batch load), they go stale and raise DatabaseDisconnectError when we try to use them. This method ensures that the connection is fresh even after a long time between drinks.



40
41
42
# File 'lib/sq/dbsync/database/common.rb', line 40

def ensure_connection
  db.disconnect
end

#extract_incrementally_to_file(plan, file_name, last_row_at, overlap) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sq/dbsync/database/common.rb', line 15

def extract_incrementally_to_file(plan, file_name, last_row_at, overlap)
  table_name = plan.source_table_name.to_sym
  db_columns = db.schema(table_name).map(&:first)

  query = self[table_name].select(*plan.columns)
  if last_row_at
    query = query.filter("#{plan.timestamp} > ?", last_row_at - overlap)
  end

  extract_sql_to_file(query.sql, file_name)
end

#extract_to_file(table_name, columns, file_name) ⇒ Object



8
9
10
11
12
13
# File 'lib/sq/dbsync/database/common.rb', line 8

def extract_to_file(table_name, columns, file_name)
  extract_sql_to_file("SELECT %s FROM %s" % [
    columns.join(', '),
    table_name
  ], file_name)
end

#hash_schema(table_name) ⇒ Object



27
28
29
30
# File 'lib/sq/dbsync/database/common.rb', line 27

def hash_schema(table_name)
  ensure_connection
  Hash[schema(table_name)]
end

#nameObject



32
33
34
# File 'lib/sq/dbsync/database/common.rb', line 32

def name
  self['SELECT database()'].first.fetch(:'database()')
end