Class: RailsRedshiftReplicator::Adapters::Generic

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_redshift_replicator/adapters/generic.rb

Direct Known Subclasses

Mysql2, PostgreSQL, SQLite

Instance Method Summary collapse

Constructor Details

#initialize(ar_client) ⇒ Generic

Returns a new instance of Generic.



4
5
6
# File 'lib/rails_redshift_replicator/adapters/generic.rb', line 4

def initialize(ar_client)
  @ar_client = ar_client
end

Instance Method Details

#connectionObject

Returns the AR connection



9
10
11
# File 'lib/rails_redshift_replicator/adapters/generic.rb', line 9

def connection
  @connection ||= @ar_client
end

#last_record_query_command(sql) ⇒ String

Returns id or timestamp.

Returns:

  • (String)

    id or timestamp



20
21
22
# File 'lib/rails_redshift_replicator/adapters/generic.rb', line 20

def last_record_query_command(sql)
  connection.exec_query(sql).first['_last_record']
end

#query_command(sql) ⇒ Object

Executes query using AR Adapter

Parameters:

  • sql (String)

    sql to execute



15
16
17
# File 'lib/rails_redshift_replicator/adapters/generic.rb', line 15

def query_command(sql)
  connection.query sql
end

#write(file_path, query_result) ⇒ Integer

Writes query results to a file

Parameters:

  • file_path (String)

    path to output

  • query_result (#each)

    Resultset from the query_command

Returns:

  • (Integer)

    number of records



28
29
30
31
32
33
34
35
36
37
# File 'lib/rails_redshift_replicator/adapters/generic.rb', line 28

def write(file_path, query_result)
  line_number = 0
  CSV.open(file_path, "w") do |csv|
    query_result.each do |row|
      csv << row.map{ |field| field.is_a?(String) ? field.gsub("\n", " ") : field }
      line_number+=1
    end
  end
  line_number
end