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.
data/spec/baza_spec.rb DELETED
@@ -1,410 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "Baza" do
4
- require "baza"
5
- require "knjrbfw"
6
- require "knj/os"
7
- require "rubygems"
8
- require "tmpdir"
9
-
10
- drivers = []
11
- Baza::Db.drivers.each do |driver_data|
12
- name = driver_data[:name].to_s
13
- const_name = "Info#{name.slice(0, 1).upcase}#{name.slice(1, name.length)}"
14
- require "#{File.dirname(__FILE__)}/info_#{driver_data[:name]}.rb"
15
- raise "Constant was not defined: '#{const_name}'." if !Baza.const_defined?(const_name)
16
-
17
- drivers << {
18
- :const => Baza.const_get(const_name),
19
- }
20
- end
21
-
22
- drivers.each do |driver|
23
- it "should be able to handle various encodings" do
24
- #I never got this test to actually fail... :-(
25
- debug = false
26
-
27
- driver[:const].sample_db do |db|
28
- db.tables.create("test", {
29
- :columns => [
30
- {:name => "id", :type => :int, :autoincr => true, :primarykey => true},
31
- {:name => "text", :type => :varchar}
32
- ]
33
- })
34
-
35
-
36
-
37
- #Get a list of tables and check the list for errors.
38
- list = db.tables.list
39
- raise "Table not found: 'test'." if !list.key?(:test)
40
-
41
- list[:test].name.should eql(:test)
42
-
43
-
44
- #Test revision to create tables, indexes and insert rows.
45
- schema = {
46
- :tables => {
47
- :test_table => {
48
- :columns => [
49
- {:name => "id", :type => :int, :autoincr => true, :primarykey => true},
50
- {:name => "name", :type => :varchar},
51
- {:name => "age", :type => :int},
52
- {:name => "nickname", :type => :varchar}
53
- ],
54
- :indexes => [
55
- "name"
56
- ],
57
- :rows => [
58
- {
59
- :find_by => {"id" => 1},
60
- :data => {"id" => 1, "name" => "trala"}
61
- }
62
- ]
63
- }
64
- }
65
- }
66
-
67
- rev = Baza::Revision.new
68
- rev.init_db(:schema => schema, :debug => debug, :db => db)
69
-
70
- test_table = db.tables[:test_table]
71
-
72
-
73
- #Test wrong encoding.
74
- cont = File.read("#{File.dirname(__FILE__)}/db_spec_encoding_test_file.txt")
75
- cont.force_encoding("ASCII-8BIT")
76
-
77
- db.insert("test", {
78
- "text" => cont
79
- })
80
-
81
-
82
- #Throw out invalid encoding because it will make dumping fail.
83
- db.tables[:test].truncate
84
-
85
-
86
-
87
- #Test IDQueries.
88
- rows_count = 1250
89
- db.transaction do
90
- 0.upto(rows_count) do |count|
91
- db.insert(:test_table, {:name => "User #{count}"})
92
- end
93
- end
94
-
95
- block_ran = 0
96
- idq = Baza::Idquery.new(:db => db, :debug => debug, :table => :test_table, :query => "SELECT id FROM test_table") do |data|
97
- block_ran += 1
98
- end
99
-
100
- raise "Block with should have ran too little: #{block_ran}." if block_ran < rows_count
101
-
102
- block_ran = 0
103
- db.select(:test_table, {}, {:idquery => true}) do |data|
104
- block_ran += 1
105
- end
106
-
107
- raise "Block with should have ran too little: #{block_ran}." if block_ran < rows_count
108
-
109
-
110
- #Test upserting.
111
- data = {:name => "upsert - Kasper Johansen"}
112
- data2 = {:name => "upsert - Kasper Nielsen Johansen"}
113
- sel = {:nickname => "upsert - kaspernj"}
114
-
115
- table = db.tables[:test_table]
116
- table.reload
117
- rows_count = table.rows_count
118
-
119
- db.upsert(:test_table, data, sel)
120
- row = db.select(:test_table, sel).fetch
121
- row[:name].should eql("upsert - Kasper Johansen")
122
-
123
- table.reload
124
- table.rows_count.should eql(rows_count + 1)
125
-
126
- db.upsert(:test_table, data2, sel)
127
- row = db.select(:test_table, sel).fetch
128
- row[:name].should eql("upsert - Kasper Nielsen Johansen")
129
-
130
- table.reload
131
- table.rows_count.should eql(rows_count + 1)
132
-
133
-
134
- #Test dumping.
135
- dump = Baza::Dump.new(:db => db, :debug => false)
136
- str_io = StringIO.new
137
- dump.dump(str_io)
138
- str_io.rewind
139
-
140
-
141
- #Remember some numbers for validation.
142
- tables_count = db.tables.list.length
143
-
144
-
145
- #Remove everything in the db.
146
- db.tables.list do |table|
147
- table.drop unless table.native?
148
- end
149
-
150
-
151
- #Run the exported SQL.
152
- db.transaction do
153
- str_io.each_line do |sql|
154
- db.q(sql)
155
- end
156
- end
157
-
158
-
159
- #Vaildate import.
160
- raise "Not same amount of tables: #{tables_count}, #{db.tables.list.length}" if tables_count != db.tables.list.length
161
-
162
-
163
-
164
- #Test revision table renaming.
165
- Baza::Revision.new.init_db(:db => db, :debug => debug, :schema => {
166
- :tables => {
167
- :new_test_table => {
168
- :renames => [:test_table]
169
- }
170
- }
171
- })
172
- tables = db.tables.list
173
- raise "Didnt expect table 'test_table' to exist but it did." if tables.key?(:test_table)
174
- raise "Expected 'new_test_table' to exist but it didnt." if !tables.key?(:new_test_table)
175
-
176
-
177
- #Test revision for column renaming.
178
- Baza::Revision.new.init_db(:db => db, :debug => debug, :schema => {
179
- :tables => {
180
- :new_test_table => {
181
- :columns => [
182
- {:name => :new_name, :type => :varchar, :renames => [:name]}
183
- ]
184
- }
185
- }
186
- })
187
- columns = db.tables[:new_test_table].columns
188
- raise "Didnt expect 'name' to exist but it did." if columns.key?(:name)
189
- raise "Expected 'new_name'-column to exist but it didnt." if !columns.key?(:new_name)
190
- end
191
- end
192
-
193
- it "should generate proper sql" do
194
- driver[:const].sample_db do |db|
195
- time = Time.new(1985, 6, 17, 10, 30)
196
- db.insert(:test, {:date => time}, :return_sql => true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17 10:30:00')")
197
-
198
- date = Date.new(1985, 6, 17)
199
- db.insert(:test, {:date => date}, :return_sql => true).should eql("INSERT INTO `test` (`date`) VALUES ('1985-06-17')")
200
- end
201
- end
202
-
203
- it "should copy database structure and data" do
204
- driver[:const].sample_db do |db1|
205
- driver[:const].sample_db do |db2|
206
- db1.tables.create(:test_table, {
207
- :columns => [
208
- {:name => "id", :type => :int, :autoincr => true, :primarykey => true},
209
- {:name => "testname", :type => :varchar}
210
- ],
211
- :indexes => [
212
- "testname"
213
- ]
214
- })
215
-
216
- table1 = db1.tables["test_table"]
217
- cols1 = table1.columns
218
-
219
- 100.times do |count|
220
- table1.insert(:testname => "TestRow#{count}")
221
- end
222
-
223
- begin
224
- table2 = db2.tables[:test_table]
225
- raise "Expected not-found exception."
226
- rescue Errno::ENOENT
227
- #expected
228
- end
229
-
230
- db1.copy_to(db2)
231
-
232
- table2 = db2.tables[:test_table]
233
-
234
- cols2 = table2.columns
235
- cols2.length.should eql(cols1.length)
236
-
237
- table2.rows_count.should eql(table1.rows_count)
238
-
239
- db1.select(:test_table) do |row1|
240
- found = 0
241
- db2.select(:test_table, row1) do |row2|
242
- found += 1
243
-
244
- row1.each do |key, val|
245
- row2[key].should eql(val)
246
- end
247
- end
248
-
249
- found.should eql(1)
250
- end
251
-
252
- table1.indexes.length.should eql(1)
253
- table2.indexes.length.should eql(table1.indexes.length)
254
- end
255
- end
256
- end
257
-
258
- it "should be able to make new connections based on given objects" do
259
- driver[:const].sample_db do |db|
260
- db2 = Baza::Db.from_object(:object => db.conn.conn)
261
- end
262
- end
263
-
264
- it "should be able to do ID-queries through the select-method" do
265
- driver[:const].sample_db do |db|
266
- db.tables.create(:test_table, {
267
- :columns => [
268
- {:name => :idrow, :type => :int, :autoincr => true, :primarykey => true},
269
- {:name => :name, :type => :varchar}
270
- ]
271
- })
272
-
273
- count = 0
274
- 100.times do
275
- arr = []
276
- 100.times do
277
- count += 1
278
- arr << {:name => "Kasper #{count}"}
279
- end
280
-
281
- db.insert_multi(:test_table, arr)
282
- end
283
-
284
- count_found = 0
285
- db.select(:test_table, nil, :idquery => :idrow) do |row|
286
- count_found += 1
287
-
288
- row[:name].should eql("Kasper #{count_found}")
289
- end
290
-
291
- count_found.should eql(10000)
292
- end
293
- end
294
-
295
- it "should be able to use query buffers" do
296
- driver[:const].sample_db do |db|
297
- db.tables.create(:test_table, {
298
- :columns => [
299
- {:name => :id, :type => :int, :autoincr => true, :primarykey => true},
300
- {:name => :name, :type => :varchar}
301
- ]
302
- })
303
-
304
- upsert = false
305
- db.q_buffer do |buffer|
306
- 2500.times do |count|
307
- if upsert
308
- buffer.upsert(:test_table, {:name => "Kasper #{count}"}, {:name => "Kasper #{count}"})
309
- upsert = false
310
- else
311
- buffer.insert(:test_table, {:name => "Kasper #{count}"})
312
- upsert = true
313
- end
314
- end
315
- end
316
-
317
- test_table = db.tables[:test_table]
318
- test_table.rows_count.should eql(2500)
319
-
320
- db.q_buffer do |buffer|
321
- count = 0
322
- upsert = false
323
-
324
- db.select(:test_table, {}, :orderby => :id) do |row|
325
- row[:name].should eql("Kasper #{count}")
326
-
327
- if upsert
328
- buffer.upsert(:test_table, {:name => "Kasper #{count}-#{count}"}, {:id => row[:id]})
329
- upsert = false
330
- else
331
- buffer.update(:test_table, {:name => "Kasper #{count}-#{count}"}, {:id => row[:id]})
332
- upsert = true
333
- end
334
-
335
- count += 1
336
- end
337
- end
338
-
339
- count = 0
340
- db.select(:test_table, {}, :orderby => :id) do |row|
341
- row[:name].should eql("Kasper #{count}-#{count}")
342
- count += 1
343
- end
344
-
345
- #Test the flush-async which flushes transactions in a thread asyncronous.
346
- db.q_buffer(:flush_async => true) do |buffer|
347
- count = 0
348
- db.select(:test_table) do |row|
349
- count += 1
350
-
351
- if count == 1000
352
- time_start = Time.now.to_f
353
- end
354
-
355
- buffer.delete(:test_table, {:id => row[:id]})
356
-
357
- if count == 1000
358
- time_end = Time.now.to_f
359
-
360
- time_spent = time_end - time_start
361
- raise "Too much time spent: '#{time_spent}'." if time_spent > 0.01
362
- end
363
- end
364
- end
365
-
366
- test_table.rows_count.should eql(0)
367
- end
368
- end
369
- end
370
-
371
- it "should be able to connect to mysql and do various stuff" do
372
- Baza::InfoSqlite3.sample_db do |db3|
373
- Baza::InfoMysql.sample_db do |db1|
374
- #create table.
375
- db1.tables.create(:test_table, {
376
- :columns => [
377
- {:name => :id, :type => :int, :autoincr => true, :primarykey => true},
378
- {:name => :name, :type => :varchar, :maxlength => 100}
379
- ]
380
- })
381
-
382
- test_table = db1.tables[:test_table]
383
-
384
- col_id = test_table.column(:id)
385
- col_name = test_table.column(:name)
386
-
387
- #Test various operations actually work.
388
- test_table.optimize
389
-
390
- #object_from test
391
- db2 = Baza::Db.from_object(db1.conn.conn)
392
-
393
- #Test dumping to SQLite.
394
- db2.copy_to(db3)
395
-
396
- table_sqlite = db3.tables[:test_table]
397
- table_sqlite.columns.length.should eql(test_table.columns.length)
398
-
399
- col_id_sqlite = table_sqlite.column(:id)
400
- col_id_sqlite.type.should eql(:int)
401
- col_id_sqlite.autoincr?.should eql(true)
402
- col_id_sqlite.primarykey?.should eql(true)
403
-
404
- col_name_sqlite = table_sqlite.column(:name)
405
- col_name_sqlite.type.should eql(:varchar)
406
- col_name_sqlite.maxlength.to_i.should eql(100)
407
- end
408
- end
409
- end
410
- end
@@ -1 +0,0 @@
1
- ��pl��p���