baza 0.0.19 → 0.0.20
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 +4 -4
- data/.rubocop_todo.yml +157 -0
- data/Gemfile +11 -9
- data/Gemfile.lock +41 -9
- data/README.md +1 -1
- data/Rakefile +19 -16
- data/VERSION +1 -1
- data/baza.gemspec +31 -7
- data/config/best_project_practice_rubocop.yml +2 -0
- data/config/best_project_practice_rubocop_todo.yml +157 -0
- data/lib/baza/base_sql_driver.rb +79 -20
- data/lib/baza/cloner.rb +2 -2
- data/lib/baza/column.rb +6 -0
- data/lib/baza/database.rb +33 -0
- data/lib/baza/database_model.rb +26 -0
- data/lib/baza/database_model_functionality.rb +10 -0
- data/lib/baza/database_model_name.rb +16 -0
- data/lib/baza/db.rb +210 -413
- data/lib/baza/dbtime.rb +20 -20
- data/lib/baza/driver.rb +3 -3
- data/lib/baza/drivers/active_record/columns.rb +1 -1
- data/lib/baza/drivers/active_record/indexes.rb +1 -1
- data/lib/baza/drivers/active_record/result.rb +3 -5
- data/lib/baza/drivers/active_record/tables.rb +2 -2
- data/lib/baza/drivers/active_record.rb +30 -16
- data/lib/baza/drivers/mysql/column.rb +51 -48
- data/lib/baza/drivers/mysql/columns.rb +8 -8
- data/lib/baza/drivers/mysql/database.rb +28 -0
- data/lib/baza/drivers/mysql/databases.rb +35 -0
- data/lib/baza/drivers/mysql/index.rb +32 -22
- data/lib/baza/drivers/mysql/result.rb +24 -24
- data/lib/baza/drivers/mysql/sqlspecs.rb +1 -1
- data/lib/baza/drivers/mysql/table.rb +80 -91
- data/lib/baza/drivers/mysql/tables.rb +30 -32
- data/lib/baza/drivers/mysql/unbuffered_result.rb +5 -5
- data/lib/baza/drivers/mysql.rb +127 -220
- data/lib/baza/drivers/mysql2/database.rb +2 -0
- data/lib/baza/drivers/mysql2/databases.rb +2 -0
- data/lib/baza/drivers/mysql2/result.rb +3 -5
- data/lib/baza/drivers/mysql2.rb +21 -106
- data/lib/baza/drivers/mysql_java/database.rb +2 -0
- data/lib/baza/drivers/mysql_java/databases.rb +2 -0
- data/lib/baza/drivers/mysql_java.rb +16 -12
- data/lib/baza/drivers/sqlite3/column.rb +33 -33
- data/lib/baza/drivers/sqlite3/columns.rb +6 -6
- data/lib/baza/drivers/sqlite3/database.rb +2 -0
- data/lib/baza/drivers/sqlite3/databases.rb +25 -0
- data/lib/baza/drivers/sqlite3/index.rb +20 -6
- data/lib/baza/drivers/sqlite3/result.rb +16 -17
- data/lib/baza/drivers/sqlite3/sqlspecs.rb +1 -1
- data/lib/baza/drivers/sqlite3/table.rb +99 -100
- data/lib/baza/drivers/sqlite3/tables.rb +30 -23
- data/lib/baza/drivers/sqlite3/unbuffered_result.rb +2 -2
- data/lib/baza/drivers/sqlite3.rb +27 -14
- data/lib/baza/drivers/sqlite3_java/database.rb +2 -0
- data/lib/baza/drivers/sqlite3_java/unbuffered_result.rb +2 -2
- data/lib/baza/drivers/sqlite3_java.rb +12 -10
- data/lib/baza/drivers/sqlite3_rhodes.rb +9 -7
- data/lib/baza/dump.rb +55 -55
- data/lib/baza/errors.rb +5 -0
- data/lib/baza/idquery.rb +25 -25
- data/lib/baza/index.rb +6 -0
- data/lib/baza/jdbc_driver.rb +6 -8
- data/lib/baza/jdbc_result.rb +1 -1
- data/lib/baza/model.rb +299 -309
- data/lib/baza/model_custom.rb +74 -72
- data/lib/baza/model_handler.rb +244 -255
- data/lib/baza/model_handler_sqlhelper.rb +122 -132
- data/lib/baza/mysql_base_driver.rb +112 -0
- data/lib/baza/query_buffer.rb +23 -23
- data/lib/baza/result_base.rb +2 -2
- data/lib/baza/revision.rb +67 -67
- data/lib/baza/row.rb +82 -84
- data/lib/baza/sqlspecs.rb +1 -1
- data/lib/baza/table.rb +31 -0
- data/lib/baza.rb +43 -10
- data/shippable.yml +1 -0
- data/spec/cloner_spec.rb +4 -4
- data/spec/drivers/active_record_mysql2_spec.rb +3 -3
- data/spec/drivers/active_record_mysql_spec.rb +2 -2
- data/spec/drivers/active_record_sqlite3_spec.rb +2 -2
- data/spec/drivers/mysql2_spec.rb +1 -0
- data/spec/drivers/mysql_spec.rb +1 -0
- data/spec/drivers/sqlite3_spec.rb +4 -5
- data/spec/info_active_record_example.rb +4 -6
- data/spec/info_active_record_mysql.rb +6 -7
- data/spec/info_active_record_mysql2.rb +2 -4
- data/spec/info_active_record_mysql2_shippable.rb +2 -4
- data/spec/info_active_record_mysql_shippable.rb +2 -4
- data/spec/info_active_record_sqlite3.rb +5 -6
- data/spec/info_mysql2_example.rb +1 -1
- data/spec/info_mysql2_shippable.rb +1 -1
- data/spec/info_mysql_example.rb +1 -1
- data/spec/info_mysql_shippable.rb +1 -1
- data/spec/info_sqlite3.rb +4 -3
- data/spec/model_handler_spec.rb +102 -115
- data/spec/spec_helper.rb +5 -5
- data/spec/support/driver_collection.rb +98 -95
- data/spec/support/driver_columns_collection.rb +18 -22
- data/spec/support/driver_databases_collection.rb +29 -0
- data/spec/support/driver_indexes_collection.rb +7 -6
- data/spec/support/driver_tables_collection.rb +38 -26
- metadata +49 -3
@@ -1,4 +1,4 @@
|
|
1
|
-
#This class controls the results for the normal MySQL-driver.
|
1
|
+
# This class controls the results for the normal MySQL-driver.
|
2
2
|
class Baza::Driver::Mysql::Result < Baza::ResultBase
|
3
3
|
INT_TYPES = {
|
4
4
|
::Mysql::Field::TYPE_DECIMAL => true,
|
@@ -18,25 +18,25 @@ class Baza::Driver::Mysql::Result < Baza::ResultBase
|
|
18
18
|
::Mysql::Field::TYPE_DATE => true
|
19
19
|
}
|
20
20
|
|
21
|
-
#Constructor. This should not be called manually.
|
21
|
+
# Constructor. This should not be called manually.
|
22
22
|
def initialize(driver, result)
|
23
23
|
@driver = driver
|
24
24
|
@result = result
|
25
25
|
@mutex = Mutex.new
|
26
26
|
@type_translation = driver.baza.opts[:type_translation]
|
27
27
|
|
28
|
-
|
29
|
-
@keys = []
|
30
|
-
@types = [] if @type_translation
|
28
|
+
return unless @result
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
@keys = []
|
31
|
+
@types = [] if @type_translation
|
32
|
+
|
33
|
+
@result.fetch_fields.each do |key|
|
34
|
+
@keys << key.name.to_sym
|
35
|
+
@types << key.type if @type_translation
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
#Returns a single result as a hash with symbols as keys.
|
39
|
+
# Returns a single result as a hash with symbols as keys.
|
40
40
|
def fetch
|
41
41
|
fetched = nil
|
42
42
|
@mutex.synchronize do
|
@@ -51,10 +51,10 @@ class Baza::Driver::Mysql::Result < Baza::ResultBase
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
|
54
|
+
Hash[*@keys.zip(fetched).flatten]
|
55
55
|
end
|
56
56
|
|
57
|
-
#Loops over every result yielding it.
|
57
|
+
# Loops over every result yielding it.
|
58
58
|
def each
|
59
59
|
while data = fetch
|
60
60
|
yield data
|
@@ -64,18 +64,18 @@ class Baza::Driver::Mysql::Result < Baza::ResultBase
|
|
64
64
|
private
|
65
65
|
|
66
66
|
def translate_value_to_type(value, type_no)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
67
|
+
return if value == nil
|
68
|
+
|
69
|
+
if INT_TYPES[type_no]
|
70
|
+
return value.to_i
|
71
|
+
elsif FLOAT_TYPES[type_no]
|
72
|
+
return value.to_f
|
73
|
+
elsif TIME_TYPES[type_no]
|
74
|
+
return Time.parse(value)
|
75
|
+
elsif DATE_TYPES[type_no]
|
76
|
+
return Date.parse(value)
|
77
|
+
else
|
78
|
+
return value.to_s
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -2,71 +2,71 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
2
2
|
attr_reader :list, :name
|
3
3
|
|
4
4
|
def initialize(args)
|
5
|
-
@
|
6
|
-
@
|
7
|
-
@data = args[:data]
|
5
|
+
@db = args.fetch(:db)
|
6
|
+
@data = args.fetch(:data)
|
8
7
|
@list = Wref::Map.new
|
9
8
|
@indexes_list = Wref::Map.new
|
10
|
-
@name = @data
|
11
|
-
@tables = args
|
12
|
-
|
13
|
-
raise "Could not figure out name from: '#{@data}'." if @data[:Name].to_s.strip.empty?
|
9
|
+
@name = @data.fetch(:name)
|
10
|
+
@tables = args.fetch(:tables)
|
14
11
|
end
|
15
12
|
|
16
13
|
def reload
|
17
|
-
|
14
|
+
data = @db.q("SHOW TABLE STATUS WHERE `Name` = '#{@db.esc(name)}'").fetch
|
15
|
+
raise Baza::Errors::TableNotFound unless data
|
16
|
+
@data = data
|
17
|
+
self
|
18
18
|
end
|
19
19
|
|
20
|
-
#Used to validate in Wref::Map.
|
20
|
+
# Used to validate in Wref::Map.
|
21
21
|
def __object_unique_id__
|
22
|
-
|
22
|
+
name
|
23
23
|
end
|
24
24
|
|
25
25
|
def drop
|
26
|
-
raise "Cant drop native table: '#{
|
27
|
-
@db.query("DROP TABLE `#{@db.
|
26
|
+
raise "Cant drop native table: '#{name}'." if self.native?
|
27
|
+
@db.query("DROP TABLE `#{@db.escape_table(name)}`")
|
28
28
|
@tables.__send__(:remove_from_list, self)
|
29
|
-
|
29
|
+
nil
|
30
30
|
end
|
31
31
|
|
32
|
-
#Returns true if the table is safe to drop.
|
32
|
+
# Returns true if the table is safe to drop.
|
33
33
|
def native?
|
34
34
|
data = @db.q("SELECT DATABASE() AS db").fetch
|
35
|
-
return true if data
|
36
|
-
|
35
|
+
return true if data.fetch(:db) == "mysql"
|
36
|
+
false
|
37
37
|
end
|
38
38
|
|
39
39
|
def optimize
|
40
|
-
@db.query("OPTIMIZE TABLE `#{@db.
|
41
|
-
|
40
|
+
@db.query("OPTIMIZE TABLE `#{@db.escape_table(name)}`")
|
41
|
+
self
|
42
42
|
end
|
43
43
|
|
44
44
|
def rows_count
|
45
|
-
|
45
|
+
@db.query("SELECT COUNT(*) AS count FROM `#{@db.escape_table(name)}`").fetch.fetch(:count).to_i
|
46
46
|
end
|
47
47
|
|
48
48
|
def column(name)
|
49
|
-
name = name.
|
49
|
+
name = name.to_s
|
50
50
|
|
51
51
|
if col = @list.get(name)
|
52
52
|
return @list[name]
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
|
-
return
|
55
|
+
columns(name: name) do |col_i|
|
56
|
+
return col_i if col_i.name == name
|
57
57
|
end
|
58
58
|
|
59
|
-
raise
|
59
|
+
raise Baza::Errors::ColumnNotFound, "Column not found: '#{name}'"
|
60
60
|
end
|
61
61
|
|
62
62
|
def columns(args = nil)
|
63
63
|
@db.cols
|
64
|
-
ret =
|
65
|
-
sql = "SHOW FULL COLUMNS FROM `#{@db.
|
66
|
-
sql << " WHERE `Field` = '#{@db.esc(args
|
64
|
+
ret = []
|
65
|
+
sql = "SHOW FULL COLUMNS FROM `#{@db.escape_table(name)}`"
|
66
|
+
sql << " WHERE `Field` = '#{@db.esc(args.fetch(:name))}'" if args && args.key?(:name)
|
67
67
|
|
68
68
|
@db.q(sql) do |d_cols|
|
69
|
-
column_name = d_cols
|
69
|
+
column_name = d_cols.fetch(:Field)
|
70
70
|
obj = @list.get(name)
|
71
71
|
|
72
72
|
unless obj
|
@@ -79,9 +79,9 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
79
79
|
end
|
80
80
|
|
81
81
|
if block_given?
|
82
|
-
yield
|
82
|
+
yield obj
|
83
83
|
else
|
84
|
-
ret
|
84
|
+
ret << obj
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -94,14 +94,15 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
94
94
|
|
95
95
|
def indexes(args = nil)
|
96
96
|
@db.indexes
|
97
|
-
ret =
|
97
|
+
ret = []
|
98
98
|
|
99
|
-
sql = "SHOW INDEX FROM `#{@db.
|
100
|
-
sql << " WHERE `Key_name` = '#{@db.esc(args
|
99
|
+
sql = "SHOW INDEX FROM `#{@db.escape_table(name)}`"
|
100
|
+
sql << " WHERE `Key_name` = '#{@db.esc(args.fetch(:name))}'" if args && args.key?(:name)
|
101
101
|
|
102
|
-
@db.
|
102
|
+
@db.query(sql) do |d_indexes|
|
103
103
|
next if d_indexes[:Key_name] == "PRIMARY"
|
104
|
-
|
104
|
+
index_name = d_indexes.fetch(:Key_name)
|
105
|
+
obj = @indexes_list.get(index_name)
|
105
106
|
|
106
107
|
unless obj
|
107
108
|
obj = Baza::Driver::Mysql::Index.new(
|
@@ -109,14 +110,14 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
109
110
|
db: @db,
|
110
111
|
data: d_indexes
|
111
112
|
)
|
112
|
-
obj.columns << d_indexes
|
113
|
-
@indexes_list[
|
113
|
+
obj.columns << d_indexes.fetch(:Column_name)
|
114
|
+
@indexes_list[index_name] = obj
|
114
115
|
end
|
115
116
|
|
116
117
|
if block_given?
|
117
118
|
yield obj
|
118
119
|
else
|
119
|
-
ret
|
120
|
+
ret << obj
|
120
121
|
end
|
121
122
|
end
|
122
123
|
|
@@ -134,24 +135,24 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
134
135
|
return index
|
135
136
|
end
|
136
137
|
|
137
|
-
indexes(name: name) do |
|
138
|
-
return
|
138
|
+
indexes(name: name) do |index_i|
|
139
|
+
return index_i if index_i.name == name
|
139
140
|
end
|
140
141
|
|
141
|
-
raise
|
142
|
+
raise Baza::Errors::IndexNotFound, "Index not found: #{name}."
|
142
143
|
end
|
143
144
|
|
144
145
|
def create_columns(col_arr)
|
145
146
|
@db.transaction do
|
146
147
|
col_arr.each do |col_data|
|
147
|
-
sql = "ALTER TABLE `#{
|
148
|
+
sql = "ALTER TABLE `#{name}` ADD COLUMN #{@db.cols.data_sql(col_data)};"
|
148
149
|
@db.query(sql)
|
149
150
|
end
|
150
151
|
end
|
151
152
|
end
|
152
153
|
|
153
154
|
def create_indexes(index_arr, args = {})
|
154
|
-
|
155
|
+
Baza::Driver::Mysql::Table.create_indexes(index_arr, args.merge(table_name: name, db: @db))
|
155
156
|
end
|
156
157
|
|
157
158
|
def self.create_indexes(index_arr, args = {})
|
@@ -163,20 +164,16 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
163
164
|
end
|
164
165
|
|
165
166
|
index_arr.each do |index_data|
|
166
|
-
|
167
|
-
sql = ""
|
168
|
-
end
|
167
|
+
sql = "" unless args[:return_sql]
|
169
168
|
|
170
|
-
if args[:create] || !args.key?(:create)
|
171
|
-
sql << "CREATE"
|
172
|
-
end
|
169
|
+
sql << "CREATE" if args[:create] || !args.key?(:create)
|
173
170
|
|
174
171
|
if index_data.is_a?(String) || index_data.is_a?(Symbol)
|
175
172
|
index_data = {name: index_data, columns: [index_data]}
|
176
173
|
end
|
177
174
|
|
178
175
|
raise "No name was given: '#{index_data}'." if !index_data.key?(:name) || index_data[:name].to_s.strip.empty?
|
179
|
-
raise "No columns was given on index: '#{index_data
|
176
|
+
raise "No columns was given on index: '#{index_data.fetch(:name)}'." if !index_data[:columns] || index_data[:columns].empty?
|
180
177
|
|
181
178
|
if args[:return_sql]
|
182
179
|
if first
|
@@ -187,87 +184,81 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
187
184
|
end
|
188
185
|
|
189
186
|
sql << " UNIQUE" if index_data[:unique]
|
190
|
-
sql << " INDEX `#{db.
|
187
|
+
sql << " INDEX `#{db.escape_column(index_data.fetch(:name))}`"
|
191
188
|
|
192
189
|
if args[:on_table] || !args.key?(:on_table)
|
193
|
-
sql << " ON `#{db.
|
190
|
+
sql << " ON `#{db.escape_table(args.fetch(:table_name))}`"
|
194
191
|
end
|
195
192
|
|
196
193
|
sql << " ("
|
197
194
|
|
198
195
|
first = true
|
199
196
|
index_data[:columns].each do |col_name|
|
200
|
-
sql << ", "
|
197
|
+
sql << ", " unless first
|
201
198
|
first = false if first
|
202
199
|
|
203
|
-
sql << "`#{db.
|
200
|
+
sql << "`#{db.escape_column(col_name)}`"
|
204
201
|
end
|
205
202
|
|
206
203
|
sql << ")"
|
207
204
|
|
208
|
-
|
209
|
-
db.query(sql)
|
210
|
-
end
|
205
|
+
db.query(sql) unless args[:return_sql]
|
211
206
|
end
|
212
207
|
|
213
|
-
if args[:return_sql]
|
214
|
-
return sql
|
215
|
-
else
|
216
|
-
return nil
|
217
|
-
end
|
208
|
+
sql if args[:return_sql]
|
218
209
|
end
|
219
210
|
|
220
211
|
def rename(newname)
|
221
|
-
newname = newname.
|
212
|
+
newname = newname.to_s
|
222
213
|
oldname = name
|
223
214
|
|
224
215
|
@tables.__send__(:remove_from_list, self)
|
225
|
-
@db.query("ALTER TABLE `#{@db.
|
216
|
+
@db.query("ALTER TABLE `#{@db.escape_table(oldname)}` RENAME TO `#{@db.escape_table(newname)}`")
|
226
217
|
|
227
|
-
@data[:
|
218
|
+
@data[:name] = newname
|
228
219
|
@name = newname
|
229
220
|
@tables.__send__(:add_to_list, self)
|
230
221
|
|
231
|
-
@list.each do |
|
222
|
+
@list.each do |_name, column|
|
232
223
|
column.args[:table_name] = newname
|
233
224
|
end
|
234
225
|
|
235
|
-
@indexes_list.each do |
|
236
|
-
index.
|
226
|
+
@indexes_list.each do |_name, index|
|
227
|
+
index.table_name = newname
|
237
228
|
end
|
238
229
|
end
|
239
230
|
|
240
231
|
def truncate
|
241
|
-
@db.query("TRUNCATE `#{@db.
|
242
|
-
|
232
|
+
@db.query("TRUNCATE `#{@db.escape_table(name)}`")
|
233
|
+
self
|
243
234
|
end
|
244
235
|
|
245
236
|
def data
|
246
237
|
ret = {
|
247
|
-
name:
|
238
|
+
name: name,
|
248
239
|
columns: [],
|
249
240
|
indexes: []
|
250
241
|
}
|
251
242
|
|
252
|
-
columns
|
243
|
+
columns do |column|
|
253
244
|
ret[:columns] << column.data
|
254
245
|
end
|
255
246
|
|
256
|
-
indexes
|
257
|
-
ret[:indexes] << index.data
|
247
|
+
indexes do |index|
|
248
|
+
ret[:indexes] << index.data unless index.name == "PRIMARY"
|
258
249
|
end
|
259
250
|
|
260
|
-
|
251
|
+
ret
|
261
252
|
end
|
262
253
|
|
263
254
|
def insert(data)
|
264
|
-
@db.insert(
|
255
|
+
@db.insert(name, data)
|
265
256
|
end
|
266
257
|
|
267
258
|
def clone(newname, args = {})
|
268
259
|
raise "Invalid name." if newname.to_s.strip.empty?
|
269
260
|
|
270
|
-
sql = "CREATE TABLE `#{@db.
|
261
|
+
sql = "CREATE TABLE `#{@db.escape_table(newname)}` ("
|
271
262
|
first = true
|
272
263
|
pkey_found = false
|
273
264
|
pkeys = []
|
@@ -288,9 +279,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
288
279
|
col_data.delete(:primarykey)
|
289
280
|
end
|
290
281
|
|
291
|
-
if args[:all_cols_storage]
|
292
|
-
col_data[:storage] = args[:all_cols_storage]
|
293
|
-
end
|
282
|
+
col_data[:storage] = args[:all_cols_storage] if args[:all_cols_storage]
|
294
283
|
|
295
284
|
sql << @db.cols.data_sql(col_data)
|
296
285
|
end
|
@@ -302,7 +291,7 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
302
291
|
pkeys.each do |pkey|
|
303
292
|
sql << ", " unless first
|
304
293
|
first = false if first
|
305
|
-
sql << "`#{@db.
|
294
|
+
sql << "`#{@db.escape_column(pkey)}`"
|
306
295
|
end
|
307
296
|
|
308
297
|
sql << ")"
|
@@ -313,15 +302,15 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
313
302
|
sql << " ENGINE=#{args[:engine]}" if args[:engine]
|
314
303
|
sql << ";"
|
315
304
|
|
316
|
-
#Create table.
|
305
|
+
# Create table.
|
317
306
|
@db.query(sql)
|
318
307
|
|
319
308
|
|
320
|
-
#Insert data of previous data in a single query.
|
321
|
-
@db.query("INSERT INTO `#{@db.
|
309
|
+
# Insert data of previous data in a single query.
|
310
|
+
@db.query("INSERT INTO `#{@db.escape_table(newname)}` SELECT * FROM `#{@db.escape_table(name)}`")
|
322
311
|
|
323
312
|
|
324
|
-
#Create indexes.
|
313
|
+
# Create indexes.
|
325
314
|
new_table = @db.tables[newname]
|
326
315
|
indexes_list = []
|
327
316
|
indexes do |index|
|
@@ -331,20 +320,20 @@ class Baza::Driver::Mysql::Table < Baza::Table
|
|
331
320
|
new_table.create_indexes(indexes_list)
|
332
321
|
|
333
322
|
|
334
|
-
#Return new table.
|
335
|
-
|
323
|
+
# Return new table.
|
324
|
+
new_table
|
336
325
|
end
|
337
326
|
|
338
|
-
#Returns the current engine of the table.
|
327
|
+
# Returns the current engine of the table.
|
339
328
|
def engine
|
340
|
-
|
329
|
+
@data[:engine]
|
341
330
|
end
|
342
331
|
|
343
|
-
#Changes the engine for a table.
|
332
|
+
# Changes the engine for a table.
|
344
333
|
def engine=(newengine)
|
345
334
|
raise "Invalid engine: '#{newengine}'." unless newengine.to_s.match(/^[A-z]+$/)
|
346
|
-
@db.query("ALTER TABLE `#{@db.
|
347
|
-
@data[:
|
335
|
+
@db.query("ALTER TABLE `#{@db.escape_table(name)}` ENGINE = #{newengine}") if engine.to_s != newengine.to_s
|
336
|
+
@data[:engine] = newengine
|
348
337
|
end
|
349
338
|
|
350
339
|
private
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require "monitor"
|
2
2
|
|
3
|
-
#This class handels various MySQL-table-specific behaviour.
|
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
|
-
#Constructor. This should not be called manually.
|
7
|
+
# Constructor. This should not be called manually.
|
8
8
|
def initialize(args)
|
9
9
|
@args = args
|
10
10
|
@db = @args[:db]
|
@@ -13,57 +13,57 @@ class Baza::Driver::Mysql::Tables
|
|
13
13
|
@list_should_be_reloaded = true
|
14
14
|
end
|
15
15
|
|
16
|
-
#Cleans the wref-map.
|
16
|
+
# Cleans the wref-map.
|
17
17
|
def clean
|
18
18
|
@list.clean
|
19
19
|
end
|
20
20
|
|
21
|
-
#Returns a table by the given table-name.
|
21
|
+
# Returns a table by the given table-name.
|
22
22
|
def [](table_name)
|
23
|
-
table_name = table_name.
|
23
|
+
table_name = table_name.to_s
|
24
24
|
|
25
25
|
if table = @list[table_name]
|
26
26
|
return table
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
return table_obj if table_obj.name == table_name
|
29
|
+
list(name: table_name) do |table_i|
|
30
|
+
return table_i if table_i.name == table_name
|
32
31
|
end
|
33
32
|
|
34
|
-
|
35
|
-
tables << table_obj.name
|
36
|
-
end
|
37
|
-
|
38
|
-
raise Errno::ENOENT, "Table was not found: '#{table_name}' (#{table_name.class.name}) (tables: #{tables})."
|
33
|
+
raise Baza::Errors::TableNotFound, "Table was not found: '#{table_name}'"
|
39
34
|
end
|
40
35
|
|
41
|
-
#Yields the tables of the current database.
|
36
|
+
# Yields the tables of the current database.
|
42
37
|
def list(args = {})
|
43
|
-
ret =
|
38
|
+
ret = [] unless block_given?
|
39
|
+
|
40
|
+
where_args = {}
|
41
|
+
where_args["TABLE_NAME"] = args.fetch(:name) if args[:name]
|
44
42
|
|
45
|
-
|
46
|
-
|
43
|
+
if args[:database]
|
44
|
+
where_args["TABLE_SCHEMA"] = args.fetch(:database)
|
45
|
+
else
|
46
|
+
where_args["TABLE_SCHEMA"] = @db.opts.fetch(:db)
|
47
|
+
end
|
47
48
|
|
48
49
|
@list_mutex.synchronize do
|
49
|
-
@db.
|
50
|
-
|
51
|
-
name = d_tables[:Name].to_sym
|
50
|
+
@db.select([:information_schema, :tables], where_args) do |d_tables|
|
51
|
+
name = d_tables.fetch(:TABLE_NAME)
|
52
52
|
obj = @list.get(name)
|
53
53
|
|
54
54
|
unless obj
|
55
55
|
obj = Baza::Driver::Mysql::Table.new(
|
56
56
|
db: @db,
|
57
|
-
data: d_tables,
|
57
|
+
data: {name: name, engine: d_tables.fetch(:ENGINE)},
|
58
58
|
tables: self
|
59
59
|
)
|
60
60
|
@list[name] = obj
|
61
61
|
end
|
62
62
|
|
63
63
|
if block_given?
|
64
|
-
yield
|
64
|
+
yield obj
|
65
65
|
else
|
66
|
-
ret
|
66
|
+
ret << obj
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
@@ -76,7 +76,7 @@ class Baza::Driver::Mysql::Tables
|
|
76
76
|
end
|
77
77
|
|
78
78
|
CREATE_ALLOWED_KEYS = [:columns, :indexes, :temp, :return_sql]
|
79
|
-
#Creates a new table by the given name and data.
|
79
|
+
# Creates a new table by the given name and data.
|
80
80
|
def create(name, data, args = nil)
|
81
81
|
raise "No columns was given for '#{name}'." if !data[:columns] || data[:columns].empty?
|
82
82
|
|
@@ -94,13 +94,11 @@ class Baza::Driver::Mysql::Tables
|
|
94
94
|
|
95
95
|
if data[:indexes] && !data[:indexes].empty?
|
96
96
|
sql << ", "
|
97
|
-
sql << Baza::Driver::Mysql::Table.create_indexes(data[:indexes],
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
table_name: name
|
103
|
-
})
|
97
|
+
sql << Baza::Driver::Mysql::Table.create_indexes(data[:indexes], db: @db,
|
98
|
+
return_sql: true,
|
99
|
+
create: false,
|
100
|
+
on_table: false,
|
101
|
+
table_name: name)
|
104
102
|
end
|
105
103
|
|
106
104
|
sql << ")"
|
@@ -109,7 +107,7 @@ class Baza::Driver::Mysql::Tables
|
|
109
107
|
@db.query(sql)
|
110
108
|
end
|
111
109
|
|
112
|
-
|
110
|
+
private
|
113
111
|
|
114
112
|
def add_to_list(table)
|
115
113
|
raise "Already exists: '#{table.name}'." if @list.key?(table.name) && @list[table.name].__id__ != table.__id__
|
@@ -1,6 +1,6 @@
|
|
1
|
-
#This class controls the unbuffered result for the normal MySQL-driver.
|
1
|
+
# This class controls the unbuffered result for the normal MySQL-driver.
|
2
2
|
class Baza::Driver::Mysql::UnbufferedResult < Baza::ResultBase
|
3
|
-
#Constructor. This should not be called manually.
|
3
|
+
# Constructor. This should not be called manually.
|
4
4
|
def initialize(conn, opts, result)
|
5
5
|
@conn = conn
|
6
6
|
@result = result
|
@@ -14,7 +14,7 @@ class Baza::Driver::Mysql::UnbufferedResult < Baza::ResultBase
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
#Returns a single result.
|
17
|
+
# Returns a single result.
|
18
18
|
def fetch
|
19
19
|
if @enum
|
20
20
|
begin
|
@@ -48,7 +48,7 @@ class Baza::Driver::Mysql::UnbufferedResult < Baza::ResultBase
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
#Loops over every single result yielding it.
|
51
|
+
# Loops over every single result yielding it.
|
52
52
|
def each
|
53
53
|
while row = fetch
|
54
54
|
yield row
|
@@ -57,7 +57,7 @@ class Baza::Driver::Mysql::UnbufferedResult < Baza::ResultBase
|
|
57
57
|
|
58
58
|
private
|
59
59
|
|
60
|
-
#Lods the keys for the object.
|
60
|
+
# Lods the keys for the object.
|
61
61
|
def load_keys
|
62
62
|
@keys = []
|
63
63
|
keys = @res.fetch_fields
|