~ubuntu-branches/ubuntu/vivid/ruby-sequel/vivid

« back to all changes in this revision

Viewing changes to spec/adapters/firebird_spec.rb

  • Committer: Package Import Robot
  • Author(s): Dmitry Borodaenko, Dmitry Borodaenko, Cédric Boutillier
  • Date: 2013-08-10 18:38:17 UTC
  • mfrom: (1.1.8)
  • Revision ID: package-import@ubuntu.com-20130810183817-iqanz804j32i5myi
Tags: 4.1.1-1
[ Dmitry Borodaenko ]
* New upstream release.
* Standards-Version upgraded to 3.9.4 (no changes).
* Added Build-Depend on ruby-sqlite3.

[ Cédric Boutillier ]
* debian/control: remove obsolete DM-Upload-Allowed flag.
* use canonical URI in Vcs-* fields.
* debian/copyright: use DEP5 copyright-format/1.0 official URL for Format
  field.
* Update debian/watch. Thanks Bart Martens.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
SEQUEL_ADAPTER_TEST = :firebird
 
2
 
1
3
require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
2
4
 
3
 
unless defined?(FIREBIRD_DB)
4
 
  FIREBIRD_URL = 'firebird://sysdba:masterkey@localhost/reality_spec' unless defined? FIREBIRD_URL
5
 
  FIREBIRD_DB = Sequel.connect(ENV['SEQUEL_FB_SPEC_DB']||FIREBIRD_URL)
6
 
end
7
 
INTEGRATION_DB = FIREBIRD_DB unless defined?(INTEGRATION_DB)
8
 
 
9
 
def FIREBIRD_DB.sqls
 
5
def DB.sqls
10
6
  (@sqls ||= [])
11
7
end
12
8
logger = Object.new
13
9
def logger.method_missing(m, msg)
14
 
  FIREBIRD_DB.sqls.push(msg)
 
10
  DB.sqls.push(msg)
15
11
end
16
 
FIREBIRD_DB.loggers = [logger]
 
12
DB.loggers = [logger]
17
13
 
18
 
FIREBIRD_DB.create_table! :test do
 
14
DB.create_table! :test do
19
15
  varchar :name,  :size => 50
20
16
  integer :val,   :index => true
21
17
end
22
18
 
23
 
FIREBIRD_DB.create_table! :test2 do
24
 
  integer :val
25
 
  timestamp :time_stamp
26
 
end
27
 
 
28
 
FIREBIRD_DB.create_table! :test3 do
29
 
  integer :val
30
 
  timestamp :time_stamp
31
 
end
32
 
 
33
 
FIREBIRD_DB.create_table! :test5 do
 
19
DB.create_table! :test2 do
 
20
  integer :val
 
21
  timestamp :time_stamp
 
22
end
 
23
 
 
24
DB.create_table! :test3 do
 
25
  integer :val
 
26
  timestamp :time_stamp
 
27
end
 
28
 
 
29
DB.create_table! :test5 do
34
30
  primary_key :xid
35
31
  integer :val
36
32
end
37
33
 
38
 
FIREBIRD_DB.create_table! :test6 do
 
34
DB.create_table! :test6 do
39
35
  primary_key :xid
40
36
  blob :val
41
37
  String :val2
45
41
 
46
42
describe "A Firebird database" do
47
43
  before do
48
 
    @db = FIREBIRD_DB
 
44
    @db = DB
49
45
  end
50
46
 
51
47
  specify "should provide disconnect functionality" do
62
58
 
63
59
describe "A Firebird dataset" do
64
60
  before do
65
 
    @d = FIREBIRD_DB[:test]
 
61
    @d = DB[:test]
66
62
    @d.delete # remove all records
67
63
    @d.quote_identifiers = true
68
64
  end
176
172
  end
177
173
 
178
174
  specify "should support transactions" do
179
 
    FIREBIRD_DB.transaction do
 
175
    DB.transaction do
180
176
      @d << {:name => 'abc', :val => 1}
181
177
    end
182
178
 
184
180
  end
185
181
 
186
182
  specify "should have #transaction yield the connection" do
187
 
    FIREBIRD_DB.transaction do |conn|
 
183
    DB.transaction do |conn|
188
184
      conn.should_not == nil
189
185
    end
190
186
  end
191
187
 
192
188
  specify "should correctly rollback transactions" do
193
189
    proc do
194
 
      FIREBIRD_DB.transaction do
 
190
      DB.transaction do
195
191
        @d << {:name => 'abc', :val => 1}
196
192
        raise RuntimeError, 'asdf'
197
193
      end
201
197
  end
202
198
 
203
199
  specify "should handle returning inside of the block by committing" do
204
 
    def FIREBIRD_DB.ret_commit
 
200
    def DB.ret_commit
205
201
      transaction do
206
202
        self[:test] << {:name => 'abc'}
207
203
        return
209
205
      end
210
206
    end
211
207
    @d.count.should == 0
212
 
    FIREBIRD_DB.ret_commit
 
208
    DB.ret_commit
213
209
    @d.count.should == 1
214
 
    FIREBIRD_DB.ret_commit
 
210
    DB.ret_commit
215
211
    @d.count.should == 2
216
212
    proc do
217
 
      FIREBIRD_DB.transaction do
 
213
      DB.transaction do
218
214
        raise RuntimeError, 'asdf'
219
215
      end
220
216
    end.should raise_error(RuntimeError)
223
219
  end
224
220
 
225
221
  specify "should quote and upcase reserved keywords" do
226
 
    @d = FIREBIRD_DB[:testing]
 
222
    @d = DB[:testing]
227
223
    @d.quote_identifiers = true
228
224
    @d.select(:select).sql.should == \
229
225
      'SELECT "SELECT" FROM "TESTING"'
232
228
 
233
229
describe "A Firebird dataset with a timestamp field" do
234
230
  before do
235
 
    @d = FIREBIRD_DB[:test3]
 
231
    @d = DB[:test3]
236
232
    @d.delete
237
233
  end
238
234
 
246
242
 
247
243
describe "A Firebird database" do
248
244
  before do
249
 
    @db = FIREBIRD_DB
 
245
    @db = DB
250
246
    @db.drop_table?(:posts)
251
247
    @db.sqls.clear
252
248
  end
253
249
 
254
250
  specify "should allow us to name the sequences" do
255
251
    @db.create_table(:posts){primary_key :id, :sequence_name => "seq_test"}
256
 
    @db.sqls.should == [
257
 
      "DROP SEQUENCE SEQ_TEST",
258
 
      "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
259
 
      "CREATE SEQUENCE SEQ_TEST",
260
 
      "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_test;\n                end\n              end\n\n"
261
 
    ]
 
252
    check_sqls do
 
253
      @db.sqls.should == [
 
254
        "DROP SEQUENCE SEQ_TEST",
 
255
        "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
 
256
        "CREATE SEQUENCE SEQ_TEST",
 
257
        "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_test;\n                end\n              end\n\n"
 
258
      ]
 
259
    end
262
260
  end
263
261
 
264
262
  specify "should allow us to set the starting position for the sequences" do
265
263
    @db.create_table(:posts){primary_key :id, :sequence_start_position => 999}
266
 
    @db.sqls.should == [
267
 
      "DROP SEQUENCE SEQ_POSTS_ID",
268
 
      "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
269
 
      "CREATE SEQUENCE SEQ_POSTS_ID",
270
 
      "ALTER SEQUENCE SEQ_POSTS_ID RESTART WITH 999",
271
 
      "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_posts_id;\n                end\n              end\n\n"
272
 
    ]
 
264
    check_sqls do
 
265
      @db.sqls.should == [
 
266
        "DROP SEQUENCE SEQ_POSTS_ID",
 
267
        "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
 
268
        "CREATE SEQUENCE SEQ_POSTS_ID",
 
269
        "ALTER SEQUENCE SEQ_POSTS_ID RESTART WITH 999",
 
270
        "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_posts_id;\n                end\n              end\n\n"
 
271
      ]
 
272
    end
273
273
  end
274
274
 
275
275
  specify "should allow us to name and set the starting position for the sequences" do
276
276
    @db.create_table(:posts){primary_key :id, :sequence_name => "seq_test", :sequence_start_position => 999}
277
 
    @db.sqls.should == [
278
 
      "DROP SEQUENCE SEQ_TEST",
279
 
      "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
280
 
      "CREATE SEQUENCE SEQ_TEST",
281
 
      "ALTER SEQUENCE SEQ_TEST RESTART WITH 999",
282
 
      "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_test;\n                end\n              end\n\n"
283
 
    ]
 
277
    check_sqls do
 
278
      @db.sqls.should == [
 
279
        "DROP SEQUENCE SEQ_TEST",
 
280
        "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
 
281
        "CREATE SEQUENCE SEQ_TEST",
 
282
        "ALTER SEQUENCE SEQ_TEST RESTART WITH 999",
 
283
        "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_test;\n                end\n              end\n\n"
 
284
      ]
 
285
    end
284
286
  end
285
287
 
286
288
  specify "should allow us to name the triggers" do
287
289
    @db.create_table(:posts){primary_key :id, :trigger_name => "trig_test"}
288
 
    @db.sqls.should == [
289
 
      "DROP SEQUENCE SEQ_POSTS_ID",
290
 
      "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
291
 
      "CREATE SEQUENCE SEQ_POSTS_ID",
292
 
      "          CREATE TRIGGER TRIG_TEST for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_posts_id;\n                end\n              end\n\n"
293
 
    ]
 
290
    check_sqls do
 
291
      @db.sqls.should == [
 
292
        "DROP SEQUENCE SEQ_POSTS_ID",
 
293
        "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
 
294
        "CREATE SEQUENCE SEQ_POSTS_ID",
 
295
        "          CREATE TRIGGER TRIG_TEST for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_posts_id;\n                end\n              end\n\n"
 
296
      ]
 
297
    end
294
298
  end
295
299
 
296
300
  specify "should allow us to not create the sequence" do
297
301
    @db.create_table(:posts){primary_key :id, :create_sequence => false}
298
 
    @db.sqls.should == [
299
 
      "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
300
 
      "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_posts_id;\n                end\n              end\n\n"
301
 
    ]
 
302
    check_sqls do
 
303
      @db.sqls.should == [
 
304
        "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
 
305
        "          CREATE TRIGGER BI_POSTS_ID for POSTS\n          ACTIVE BEFORE INSERT position 0\n          as               begin\n                if ((new.ID is null) or (new.ID = 0)) then\n                begin\n                  new.ID = next value for seq_posts_id;\n                end\n              end\n\n"
 
306
      ]
 
307
    end
302
308
  end
303
309
 
304
310
  specify "should allow us to not create the trigger" do
305
311
    @db.create_table(:posts){primary_key :id, :create_trigger => false}
306
 
    @db.sqls.should == [
307
 
      "DROP SEQUENCE SEQ_POSTS_ID",
308
 
      "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
309
 
      "CREATE SEQUENCE SEQ_POSTS_ID",
310
 
    ]
 
312
    check_sqls do
 
313
      @db.sqls.should == [
 
314
        "DROP SEQUENCE SEQ_POSTS_ID",
 
315
        "CREATE TABLE POSTS (ID integer PRIMARY KEY )",
 
316
        "CREATE SEQUENCE SEQ_POSTS_ID",
 
317
      ]
 
318
    end
311
319
  end
312
320
 
313
321
  specify "should allow us to not create either the sequence nor the trigger" do
314
322
    @db.create_table(:posts){primary_key :id, :create_sequence => false, :create_trigger => false}
315
 
    @db.sqls.should == [
316
 
      "CREATE TABLE POSTS (ID integer PRIMARY KEY )"
317
 
    ]
 
323
    check_sqls do
 
324
      @db.sqls.should == [
 
325
        "CREATE TABLE POSTS (ID integer PRIMARY KEY )"
 
326
      ]
 
327
    end
318
328
  end
319
329
 
320
330
  specify "should support column operations" do
355
365
 
356
366
describe "Postgres::Dataset#insert" do
357
367
  before do
358
 
    @ds = FIREBIRD_DB[:test5]
 
368
    @ds = DB[:test5]
359
369
    @ds.delete
360
370
  end
361
371
 
381
391
  end
382
392
 
383
393
  specify "should return nil if the table has no primary key" do
384
 
    ds = FIREBIRD_DB[:test]
 
394
    ds = DB[:test]
385
395
    ds.delete
386
396
    ds.insert(:name=>'a').should == nil
387
397
  end
389
399
 
390
400
describe "Postgres::Dataset#insert" do
391
401
  before do
392
 
    @ds = FIREBIRD_DB[:test6]
 
402
    @ds = DB[:test6]
393
403
    @ds.delete
394
404
  end
395
405