Class: Csvsql::Db

Inherits:
Object
  • Object
show all
Defined in:
lib/csvsql/db.rb

Constant Summary collapse

BATCH_ROWS =
10000

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(batch_rows: nil, sql_error_action: nil) ⇒ Db

Returns a new instance of Db.



8
9
10
11
12
13
# File 'lib/csvsql/db.rb', line 8

def initialize(batch_rows: nil, sql_error_action: nil)
  @db = nil
  @data_source = {}
  @batch_rows = batch_rows || BATCH_ROWS
  @sql_error_action = (sql_error_action || :raise).to_sym
end

Instance Attribute Details

#batch_rowsObject (readonly)

Returns the value of attribute batch_rows.



6
7
8
# File 'lib/csvsql/db.rb', line 6

def batch_rows
  @batch_rows
end

#data_sourceObject (readonly)

Returns the value of attribute data_source.



6
7
8
# File 'lib/csvsql/db.rb', line 6

def data_source
  @data_source
end

Instance Method Details

#dbObject



34
35
36
# File 'lib/csvsql/db.rb', line 34

def db
  @db ||= init_db
end

#execute(sql) ⇒ Object



22
23
24
25
26
# File 'lib/csvsql/db.rb', line 22

def execute(sql)
  db.execute(sql)
rescue SQLite3::SQLException => e
  process_sql_error(sql, e)
end

#import(csv_data_or_path, encoding: 'utf-8') ⇒ Object

Params:

csv_data_or_path:
  [String] csv path
  [StringIO, IO] csv buffer io
  [Hash] { table_name => csv_path }


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/csvsql/db.rb', line 47

def import(csv_data_or_path, encoding: 'utf-8')
  case csv_data_or_path
  when StringIO, IO
    data_source['csv'] = CSV.new(csv_data_or_path)
  when Hash
    csv_data_or_path.each do |table_name, path|
      data_source[table_name.to_s] = CSV.open(path, "r:#{encoding}")
    end
  else
    data_source['csv'] = CSV.open(csv_data_or_path, "r:#{encoding}")
  end

  tables = db.execute("SELECT name FROM sqlite_master WHERE type='table';").flatten
  data_source.each do |table_name, csv|
    next if tables.include?('csv')
    init_table_by_csv(table_name, csv)
  end
  true
end

#init_db(cache_path = '') ⇒ Object



38
39
40
# File 'lib/csvsql/db.rb', line 38

def init_db(cache_path = '')
  @db = SQLite3::Database.new(cache_path)
end

#prepare(sql) ⇒ Object



28
29
30
31
32
# File 'lib/csvsql/db.rb', line 28

def prepare(sql)
  db.prepare(sql)
rescue SQLite3::SQLException => e
  process_sql_error(sql, e)
end

#sql_error_action=(action) ⇒ Object

action:

raise: default
exit


18
19
20
# File 'lib/csvsql/db.rb', line 18

def sql_error_action=(action)
  @sql_error_action = action.to_sym
end