baza 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +7 -4
- data/Gemfile.lock +84 -48
- data/README.md +186 -0
- data/VERSION +1 -1
- data/baza.gemspec +37 -22
- data/include/db.rb +153 -166
- data/include/dbtime.rb +2 -2
- data/include/driver.rb +9 -0
- data/include/drivers/active_record/active_record.rb +64 -27
- data/include/drivers/mysql/mysql_columns.rb +33 -33
- data/include/drivers/mysql/mysql_indexes.rb +26 -17
- data/include/drivers/mysql/mysql_tables.rb +140 -132
- data/include/drivers/sqlite3/sqlite3_indexes.rb +37 -9
- data/include/drivers/sqlite3/sqlite3_tables.rb +181 -152
- data/include/query_buffer.rb +22 -22
- data/include/revision.rb +70 -70
- data/lib/baza.rb +3 -1
- data/shippable.yml +11 -0
- data/spec/include/drivers/active_record_spec.rb +8 -0
- data/spec/include/drivers/mysql_spec.rb +47 -0
- data/spec/include/drivers/sqlite3_spec.rb +60 -0
- data/spec/info_active_record.rb +37 -0
- data/spec/info_active_record_example.rb +37 -0
- data/spec/info_active_record_shippable.rb +36 -0
- data/spec/info_mysql_example.rb +24 -6
- data/spec/info_mysql_shippable.rb +23 -0
- data/spec/info_sqlite3.rb +23 -15
- data/spec/model_handler_spec.rb +84 -84
- data/spec/spec_helper.rb +6 -6
- data/spec/support/driver_collection.rb +288 -0
- data/spec/support/driver_columns_collection.rb +49 -0
- data/spec/support/driver_indexes_collection.rb +49 -0
- data/spec/support/driver_tables_collection.rb +73 -0
- metadata +100 -102
- data/README.rdoc +0 -136
- data/spec/baza_spec.rb +0 -410
- data/spec/db_spec_encoding_test_file.txt +0 -1
@@ -3,7 +3,7 @@ require "monitor"
|
|
3
3
|
#This class handels various MySQL-table-specific behaviour.
|
4
4
|
class Baza::Driver::Mysql::Tables
|
5
5
|
attr_reader :db, :list
|
6
|
-
|
6
|
+
|
7
7
|
#Constructor. This should not be called manually.
|
8
8
|
def initialize(args)
|
9
9
|
@args = args
|
@@ -13,42 +13,42 @@ class Baza::Driver::Mysql::Tables
|
|
13
13
|
@list = Wref_map.new
|
14
14
|
@list_should_be_reloaded = true
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
#Cleans the wref-map.
|
18
18
|
def clean
|
19
19
|
@list.clean
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
#Returns a table by the given table-name.
|
23
23
|
def [](table_name)
|
24
24
|
table_name = table_name.to_sym
|
25
|
-
|
25
|
+
|
26
26
|
begin
|
27
27
|
return @list[table_name]
|
28
28
|
rescue Wref::Recycled
|
29
29
|
#ignore.
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
self.list(:name => table_name) do |table_obj|
|
33
33
|
return table_obj if table_obj.name == table_name
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
raise Errno::ENOENT, "Table was not found: #{table_name}."
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
#Yields the tables of the current database.
|
40
40
|
def list(args = {})
|
41
41
|
ret = {} unless block_given?
|
42
|
-
|
42
|
+
|
43
43
|
sql = "SHOW TABLE STATUS"
|
44
44
|
sql << " WHERE `Name` = '#{@db.esc(args[:name])}'" if args[:name]
|
45
|
-
|
45
|
+
|
46
46
|
@list_mutex.synchronize do
|
47
47
|
@db.q(sql) do |d_tables|
|
48
48
|
raise "No name was given from: #{d_tables}" unless d_tables.is_a?(Hash) && d_tables[:Name]
|
49
49
|
name = d_tables[:Name].to_sym
|
50
50
|
obj = @list.get!(name)
|
51
|
-
|
51
|
+
|
52
52
|
if !obj
|
53
53
|
obj = Baza::Driver::Mysql::Tables::Table.new(
|
54
54
|
:db => @db,
|
@@ -57,7 +57,7 @@ class Baza::Driver::Mysql::Tables
|
|
57
57
|
)
|
58
58
|
@list[name] = obj
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
if block_given?
|
62
62
|
yield(obj)
|
63
63
|
else
|
@@ -65,23 +65,23 @@ class Baza::Driver::Mysql::Tables
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
if block_given?
|
70
70
|
return nil
|
71
71
|
else
|
72
72
|
return ret
|
73
73
|
end
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
CREATE_ALLOWED_KEYS = [:columns, :indexes, :temp, :return_sql]
|
77
77
|
#Creates a new table by the given name and data.
|
78
78
|
def create(name, data, args = nil)
|
79
79
|
raise "No columns was given for '#{name}'." if !data[:columns] or data[:columns].empty?
|
80
|
-
|
80
|
+
|
81
81
|
sql = "CREATE"
|
82
82
|
sql << " TEMPORARY" if data[:temp]
|
83
83
|
sql << " TABLE `#{name}` ("
|
84
|
-
|
84
|
+
|
85
85
|
first = true
|
86
86
|
data[:columns].each do |col_data|
|
87
87
|
sql << ", " if !first
|
@@ -89,7 +89,7 @@ class Baza::Driver::Mysql::Tables
|
|
89
89
|
col_data.delete(:after) if col_data[:after]
|
90
90
|
sql << @db.cols.data_sql(col_data)
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
if data[:indexes] and !data[:indexes].empty?
|
94
94
|
sql << ", "
|
95
95
|
sql << Baza::Driver::Mysql::Tables::Table.create_indexes(data[:indexes], {
|
@@ -100,20 +100,20 @@ class Baza::Driver::Mysql::Tables
|
|
100
100
|
:table_name => name
|
101
101
|
})
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
104
|
sql << ")"
|
105
|
-
|
105
|
+
|
106
106
|
return [sql] if args and args[:return_sql]
|
107
107
|
@db.query(sql)
|
108
108
|
end
|
109
|
-
|
109
|
+
|
110
110
|
private
|
111
|
-
|
111
|
+
|
112
112
|
def add_to_list(table)
|
113
113
|
raise "Already exists: '#{table.name}'." if @list.key?(table.name) and @list[table.name].__id__ != table.__id__
|
114
114
|
@list[table.name] = table
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
def remove_from_list(table)
|
118
118
|
raise "Table not in list: '#{table.name}'." if !@list.key?(table.name)
|
119
119
|
@list.delete(table.name)
|
@@ -122,7 +122,7 @@ end
|
|
122
122
|
|
123
123
|
class Baza::Driver::Mysql::Tables::Table
|
124
124
|
attr_reader :list, :name
|
125
|
-
|
125
|
+
|
126
126
|
def initialize(args)
|
127
127
|
@args = args
|
128
128
|
@db = args[:db]
|
@@ -132,65 +132,65 @@ class Baza::Driver::Mysql::Tables::Table
|
|
132
132
|
@indexes_list = Wref_map.new
|
133
133
|
@name = @data[:Name].to_sym
|
134
134
|
@tables = args[:tables]
|
135
|
-
|
135
|
+
|
136
136
|
raise "Could not figure out name from: '#{@data}'." if @data[:Name].to_s.strip.length <= 0
|
137
137
|
end
|
138
|
-
|
138
|
+
|
139
139
|
def reload
|
140
140
|
@data = @db.q("SHOW TABLE STATUS WHERE `Name` = '#{@db.esc(self.name)}'").fetch
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
#Used to validate in Knj::Wrap_map.
|
144
144
|
def __object_unique_id__
|
145
145
|
return @data[:Name]
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
def drop
|
149
149
|
raise "Cant drop native table: '#{self.name}'." if self.native?
|
150
150
|
@db.query("DROP TABLE `#{@db.esc_table(self.name)}`")
|
151
151
|
@tables.__send__(:remove_from_list, self)
|
152
152
|
return nil
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
#Returns true if the table is safe to drop.
|
156
156
|
def native?
|
157
157
|
return true if @db.q("SELECT DATABASE() AS db").fetch[:db] == "mysql"
|
158
158
|
return false
|
159
159
|
end
|
160
|
-
|
160
|
+
|
161
161
|
def optimize
|
162
162
|
@db.query("OPTIMIZE TABLE `#{@db.esc_table(self.name)}`")
|
163
163
|
return self
|
164
164
|
end
|
165
|
-
|
165
|
+
|
166
166
|
def rows_count
|
167
167
|
return @db.q("SELECT COUNT(*) AS count FROM `#{@db.esc_table(self.name)}`").fetch[:count].to_i
|
168
168
|
end
|
169
|
-
|
169
|
+
|
170
170
|
def column(name)
|
171
171
|
name = name.to_sym
|
172
|
-
|
172
|
+
|
173
173
|
if col = @list.get!(name)
|
174
174
|
return @list[name]
|
175
175
|
end
|
176
|
-
|
176
|
+
|
177
177
|
self.columns(:name => name) do |col|
|
178
178
|
return col if col.name == name
|
179
179
|
end
|
180
|
-
|
180
|
+
|
181
181
|
raise Errno::ENOENT, "Column not found: '#{name}'."
|
182
182
|
end
|
183
|
-
|
183
|
+
|
184
184
|
def columns(args = nil)
|
185
185
|
@db.cols
|
186
186
|
ret = {}
|
187
187
|
sql = "SHOW FULL COLUMNS FROM `#{@db.esc_table(self.name)}`"
|
188
188
|
sql << " WHERE `Field` = '#{@db.esc(args[:name])}'" if args and args.key?(:name)
|
189
|
-
|
189
|
+
|
190
190
|
@db.q(sql) do |d_cols|
|
191
191
|
name = d_cols[:Field].to_sym
|
192
192
|
obj = @list.get!(name)
|
193
|
-
|
193
|
+
|
194
194
|
if !obj
|
195
195
|
obj = Baza::Driver::Mysql::Columns::Column.new(
|
196
196
|
:table_name => self.name,
|
@@ -199,71 +199,70 @@ class Baza::Driver::Mysql::Tables::Table
|
|
199
199
|
)
|
200
200
|
@list[name] = obj
|
201
201
|
end
|
202
|
-
|
202
|
+
|
203
203
|
if block_given?
|
204
204
|
yield(obj)
|
205
205
|
else
|
206
206
|
ret[name] = obj
|
207
207
|
end
|
208
208
|
end
|
209
|
-
|
209
|
+
|
210
210
|
if block_given?
|
211
211
|
return nil
|
212
212
|
else
|
213
213
|
return ret
|
214
214
|
end
|
215
215
|
end
|
216
|
-
|
217
|
-
def indexes
|
216
|
+
|
217
|
+
def indexes args = nil
|
218
218
|
@db.indexes
|
219
219
|
ret = {}
|
220
|
-
|
221
|
-
sql = "SHOW INDEX FROM `#{@db.esc_table(
|
222
|
-
sql << " WHERE `Key_name` = '#{@db.esc(args[:name])}'" if args
|
223
|
-
|
220
|
+
|
221
|
+
sql = "SHOW INDEX FROM `#{@db.esc_table(name)}`"
|
222
|
+
sql << " WHERE `Key_name` = '#{@db.esc(args[:name])}'" if args && args.key?(:name)
|
223
|
+
|
224
224
|
@db.q(sql) do |d_indexes|
|
225
225
|
next if d_indexes[:Key_name] == "PRIMARY"
|
226
|
-
|
227
226
|
obj = @indexes_list.get!(d_indexes[:Key_name].to_s)
|
228
|
-
|
229
|
-
|
227
|
+
|
228
|
+
unless obj
|
230
229
|
obj = Baza::Driver::Mysql::Indexes::Index.new(
|
231
|
-
:
|
232
|
-
:
|
233
|
-
:
|
230
|
+
table_name: name,
|
231
|
+
db: @db,
|
232
|
+
data: d_indexes
|
234
233
|
)
|
235
234
|
obj.columns << d_indexes[:Column_name]
|
236
235
|
@indexes_list[d_indexes[:Key_name].to_s] = obj
|
237
236
|
end
|
238
|
-
|
237
|
+
|
239
238
|
if block_given?
|
240
|
-
yield
|
239
|
+
yield obj
|
241
240
|
else
|
242
241
|
ret[d_indexes[:Key_name].to_s] = obj
|
243
242
|
end
|
244
243
|
end
|
245
|
-
|
244
|
+
|
246
245
|
if block_given?
|
247
246
|
return nil
|
248
247
|
else
|
249
248
|
return ret
|
250
249
|
end
|
251
250
|
end
|
252
|
-
|
251
|
+
|
253
252
|
def index(name)
|
254
253
|
name = name.to_s
|
255
|
-
|
254
|
+
|
256
255
|
if index = @indexes_list.get!(name)
|
257
256
|
return index
|
258
257
|
end
|
259
|
-
|
258
|
+
|
260
259
|
self.indexes(:name => name) do |index|
|
261
260
|
return index if index.name.to_s == name
|
262
261
|
end
|
263
|
-
|
262
|
+
|
264
263
|
raise Errno::ENOENT, "Index not found: #{name}."
|
265
264
|
end
|
266
|
-
|
265
|
+
|
267
266
|
def create_columns(col_arr)
|
268
267
|
@db.transaction do
|
269
268
|
col_arr.each do |col_data|
|
@@ -272,35 +271,35 @@ class Baza::Driver::Mysql::Tables::Table
|
|
272
271
|
end
|
273
272
|
end
|
274
273
|
end
|
275
|
-
|
274
|
+
|
276
275
|
def create_indexes(index_arr, args = {})
|
277
276
|
return Baza::Driver::Mysql::Tables::Table.create_indexes(index_arr, args.merge(:table_name => self.name, :db => @db))
|
278
277
|
end
|
279
|
-
|
278
|
+
|
280
279
|
def self.create_indexes(index_arr, args = {})
|
281
280
|
db = args[:db]
|
282
|
-
|
281
|
+
|
283
282
|
if args[:return_sql]
|
284
283
|
sql = ""
|
285
284
|
first = true
|
286
285
|
end
|
287
|
-
|
286
|
+
|
288
287
|
index_arr.each do |index_data|
|
289
288
|
if !args[:return_sql]
|
290
289
|
sql = ""
|
291
290
|
end
|
292
|
-
|
291
|
+
|
293
292
|
if args[:create] or !args.key?(:create)
|
294
293
|
sql << "CREATE"
|
295
294
|
end
|
296
|
-
|
295
|
+
|
297
296
|
if index_data.is_a?(String) or index_data.is_a?(Symbol)
|
298
297
|
index_data = {:name => index_data, :columns => [index_data]}
|
299
298
|
end
|
300
|
-
|
299
|
+
|
301
300
|
raise "No name was given: '#{index_data}'." if !index_data.key?(:name) or index_data[:name].to_s.strip.empty?
|
302
301
|
raise "No columns was given on index: '#{index_data[:name]}'." if !index_data[:columns] or index_data[:columns].empty?
|
303
|
-
|
302
|
+
|
304
303
|
if args[:return_sql]
|
305
304
|
if first
|
306
305
|
first = false
|
@@ -308,167 +307,176 @@ class Baza::Driver::Mysql::Tables::Table
|
|
308
307
|
sql << ", "
|
309
308
|
end
|
310
309
|
end
|
311
|
-
|
310
|
+
|
312
311
|
sql << " UNIQUE" if index_data[:unique]
|
313
312
|
sql << " INDEX `#{db.esc_col(index_data[:name])}`"
|
314
|
-
|
313
|
+
|
315
314
|
if args[:on_table] or !args.key?(:on_table)
|
316
315
|
sql << " ON `#{db.esc_table(args[:table_name])}`"
|
317
316
|
end
|
318
|
-
|
317
|
+
|
319
318
|
sql << " ("
|
320
|
-
|
319
|
+
|
321
320
|
first = true
|
322
321
|
index_data[:columns].each do |col_name|
|
323
322
|
sql << ", " if !first
|
324
323
|
first = false if first
|
325
|
-
|
324
|
+
|
326
325
|
sql << "`#{db.esc_col(col_name)}`"
|
327
326
|
end
|
328
|
-
|
327
|
+
|
329
328
|
sql << ")"
|
330
|
-
|
329
|
+
|
331
330
|
if !args[:return_sql]
|
332
331
|
db.query(sql)
|
333
332
|
end
|
334
333
|
end
|
335
|
-
|
334
|
+
|
336
335
|
if args[:return_sql]
|
337
336
|
return sql
|
338
337
|
else
|
339
338
|
return nil
|
340
339
|
end
|
341
340
|
end
|
342
|
-
|
341
|
+
|
343
342
|
def rename(newname)
|
344
343
|
newname = newname.to_sym
|
345
344
|
oldname = self.name
|
346
|
-
|
345
|
+
|
347
346
|
@tables.__send__(:remove_from_list, self)
|
348
347
|
@db.query("ALTER TABLE `#{@db.esc_table(oldname)}` RENAME TO `#{@db.esc_table(newname)}`")
|
349
|
-
|
348
|
+
|
350
349
|
@data[:Name] = newname
|
351
350
|
@name = newname
|
352
351
|
@tables.__send__(:add_to_list, self)
|
352
|
+
|
353
|
+
@list.each do |name, column|
|
354
|
+
column.instance_variable_set(:@name, newname)
|
355
|
+
column.args[:Field] = newname
|
356
|
+
end
|
357
|
+
|
358
|
+
@indexes_list.each do |name, index|
|
359
|
+
index.args[:table_name] = newname
|
360
|
+
end
|
353
361
|
end
|
354
|
-
|
362
|
+
|
355
363
|
def truncate
|
356
364
|
@db.query("TRUNCATE `#{@db.esc_table(self.name)}`")
|
357
365
|
return self
|
358
366
|
end
|
359
|
-
|
367
|
+
|
360
368
|
def data
|
361
369
|
ret = {
|
362
370
|
:name => self.name,
|
363
371
|
:columns => [],
|
364
372
|
:indexes => []
|
365
373
|
}
|
366
|
-
|
374
|
+
|
367
375
|
columns.each do |name, column|
|
368
376
|
ret[:columns] << column.data
|
369
377
|
end
|
370
|
-
|
378
|
+
|
371
379
|
indexes.each do |name, index|
|
372
380
|
ret[:indexes] << index.data if name != "PRIMARY"
|
373
381
|
end
|
374
|
-
|
382
|
+
|
375
383
|
return ret
|
376
384
|
end
|
377
|
-
|
385
|
+
|
378
386
|
def insert(data)
|
379
387
|
@db.insert(self.name, data)
|
380
388
|
end
|
381
|
-
|
389
|
+
|
382
390
|
def clone(newname, args = {})
|
383
391
|
raise "Invalid name." if newname.to_s.strip.empty?
|
384
|
-
|
392
|
+
|
385
393
|
sql = "CREATE TABLE `#{@db.esc_table(newname)}` ("
|
386
394
|
first = true
|
387
395
|
pkey_found = false
|
388
396
|
pkeys = []
|
389
|
-
|
390
|
-
|
397
|
+
|
398
|
+
columns do |col|
|
391
399
|
sql << ", " if !first
|
392
400
|
first = false if first
|
393
|
-
|
401
|
+
|
394
402
|
col_data = col.data
|
395
403
|
pkey_found = true if !pkey_found and col_data[:primarykey] and args[:force_single_pkey]
|
396
|
-
|
404
|
+
|
397
405
|
if args[:no_pkey] or (pkey_found and col_data[:primarykey] and args[:force_single_pkey])
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
406
|
+
col_data[:primarykey] = false
|
407
|
+
end
|
408
|
+
|
409
|
+
if col_data[:primarykey]
|
410
|
+
pkeys << col_data[:name]
|
411
|
+
col_data.delete(:primarykey)
|
412
|
+
end
|
413
|
+
|
414
|
+
if args[:all_cols_storage]
|
415
|
+
col_data[:storage] = args[:all_cols_storage]
|
416
|
+
end
|
417
|
+
|
410
418
|
sql << @db.cols.data_sql(col_data)
|
411
419
|
end
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
420
|
+
|
421
|
+
unless pkeys.empty?
|
422
|
+
sql << ", PRIMARY KEY ("
|
423
|
+
|
424
|
+
first = true
|
425
|
+
pkeys.each do |pkey|
|
426
|
+
sql << ", " if !first
|
427
|
+
first = false if first
|
428
|
+
sql << "`#{@db.esc_col(pkey)}`"
|
429
|
+
end
|
430
|
+
|
431
|
+
sql << ")"
|
424
432
|
end
|
425
|
-
|
433
|
+
|
426
434
|
sql << ")"
|
427
435
|
sql << " TABLESPACE #{args[:tablespace]}" if args[:tablespace]
|
428
436
|
sql << " ENGINE=#{args[:engine]}" if args[:engine]
|
429
437
|
sql << ";"
|
430
|
-
|
438
|
+
|
431
439
|
#Create table.
|
432
440
|
@db.query(sql)
|
433
|
-
|
434
|
-
|
441
|
+
|
442
|
+
|
435
443
|
#Insert data of previous data in a single query.
|
436
444
|
@db.query("INSERT INTO `#{@db.esc_table(newname)}` SELECT * FROM `#{@db.esc_table(self.name)}`")
|
437
|
-
|
438
|
-
|
445
|
+
|
446
|
+
|
439
447
|
#Create indexes.
|
440
448
|
new_table = @db.tables[newname]
|
441
449
|
indexes_list = []
|
442
|
-
|
443
|
-
|
450
|
+
indexes do |index|
|
451
|
+
indexes_list << index.data unless index.primary?
|
444
452
|
end
|
445
|
-
|
453
|
+
|
446
454
|
new_table.create_indexes(indexes_list)
|
447
|
-
|
448
|
-
|
455
|
+
|
456
|
+
|
449
457
|
#Return new table.
|
450
458
|
return new_table
|
451
459
|
end
|
452
|
-
|
460
|
+
|
453
461
|
#Returns the current engine of the table.
|
454
462
|
def engine
|
455
463
|
return @data[:Engine]
|
456
464
|
end
|
457
|
-
|
465
|
+
|
458
466
|
#Changes the engine for a table.
|
459
467
|
def engine=(newengine)
|
460
|
-
|
461
|
-
|
462
|
-
|
468
|
+
raise "Invalid engine: '#{newengine}'." if !newengine.to_s.match(/^[A-z]+$/)
|
469
|
+
@db.query("ALTER TABLE `#{@db.esc_table(self.name)}` ENGINE = #{newengine}") if self.engine.to_s != newengine.to_s
|
470
|
+
@data[:Engine] = newengine
|
463
471
|
end
|
464
|
-
|
472
|
+
|
465
473
|
private
|
466
|
-
|
474
|
+
|
467
475
|
def remove_column_from_list(col)
|
468
476
|
raise "Column not found: '#{col.name}'." if !@list.key?(col.name)
|
469
477
|
@list.delete(col.name)
|
470
478
|
end
|
471
|
-
|
479
|
+
|
472
480
|
def add_column_to_list(col)
|
473
481
|
raise "Column already exists: '#{col.name}'." if @list.key?(col.name)
|
474
482
|
@list[col.name] = col
|
@@ -5,25 +5,53 @@ class Baza::Driver::Sqlite3::Indexes
|
|
5
5
|
end
|
6
6
|
|
7
7
|
class Baza::Driver::Sqlite3::Indexes::Index
|
8
|
-
attr_reader :columns
|
9
|
-
|
8
|
+
attr_reader :args, :columns
|
9
|
+
|
10
10
|
def initialize(args)
|
11
11
|
@args = args
|
12
12
|
@columns = []
|
13
|
+
@db = args[:db]
|
13
14
|
end
|
14
|
-
|
15
|
+
|
15
16
|
def name
|
16
17
|
return @args[:data][:name]
|
17
18
|
end
|
18
|
-
|
19
|
+
|
20
|
+
def table_name
|
21
|
+
return @args[:table_name]
|
22
|
+
end
|
23
|
+
|
24
|
+
def table
|
25
|
+
return @db.tables[table_name]
|
26
|
+
end
|
27
|
+
|
19
28
|
def drop
|
20
|
-
@
|
29
|
+
@db.query("DROP INDEX `#{name}`")
|
21
30
|
end
|
22
|
-
|
31
|
+
|
32
|
+
def rename newname
|
33
|
+
newname = newname.to_sym
|
34
|
+
|
35
|
+
create_args = data
|
36
|
+
create_args[:name] = newname
|
37
|
+
|
38
|
+
drop
|
39
|
+
table.create_indexes([create_args])
|
40
|
+
@args[:data][:name] = newname
|
41
|
+
end
|
42
|
+
|
23
43
|
def data
|
24
44
|
return {
|
25
|
-
:
|
26
|
-
:
|
45
|
+
name: name,
|
46
|
+
columns: @columns
|
27
47
|
}
|
28
48
|
end
|
29
|
-
|
49
|
+
|
50
|
+
def column_names
|
51
|
+
@columns
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
"#<Baza::Driver::Sqlite3::Index name: \"#{name}\", columns: #{@columns}>"
|
56
|
+
end
|
57
|
+
end
|