Class: Csvsql::Db
- Inherits:
-
Object
- Object
- Csvsql::Db
- Defined in:
- lib/csvsql/db.rb
Constant Summary collapse
- BATCH_ROWS =
10000
Instance Attribute Summary collapse
-
#batch_rows ⇒ Object
readonly
Returns the value of attribute batch_rows.
-
#data_source ⇒ Object
readonly
Returns the value of attribute data_source.
Instance Method Summary collapse
- #db ⇒ Object
- #execute(sql) ⇒ Object
-
#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 }.
- #init_db(cache_path = '') ⇒ Object
-
#initialize(batch_rows: nil, sql_error_action: nil) ⇒ Db
constructor
A new instance of Db.
- #prepare(sql) ⇒ Object
-
#sql_error_action=(action) ⇒ Object
action: raise: default exit.
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_rows ⇒ Object (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_source ⇒ Object (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
#db ⇒ Object
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 |