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.
16
17
18
19
20
21
|
# File 'lib/data_task/adapters/sqlite.rb', line 16
def initialize options
@connection = SQLite3::Database.new(options['database'] || 'temp')
set_up_tracking if !tracking_tables?
end
|
Instance Method Details
#[](name) ⇒ Object
169
170
171
|
# File 'lib/data_task/adapters/sqlite.rb', line 169
def [](name)
Data.new(name, self)
end
|
#create_table(table_name, data_definition, column_definitions, track_table = true) ⇒ Object
Also known as:
create_data
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/data_task/adapters/sqlite.rb', line 76
def create_table table_name, data_definition, column_definitions, 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
113
114
115
116
|
# File 'lib/data_task/adapters/sqlite.rb', line 113
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/data_task/adapters/sqlite.rb', line 90
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
118
119
120
|
# File 'lib/data_task/adapters/sqlite.rb', line 118
def drop_view view_name
execute "drop view if exists #{view_name}"
end
|
#execute(sql) ⇒ Object
23
24
25
26
27
28
29
30
31
|
# File 'lib/data_task/adapters/sqlite.rb', line 23
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
162
163
164
165
166
167
|
# File 'lib/data_task/adapters/sqlite.rb', line 162
def operations_supported
{
:by_db => operations_supported_by_db,
:by_app => [:truncate, :create]
}
end
|
#reset_tracking(options = {}) ⇒ Object
59
60
61
|
# File 'lib/data_task/adapters/sqlite.rb', line 59
def reset_tracking options = {}
truncate_table TABLE_TRACKER_NAME
end
|
#set_up_tracking(options = {}) ⇒ Object
47
48
49
50
51
52
53
|
# File 'lib/data_task/adapters/sqlite.rb', line 47
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?
131
132
133
|
# File 'lib/data_task/adapters/sqlite.rb', line 131
def table_exists? table_name, options = {}
relation_exists?(table_name, 'table', options)
end
|
#table_mtime(table_name) ⇒ Object
Also known as:
data_mtime
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/data_task/adapters/sqlite.rb', line 63
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
40
41
42
43
44
45
|
# File 'lib/data_task/adapters/sqlite.rb', line 40
def table_tracker_columns
super.merge({
:time => {:data_type => :timestamp}
})
end
|
#tear_down_tracking(options = {}) ⇒ Object
55
56
57
|
# File 'lib/data_task/adapters/sqlite.rb', line 55
def tear_down_tracking options = {}
drop_table TABLE_TRACKER_NAME
end
|
#track_drop(table_name) ⇒ Object
122
123
124
125
126
127
128
129
|
# File 'lib/data_task/adapters/sqlite.rb', line 122
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
149
150
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/data_task/adapters/sqlite.rb', line 149
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
36
37
38
|
# File 'lib/data_task/adapters/sqlite.rb', line 36
def tracking_tables?
table_exists?(TABLE_TRACKER_NAME)
end
|
#truncate_table(table_name) ⇒ Object
Also known as:
truncate_data
141
142
143
144
145
|
# File 'lib/data_task/adapters/sqlite.rb', line 141
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
137
138
139
|
# File 'lib/data_task/adapters/sqlite.rb', line 137
def view_exists? table_name, options = {}
relation_exists?(table_name, 'view', options)
end
|