baza 0.0.20 → 0.0.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +84 -0
  3. data/.rubocop_todo.yml +17 -135
  4. data/.travis.yml +21 -0
  5. data/Gemfile +10 -7
  6. data/Gemfile.lock +39 -44
  7. data/README.md +61 -3
  8. data/VERSION +1 -1
  9. data/baza.gemspec +146 -98
  10. data/config/best_project_practice_rubocop.yml +8 -0
  11. data/config/best_project_practice_rubocop_todo.yml +6 -0
  12. data/lib/baza.rb +8 -12
  13. data/lib/baza/base_sql_driver.rb +198 -52
  14. data/lib/baza/cloner.rb +1 -0
  15. data/lib/baza/column.rb +26 -0
  16. data/lib/baza/database.rb +19 -3
  17. data/lib/baza/db.rb +69 -271
  18. data/lib/baza/driver.rb +1 -6
  19. data/lib/baza/{drivers → driver}/active_record.rb +65 -21
  20. data/lib/baza/{drivers → driver}/active_record/columns.rb +0 -0
  21. data/lib/baza/driver/active_record/commands.rb +10 -0
  22. data/lib/baza/driver/active_record/databases.rb +10 -0
  23. data/lib/baza/{drivers → driver}/active_record/indexes.rb +0 -0
  24. data/lib/baza/{drivers → driver}/active_record/result.rb +3 -1
  25. data/lib/baza/{drivers → driver}/active_record/tables.rb +0 -0
  26. data/lib/baza/driver/active_record/users.rb +12 -0
  27. data/lib/baza/{drivers → driver}/mysql.rb +9 -26
  28. data/lib/baza/{drivers → driver}/mysql/column.rb +14 -35
  29. data/lib/baza/{drivers → driver}/mysql/columns.rb +9 -12
  30. data/lib/baza/driver/mysql/commands.rb +39 -0
  31. data/lib/baza/driver/mysql/database.rb +64 -0
  32. data/lib/baza/driver/mysql/databases.rb +63 -0
  33. data/lib/baza/{drivers → driver}/mysql/index.rb +0 -0
  34. data/lib/baza/{drivers → driver}/mysql/indexes.rb +0 -0
  35. data/lib/baza/{drivers → driver}/mysql/result.rb +15 -7
  36. data/lib/baza/{drivers → driver}/mysql/sqlspecs.rb +0 -0
  37. data/lib/baza/{drivers → driver}/mysql/table.rb +27 -43
  38. data/lib/baza/{drivers → driver}/mysql/tables.rb +5 -34
  39. data/lib/baza/{drivers → driver}/mysql/unbuffered_result.rb +8 -2
  40. data/lib/baza/driver/mysql/user.rb +22 -0
  41. data/lib/baza/driver/mysql/users.rb +39 -0
  42. data/lib/baza/{drivers → driver}/mysql2.rb +19 -49
  43. data/lib/baza/{drivers → driver}/mysql2/column.rb +0 -0
  44. data/lib/baza/{drivers → driver}/mysql2/columns.rb +0 -0
  45. data/lib/baza/driver/mysql2/commands.rb +2 -0
  46. data/lib/baza/{drivers → driver}/mysql2/database.rb +0 -0
  47. data/lib/baza/{drivers → driver}/mysql2/databases.rb +0 -0
  48. data/lib/baza/{drivers → driver}/mysql2/index.rb +0 -0
  49. data/lib/baza/{drivers → driver}/mysql2/indexes.rb +0 -0
  50. data/lib/baza/{drivers → driver}/mysql2/result.rb +3 -1
  51. data/lib/baza/{drivers → driver}/mysql2/table.rb +0 -0
  52. data/lib/baza/{drivers → driver}/mysql2/tables.rb +0 -0
  53. data/lib/baza/driver/mysql2/user.rb +2 -0
  54. data/lib/baza/driver/mysql2/users.rb +2 -0
  55. data/lib/baza/{drivers → driver}/mysql_java.rb +60 -38
  56. data/lib/baza/{drivers → driver}/mysql_java/column.rb +0 -0
  57. data/lib/baza/{drivers → driver}/mysql_java/columns.rb +0 -0
  58. data/lib/baza/driver/mysql_java/commands.rb +2 -0
  59. data/lib/baza/driver/mysql_java/database.rb +2 -0
  60. data/lib/baza/driver/mysql_java/databases.rb +2 -0
  61. data/lib/baza/{drivers → driver}/mysql_java/index.rb +0 -0
  62. data/lib/baza/{drivers → driver}/mysql_java/indexes.rb +0 -0
  63. data/lib/baza/{drivers → driver}/mysql_java/table.rb +0 -0
  64. data/lib/baza/{drivers → driver}/mysql_java/tables.rb +0 -0
  65. data/lib/baza/driver/mysql_java/user.rb +2 -0
  66. data/lib/baza/driver/mysql_java/users.rb +2 -0
  67. data/lib/baza/driver/pg.rb +80 -0
  68. data/lib/baza/driver/pg/column.rb +125 -0
  69. data/lib/baza/driver/pg/columns.rb +37 -0
  70. data/lib/baza/driver/pg/commands.rb +35 -0
  71. data/lib/baza/driver/pg/create_index_sql_creator.rb +51 -0
  72. data/lib/baza/driver/pg/database.rb +89 -0
  73. data/lib/baza/driver/pg/databases.rb +79 -0
  74. data/lib/baza/driver/pg/index.rb +35 -0
  75. data/lib/baza/driver/pg/indexes.rb +5 -0
  76. data/lib/baza/driver/pg/result.rb +139 -0
  77. data/lib/baza/driver/pg/table.rb +184 -0
  78. data/lib/baza/driver/pg/tables.rb +45 -0
  79. data/lib/baza/{drivers → driver}/sqlite3.rb +6 -24
  80. data/lib/baza/{drivers → driver}/sqlite3/column.rb +22 -24
  81. data/lib/baza/{drivers → driver}/sqlite3/columns.rb +6 -6
  82. data/lib/baza/driver/sqlite3/commands.rb +28 -0
  83. data/lib/baza/{drivers → driver}/sqlite3/database.rb +0 -0
  84. data/lib/baza/{drivers → driver}/sqlite3/databases.rb +0 -1
  85. data/lib/baza/{drivers → driver}/sqlite3/index.rb +0 -0
  86. data/lib/baza/{drivers → driver}/sqlite3/indexes.rb +0 -0
  87. data/lib/baza/{drivers → driver}/sqlite3/result.rb +14 -6
  88. data/lib/baza/{drivers → driver}/sqlite3/sqlspecs.rb +0 -0
  89. data/lib/baza/{drivers → driver}/sqlite3/table.rb +25 -16
  90. data/lib/baza/{drivers → driver}/sqlite3/tables.rb +5 -6
  91. data/lib/baza/{drivers → driver}/sqlite3/unbuffered_result.rb +8 -2
  92. data/lib/baza/{drivers → driver}/sqlite3_java.rb +13 -23
  93. data/lib/baza/{drivers → driver}/sqlite3_java/column.rb +0 -0
  94. data/lib/baza/{drivers → driver}/sqlite3_java/columns.rb +0 -0
  95. data/lib/baza/driver/sqlite3_java/commands.rb +2 -0
  96. data/lib/baza/{drivers → driver}/sqlite3_java/database.rb +0 -0
  97. data/lib/baza/{drivers → driver}/sqlite3_java/index.rb +0 -0
  98. data/lib/baza/{drivers → driver}/sqlite3_java/indexes.rb +0 -0
  99. data/lib/baza/{drivers → driver}/sqlite3_java/table.rb +0 -0
  100. data/lib/baza/{drivers → driver}/sqlite3_java/tables.rb +0 -0
  101. data/lib/baza/{drivers → driver}/sqlite3_java/unbuffered_result.rb +14 -9
  102. data/lib/baza/{drivers → driver}/sqlite3_rhodes.rb +6 -24
  103. data/lib/baza/errors.rb +2 -0
  104. data/lib/baza/idquery.rb +15 -8
  105. data/lib/baza/index.rb +7 -0
  106. data/lib/baza/jdbc_driver.rb +4 -16
  107. data/lib/baza/jdbc_result.rb +20 -12
  108. data/lib/baza/mysql_base_driver.rb +7 -7
  109. data/lib/baza/query_buffer.rb +20 -19
  110. data/lib/baza/row.rb +16 -16
  111. data/lib/baza/sql_queries.rb +3 -0
  112. data/lib/baza/sql_queries/generic_insert.rb +81 -0
  113. data/lib/baza/sql_queries/generic_update.rb +31 -0
  114. data/lib/baza/sql_queries/mysql_upsert.rb +52 -0
  115. data/lib/baza/sql_queries/mysql_upsert_duplicate_key.rb +57 -0
  116. data/lib/baza/sql_queries/non_atomic_upsert.rb +25 -0
  117. data/lib/baza/sql_queries/postgres_upsert_duplicate_key.rb +118 -0
  118. data/lib/baza/sql_queries/select.rb +170 -0
  119. data/lib/baza/sql_queries/sqlite_upsert_duplicate_key.rb +99 -0
  120. data/lib/baza/table.rb +35 -8
  121. data/spec/active_record/models/user.rb +3 -0
  122. data/spec/{cloner_spec.rb → baza/cloner_spec.rb} +0 -0
  123. data/spec/drivers/active_record_mysql2_spec.rb +5 -3
  124. data/spec/drivers/active_record_mysql_spec.rb +2 -1
  125. data/spec/drivers/active_record_pg_spec.rb +20 -0
  126. data/spec/drivers/active_record_sqlite3_spec.rb +2 -1
  127. data/spec/drivers/mysql2_spec.rb +1 -1
  128. data/spec/drivers/mysql_spec.rb +10 -10
  129. data/spec/drivers/pg_spec.rb +18 -0
  130. data/spec/drivers/sqlite3_spec.rb +7 -8
  131. data/spec/info_active_record_example.rb +1 -1
  132. data/spec/{info_active_record_mysql2.rb → info_active_record_mysql2_example.rb} +3 -2
  133. data/spec/info_active_record_mysql2_travis.rb +35 -0
  134. data/spec/{info_active_record_mysql.rb → info_active_record_mysql_example.rb} +5 -4
  135. data/spec/info_active_record_mysql_travis.rb +36 -0
  136. data/spec/info_active_record_pg_example.rb +36 -0
  137. data/spec/info_active_record_pg_travis.rb +34 -0
  138. data/spec/info_active_record_sqlite3.rb +1 -1
  139. data/spec/info_mysql2_example.rb +1 -3
  140. data/spec/{info_mysql2_shippable.rb → info_mysql2_travis.rb} +2 -4
  141. data/spec/info_mysql_example.rb +1 -3
  142. data/spec/{info_mysql_shippable.rb → info_mysql_travis.rb} +2 -4
  143. data/spec/info_pg_example.rb +22 -0
  144. data/spec/info_pg_travis.rb +20 -0
  145. data/spec/info_sqlite3.rb +1 -3
  146. data/spec/spec_helper.rb +1 -1
  147. data/spec/support/driver_active_record_collection.rb +62 -0
  148. data/spec/support/driver_collection.rb +136 -121
  149. data/spec/support/driver_columns_collection.rb +19 -10
  150. data/spec/support/driver_databases_collection.rb +23 -1
  151. data/spec/support/driver_indexes_collection.rb +2 -2
  152. data/spec/support/driver_tables_collection.rb +24 -4
  153. data/spec/support/driver_users_collection.rb +53 -0
  154. metadata +185 -104
  155. data/lib/baza/drivers/mysql/database.rb +0 -28
  156. data/lib/baza/drivers/mysql/databases.rb +0 -35
  157. data/lib/baza/drivers/mysql_java/database.rb +0 -2
  158. data/lib/baza/drivers/mysql_java/databases.rb +0 -2
  159. data/lib/baza/model.rb +0 -875
  160. data/lib/baza/model_custom.rb +0 -155
  161. data/lib/baza/model_handler.rb +0 -910
  162. data/lib/baza/model_handler_sqlhelper.rb +0 -484
  163. data/lib/baza/revision.rb +0 -383
  164. data/shippable.yml +0 -17
  165. data/spec/info_active_record_mysql2_shippable.rb +0 -34
  166. data/spec/info_active_record_mysql_shippable.rb +0 -34
  167. data/spec/model_handler_spec.rb +0 -431
@@ -1,383 +0,0 @@
1
- # This class takes a database-schema from a hash and runs it against the database. It then checks that the database matches the given schema.
2
- #
3
- #===Examples
4
- # db = Baza::Db.new(type: :sqlite3, path: "test_db.sqlite3")
5
- # schema = {
6
- # "tables" => {
7
- # "User" => {
8
- # "columns" => [
9
- # {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
10
- # {"name" => "name", "type" => "varchar"},
11
- # {"name" => "lastname", "type" => "varchar"}
12
- # ],
13
- # "indexes" => [
14
- # "name",
15
- # {"name" => "lastname", "columns" => ["lastname"]}
16
- # ],
17
- # "on_create_after" => proc{|d|
18
- # d["db"].insert("User", {"name" => "John", "lastname" => "Doe"})
19
- # }
20
- # }
21
- # }
22
- # }
23
- #
24
- # rev = Baza::Revision.new
25
- # rev.init_db("db" => db, "schema" => schema)
26
- class Baza::Revision
27
- def initialize(args = {})
28
- @args = args
29
- end
30
-
31
- INIT_DB_ALLOWED_ARGS = [:db, :schema, :tables_cache, :debug]
32
- INIT_DB_SCHEMA_ALLOWED_ARGS = [:tables]
33
- INIT_DB_TABLE_ALLOWED_ARGS = [:columns, :indexes, :rows, :renames]
34
- # This initializes a database-structure and content based on a schema-hash.
35
- #===Examples
36
- # dbrev = Baza::Revision.new
37
- # dbrev.init_db("db" => db_obj, "schema" => schema_hash)
38
- def init_db(args)
39
- args.each do |key, _val|
40
- raise "Invalid key: '#{key}' (#{key.class.name})." unless INIT_DB_ALLOWED_ARGS.include?(key)
41
- end
42
-
43
- schema = args[:schema]
44
- db = args[:db]
45
- raise "No 'db' was given." unless db
46
-
47
- schema.each do |key, _val|
48
- raise "Invalid key for schema: '#{key}' (#{key.class.name})." unless INIT_DB_SCHEMA_ALLOWED_ARGS.include?(key)
49
- end
50
-
51
- # Check for normal bugs and raise apropiate error.
52
- raise "'schema' argument was not a Hash: '#{schema.class.name}'." unless schema.is_a?(Hash)
53
- raise "No tables given." unless schema.key?(:tables)
54
-
55
- # Cache tables to avoid constant reloading.
56
- if !args.key?(:tables_cache) || args[:tables_cache]
57
- puts "Caching tables-list." if args[:debug]
58
- tables = db.tables.list
59
- else
60
- puts "Skipping tables-cache." if args[:debug]
61
- end
62
-
63
- schema[:tables].each do |table_name, table_data|
64
- table_data.each do |key, _val|
65
- raise "Invalid key: '#{key}' (#{key.class.name})." unless INIT_DB_TABLE_ALLOWED_ARGS.include?(key)
66
- end
67
-
68
- begin
69
- begin
70
- table_name = table_name.to_sym
71
-
72
- puts "Getting table-object for table: '#{table_name}'." if args[:debug]
73
- table_obj = db.tables[table_name]
74
-
75
- # Cache indexes- and column-objects to avoid constant reloading.
76
- cols = table_obj.columns
77
- indexes = table_obj.indexes
78
-
79
- if table_data[:columns]
80
- first_col = true
81
- table_data[:columns].each do |col_data|
82
- begin
83
- col_name = col_data[:name].to_sym
84
- col_obj = table_obj.column(col_name)
85
- col_str = "#{table_name}.#{col_obj.name}"
86
- type = col_data[:type].to_sym
87
- dochange = false
88
-
89
- if !first_col && !col_data[:after]
90
- # Try to find out the previous column - if so we can set "after" which makes the column being created in the right order as defined.
91
- unless col_data.key?(:after)
92
- prev_no = table_data[:columns].index(col_data)
93
- if prev_no.nil? && prev_no != 0
94
- prev_no -= 1
95
- prev_col_data = table_data[:columns][prev_no]
96
- col_data[:after] = prev_col_data[:name]
97
- end
98
- end
99
-
100
- actual_after = nil
101
- set_next = false
102
- cols.each do |_col_name, col_iter|
103
- if col_iter.name == col_obj.name
104
- break
105
- else
106
- actual_after = col_iter.name
107
- end
108
- end
109
-
110
- if actual_after != col_data[:after]
111
- print "Changing '#{col_str}' after from '#{actual_after}' to '#{col_data[:after]}'.\n" if args[:debug]
112
- dochange = true
113
- end
114
- end
115
-
116
- # BUGFIX: When using SQLite3 the primary-column or a autoincr-column may never change type from int... This will break it!
117
- if db.opts[:type] == "sqlite3" && col_obj.type.to_s == "int" && (col_data[:primarykey] || col_data[:autoincr]) && db.int_types.index(col_data[:type].to_s)
118
- type = :int
119
- end
120
-
121
- if type && col_obj.type.to_s != type
122
- print "Type mismatch on #{col_str}: #{col_data[:type]}, #{col_obj.type}\n" if args[:debug]
123
- dochange = true
124
- end
125
-
126
- if col_data.key?(:primarykey) && col_obj.primarykey? != col_data[:primarykey]
127
- print "Primary-key mismatch for #{col_str}: #{col_data[:primarykey]}, #{col_obj.primarykey?}\n" if args[:debug]
128
- dochange = true
129
- end
130
-
131
- if col_data.key?(:autoincr) && col_obj.autoincr? != col_data[:autoincr]
132
- print "Auto-increment mismatch for #{col_str}: #{col_data[:autoincr]}, #{col_obj.autoincr?}\n" if args[:debug]
133
- dochange = true
134
- end
135
-
136
- if col_data.key?(:maxlength) && col_obj.maxlength.to_s != col_data[:maxlength].to_s
137
- print "Maxlength mismatch on #{col_str}: #{col_data[:maxlength]}, #{col_obj.maxlength}\n" if args[:debug]
138
- dochange = true
139
- end
140
-
141
- if col_data.key?(:null) && col_obj.null?.to_s != col_data[:null].to_s
142
- print "Null mismatch on #{col_str}: #{col_data[:null]}, #{col_obj.null?}\n" if args[:debug]
143
- dochange = true
144
- end
145
-
146
- if col_data.key?(:default) && col_obj.default.to_s != col_data[:default].to_s
147
- print "Default mismatch on #{col_str}: #{col_data[:default]}, #{col_obj.default}\n" if args[:debug]
148
- dochange = true
149
- end
150
-
151
- if col_data.key?(:comment) && col_obj.respond_to?(:comment) && col_obj.comment.to_s != col_data[:comment].to_s
152
- print "Comment mismatch on #{col_str}: #{col_data[:comment]}, #{col_obj.comment}\n" if args[:debug]
153
- dochange = true
154
- end
155
-
156
- if col_data.is_a?(Hash) && col_data[:on_before_alter]
157
- callback_data = col_data[:on_before_alter].call(db: db, table: table_obj, col: col_obj, col_data: col_data)
158
- if callback_data && callback_data[:action]
159
- if callback_data[:action] == :retry
160
- raise Baza::Errors::Retry
161
- end
162
- end
163
- end
164
-
165
- if dochange
166
- col_data_change = col_data.clone
167
- col_data_change.delete(:renames)
168
-
169
- col_obj.change(col_data_change)
170
-
171
- # Change has been made - update cache.
172
- cols = table_obj.columns
173
- end
174
-
175
- first_col = false
176
- rescue Baza::Errors::ColumnNotFound => e
177
- print "Column not found: #{table_obj.name}.#{col_data[:name]}.\n" if args[:debug]
178
-
179
- if col_data.key?(:renames)
180
- raise "'renames' was not an array for column '#{table_obj.name}.#{col_data[:name]}'." unless col_data[:renames].is_a?(Array)
181
-
182
- rename_found = false
183
- col_data[:renames].each do |col_name_rename|
184
- begin
185
- col_rename = table_obj.column(col_name_rename)
186
- rescue Baza::Errors::ColumnNotFound
187
- next
188
- end
189
-
190
- print "Rename #{table_obj.name}.#{col_name_rename} to #{table_obj.name}.#{col_data[:name]}\n" if args[:debug]
191
- if col_data.is_a?(Hash) && col_data[:on_before_rename]
192
- col_data[:on_before_rename].call(db: db, table: table_obj, col: col_rename, col_data: col_data)
193
- end
194
-
195
- col_data_change = col_data.clone
196
- col_data_change.delete(:renames)
197
-
198
- col_rename.change(col_data_change)
199
-
200
- # Change has been made - update cache.
201
- cols = table_obj.columns
202
-
203
- if col_data.is_a?(Hash) && col_data[:on_after_rename]
204
- col_data[:on_after_rename].call(db: db, table: table_obj, col: col_rename, col_data: col_data)
205
- end
206
-
207
- rename_found = true
208
- break
209
- end
210
-
211
- retry if rename_found
212
- end
213
-
214
- oncreated = col_data[:on_created]
215
- col_data.delete(:on_created) if col_data[:oncreated]
216
-
217
- col_data_create = col_data
218
- col_data_create.delete(:renames)
219
-
220
- col_obj = table_obj.create_columns([col_data])
221
-
222
- # Change has been made - update cache.
223
- cols = table_obj.columns
224
-
225
- oncreated.call(db: db, table: table_obj) if oncreated
226
- end
227
- end
228
- end
229
-
230
- if table_data[:columns_remove]
231
- table_data[:columns_remove].each do |column_name, column_data|
232
- begin
233
- col_obj = table_obj.column(column_name)
234
- rescue Baza::Errors::ColumnNotFound => e
235
- next
236
- end
237
-
238
- column_data[:callback].call if column_data.is_a?(Hash) && column_data[:callback]
239
- col_obj.drop
240
- end
241
- end
242
-
243
- if table_data[:indexes]
244
- table_data[:indexes].each do |index_data|
245
- if index_data.is_a?(String) || index_data.is_a?(Symbol)
246
- index_data = {name: index_data, columns: [index_data]}
247
- end
248
-
249
- begin
250
- index_obj = table_obj.index(index_data[:name])
251
-
252
- rewrite_index = false
253
- rewrite_index = true if index_data.key?(:unique) && index_data[:unique] != index_obj.unique?
254
-
255
- if rewrite_index
256
- index_obj.drop
257
- table_obj.create_indexes([index_data])
258
- end
259
- rescue Baza::Errors::IndexNotFound => e
260
- table_obj.create_indexes([index_data])
261
- end
262
- end
263
- end
264
-
265
- if table_data[:indexes_remove]
266
- table_data[:indexes_remove].each do |index_name, index_data|
267
- begin
268
- index_obj = table_obj.index(index_name)
269
- rescue Baza::Errors::IndexNotFound => e
270
- next
271
- end
272
-
273
- if index_data.is_a?(Hash) && index_data[:callback]
274
- index_data[:callback].call if index_data[:callback]
275
- end
276
-
277
- index_obj.drop
278
- end
279
- end
280
-
281
- rows_init(db: db, table: table_obj, rows: table_data[:rows]) if table_data && table_data[:rows]
282
- rescue Baza::Errors::TableNotFound => e
283
- puts "Table did not exist: '#{table_name}'." if args[:debug]
284
-
285
- if table_data.key?(:renames)
286
- table_data[:renames].each do |table_name_rename|
287
- begin
288
- puts "Renaming table: '#{table_name_rename}' to '#{table_name}'." if args[:debug]
289
- table_rename = db.tables[table_name_rename.to_sym]
290
- table_rename.rename(table_name)
291
- raise Baza::Errors::Retry
292
- rescue Baza::Errors::TableNotFound
293
- next
294
- end
295
- end
296
- end
297
-
298
- unless table_data.key?(:columns)
299
- puts "Notice: Skipping creation of '#{table_name}' because no columns were given in hash." if args[:debug]
300
- next
301
- end
302
-
303
- if table_data[:on_create]
304
- table_data[:on_create].call(db: db, table_name: table_name, table_data: table_data)
305
- end
306
-
307
- table_data_create = table_data.clone
308
- table_data_create.delete(:rows)
309
-
310
- puts "Creating table: '#{table_name}'." if args[:debug]
311
- db.tables.create(table_name, table_data_create)
312
- table_obj = db.tables[table_name.to_sym]
313
-
314
- if table_data[:on_create_after]
315
- table_data[:on_create_after].call(db: db, table_name: table_name, table_data: table_data)
316
- end
317
-
318
- rows_init(db: db, table: table_obj, rows: table_data[:rows]) if table_data[:rows]
319
- end
320
- rescue Baza::Errors::Retry
321
- retry
322
- end
323
- end
324
-
325
- if schema[:tables_remove]
326
- schema[:tables_remove].each do |table_name, table_data|
327
- begin
328
- table_obj = db.tables[table_name.to_sym]
329
- table_data[:callback].call(db: db, table: table_obj) if table_data.is_a?(Hash) && table_data[:callback]
330
- table_obj.drop
331
- rescue Baza::Errors::TableNotFound => e
332
- next
333
- end
334
- end
335
- end
336
-
337
-
338
- # Free cache.
339
- tables.clear if tables
340
- tables = nil
341
- end
342
-
343
- private
344
-
345
- ROWS_INIT_ALLOWED_ARGS = [:db, :table, :rows]
346
- # This method checks if certain rows are present in a table based on a hash.
347
- def rows_init(args)
348
- args.each do |key, _val|
349
- raise "Invalid key: '#{key}' (#{key.class.name})." unless ROWS_INIT_ALLOWED_ARGS.include?(key)
350
- end
351
-
352
- db = args[:db]
353
- table = args[:table]
354
-
355
- raise "No db given." unless db
356
- raise "No table given." unless table
357
-
358
- args[:rows].each do |row_data|
359
- if row_data[:find_by]
360
- find_by = row_data[:find_by]
361
- elsif row_data[:data]
362
- find_by = row_data[:data]
363
- else
364
- raise "Could not figure out the find-by."
365
- end
366
-
367
- rows_found = 0
368
- args[:db].select(table.name, find_by) do |d_rows|
369
- rows_found += 1
370
-
371
- if Knj::ArrayExt.hash_diff?(Knj::ArrayExt.hash_sym(row_data[:data]), Knj::ArrayExt.hash_sym(d_rows), "h2_to_h1" => false)
372
- print "Data was not right - updating row: #{JSON.generate(row_data[:data])}\n" if args[:debug]
373
- args[:db].update(table.name, row_data[:data], d_rows)
374
- end
375
- end
376
-
377
- if rows_found == 0
378
- print "Inserting row: #{JSON.generate(row_data[:data])}\n" if args[:debug]
379
- table.insert(row_data[:data])
380
- end
381
- end
382
- end
383
- end
@@ -1,17 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - ruby-1.9.3
4
- - ruby-2.1.2
5
- - jruby-head
6
- before_script:
7
- - sudo apt-get -f install libmysql-java
8
- - cp spec/info_mysql_shippable.rb spec/info_mysql.rb
9
- - cp spec/info_mysql2_shippable.rb spec/info_mysql2.rb
10
- - cp spec/info_active_record_shippable_mysql.rb spec/info_active_record_mysql.rb
11
- - cp spec/info_active_record_shippable_mysql2.rb spec/info_active_record_mysql2.rb
12
- - mysql -e 'CREATE DATABASE baza;'
13
- script:
14
- - CODECLIMATE_REPO_TOKEN=98c06de7271764c9cd7bbde7cee4ddfa0d3e7db4bd9933f17779100276672e5f bundle exec rspec
15
- - bundle exec rake best_practice_project:run
16
- notifications:
17
- email: false
@@ -1,34 +0,0 @@
1
- class Baza::InfoActiveRecordMysql2
2
- attr_reader :db
3
-
4
- def self.connection
5
- require "active_record"
6
-
7
- conn_pool ||= ::ActiveRecord::Base.establish_connection(
8
- adapter: "mysql2",
9
- host: "localhost",
10
- database: "baza",
11
- username: "shippa"
12
- )
13
- conn = conn_pool.connection
14
-
15
- {pool: conn_pool, conn: conn}
16
- end
17
-
18
- def initialize
19
- data = Baza::InfoActiveRecord.connection
20
-
21
- @db = Baza::Db.new(
22
- type: :active_record,
23
- conn: data[:conn]
24
- )
25
- end
26
-
27
- def before
28
- @db.tables.list(&:drop)
29
- end
30
-
31
- def after
32
- @db.close
33
- end
34
- end
@@ -1,34 +0,0 @@
1
- class Baza::InfoActiveRecordMysql
2
- attr_reader :db
3
-
4
- def self.connection
5
- require "active_record"
6
-
7
- conn_pool ||= ::ActiveRecord::Base.establish_connection(
8
- adapter: "mysql",
9
- host: "localhost",
10
- database: "baza",
11
- username: "shippa"
12
- )
13
- conn = conn_pool.connection
14
-
15
- {pool: conn_pool, conn: conn}
16
- end
17
-
18
- def initialize
19
- data = Baza::InfoActiveRecord.connection
20
-
21
- @db = Baza::Db.new(
22
- type: :active_record,
23
- conn: data[:conn]
24
- )
25
- end
26
-
27
- def before
28
- @db.tables.list(&:drop)
29
- end
30
-
31
- def after
32
- @db.close
33
- end
34
- end