Class: Rake::DataTask::Sqlite
- Inherits:
-
Db
- Object
- Db
- Rake::DataTask::Sqlite
show all
- Includes:
- NumericBooleans, StandardTransactions
- Defined in:
- lib/data_task/adapters/sqlite.rb
Constant Summary
Constants inherited
from Db
Db::LOG, Db::TABLE_TRACKER_COLUMNS, Db::TABLE_TRACKER_NAME
Instance Method Summary
collapse
Methods inherited from Db
#operation_values, #relation_type_values
Constructor Details
#initialize(options) ⇒ Sqlite
Connect to an Sqlite database.
20
21
22
23
24
25
|
# File 'lib/data_task/adapters/sqlite.rb', line 20
def initialize options
@connection = SQLite3::Database.new(options['database'] || 'temp')
set_up_tracking if !tracking_tables?
end
|
Instance Method Details
#[](name) ⇒ Object
173
174
175
|
# File 'lib/data_task/adapters/sqlite.rb', line 173
def [](name)
Data.new(name, self)
end
|
#create_table(table_name, data_definition, column_definitions = nil, track_table = true) ⇒ Object
Also known as:
create_data
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/data_task/adapters/sqlite.rb', line 80
def create_table table_name, data_definition, column_definitions=nil, track_table=true
drop_table table_name
execute " create table \#{table_name} \#{column_definitions}\n \#{ \"as \#{data_definition}\" if !data_definition.nil? }\n EOSQL\n if track_table\n create_tracking_rules(table_name)\n track_creation table_name, 0\n end\nend\n"
|
#create_view(view_name, select_stmt) ⇒ Object
117
118
119
120
|
# File 'lib/data_task/adapters/sqlite.rb', line 117
def create_view view_name, select_stmt
drop_view view_name
execute "create view #{view_name} as #{select_stmt}"
end
|
#drop_table(table_name) ⇒ Object
Also known as:
drop_data
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/data_task/adapters/sqlite.rb', line 94
def drop_table table_name
execute "drop table if exists #{table_name}"
views_for_dropped_table = execute " select name from sqlite_master \n where \n type = 'view' and (\n -- add trailing space for views without where statements\n sql || ' ' like \"% from \#{table_name} %\" or\n sql like \"% join \#{table_name} %\"\n )\n EOSQL\n views_for_dropped_table.flatten.each do |view_name|\n drop_view view_name\n end\n\n return if table_name.casecmp(TABLE_TRACKER_NAME) == 0\n track_drop table_name\nend\n"
|
#drop_view(view_name) ⇒ Object
122
123
124
|
# File 'lib/data_task/adapters/sqlite.rb', line 122
def drop_view view_name
execute "drop view if exists #{view_name}"
end
|
#execute(sql) ⇒ Object
27
28
29
30
31
32
33
34
35
|
# File 'lib/data_task/adapters/sqlite.rb', line 27
def execute sql
connect if @connection.nil?
begin
@connection.execute sql
rescue SQLite3::SQLException => e
LOG.info e.message.chomp
raise e
end
end
|
#operations_supported ⇒ Object
166
167
168
169
170
171
|
# File 'lib/data_task/adapters/sqlite.rb', line 166
def operations_supported
{
:by_db => operations_supported_by_db,
:by_app => [:truncate, :create]
}
end
|
#reset_tracking(options = {}) ⇒ Object
63
64
65
|
# File 'lib/data_task/adapters/sqlite.rb', line 63
def reset_tracking options = {}
truncate_table TABLE_TRACKER_NAME
end
|
#set_up_tracking(options = {}) ⇒ Object
51
52
53
54
55
56
57
|
# File 'lib/data_task/adapters/sqlite.rb', line 51
def set_up_tracking options = {}
tear_down_tracking options
column_definitions = table_tracker_columns.map do |col,col_defn|
col.to_s + ' ' + col_defn[:data_type].to_s
end.join(', ')
create_table TABLE_TRACKER_NAME, nil, " (#{column_definitions})", false
end
|
#table_exists?(table_name, options = {}) ⇒ Boolean
Also known as:
data_exists?
135
136
137
|
# File 'lib/data_task/adapters/sqlite.rb', line 135
def table_exists? table_name, options = {}
relation_exists?(table_name, 'table', options)
end
|
#table_mtime(table_name) ⇒ Object
Also known as:
data_mtime
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/data_task/adapters/sqlite.rb', line 67
def table_mtime table_name
Sql.get_single_time(
execute " -- assume time is UTC (Sqlite3 default) and add offset for Ruby's Time.parse \n select datetime(max(time)) || ' -0000'\n from \#{TABLE_TRACKER_NAME} \n where relation_name = '\#{table_name}'\n EOSQL\n )\nend\n"
|
#table_tracker_columns ⇒ Object
44
45
46
47
48
49
|
# File 'lib/data_task/adapters/sqlite.rb', line 44
def table_tracker_columns
super.merge({
:time => {:data_type => :timestamp}
})
end
|
#tear_down_tracking(options = {}) ⇒ Object
59
60
61
|
# File 'lib/data_task/adapters/sqlite.rb', line 59
def tear_down_tracking options = {}
drop_table TABLE_TRACKER_NAME
end
|
#track_drop(table_name) ⇒ Object
126
127
128
129
130
131
132
133
|
# File 'lib/data_task/adapters/sqlite.rb', line 126
def track_drop table_name
execute " delete from \#{TABLE_TRACKER_NAME} \n where \n relation_name = '\#{table_name}' and \n relation_type = '\#{relation_type_values[:table]}'\n EOSQL\nend\n"
|
#track_truncate(table_name) ⇒ Object
153
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/data_task/adapters/sqlite.rb', line 153
def track_truncate table_name
execute " update \#{TABLE_TRACKER_NAME}\n set \n operation = '\#{operation_values[:truncate]}',\n -- Sqlite generates times at UTC and stores them without zone information\n time = datetime('now')\n where\n relation_name = '\#{table_name}' and\n relation_type = '\#{relation_type_values[:table]}'\n EOSQL\nend\n"
|
#tracking_tables? ⇒ Boolean
40
41
42
|
# File 'lib/data_task/adapters/sqlite.rb', line 40
def tracking_tables?
table_exists?(TABLE_TRACKER_NAME)
end
|
#truncate_table(table_name) ⇒ Object
Also known as:
truncate_data
145
146
147
148
149
|
# File 'lib/data_task/adapters/sqlite.rb', line 145
def truncate_table table_name
return if table_name.casecmp(TABLE_TRACKER_NAME) == 0
execute "delete from #{table_name}"
track_truncate table_name
end
|
#view_exists?(table_name, options = {}) ⇒ Boolean
141
142
143
|
# File 'lib/data_task/adapters/sqlite.rb', line 141
def view_exists? table_name, options = {}
relation_exists?(table_name, 'view', options)
end
|