sequel 3.24.1 → 3.25.0
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/CHANGELOG +28 -0
- data/doc/association_basics.rdoc +3 -3
- data/doc/dataset_basics.rdoc +4 -4
- data/doc/migration.rdoc +6 -5
- data/doc/opening_databases.rdoc +8 -5
- data/doc/release_notes/3.25.0.txt +88 -0
- data/lib/sequel/adapters/jdbc.rb +2 -2
- data/lib/sequel/adapters/jdbc/postgresql.rb +6 -0
- data/lib/sequel/adapters/shared/postgres.rb +0 -5
- data/lib/sequel/adapters/tinytds.rb +1 -2
- data/lib/sequel/database/schema_generator.rb +6 -4
- data/lib/sequel/database/schema_methods.rb +17 -6
- data/lib/sequel/dataset.rb +8 -0
- data/lib/sequel/dataset/misc.rb +0 -9
- data/lib/sequel/dataset/query.rb +80 -21
- data/lib/sequel/extensions/migration.rb +1 -1
- data/lib/sequel/model/base.rb +15 -6
- data/lib/sequel/model/errors.rb +1 -1
- data/lib/sequel/plugins/association_pks.rb +16 -0
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/version.rb +2 -2
- data/spec/adapters/mysql_spec.rb +7 -0
- data/spec/core/database_spec.rb +0 -295
- data/spec/core/dataset_spec.rb +70 -1
- data/spec/core/expression_filters_spec.rb +39 -0
- data/spec/core/schema_spec.rb +304 -0
- data/spec/core/spec_helper.rb +29 -0
- data/spec/extensions/association_pks_spec.rb +31 -0
- data/spec/extensions/schema_spec.rb +12 -20
- data/spec/integration/dataset_test.rb +17 -0
- data/spec/integration/prepared_statement_test.rb +15 -0
- data/spec/model/model_spec.rb +60 -0
- data/spec/model/plugins_spec.rb +17 -0
- data/spec/model/validations_spec.rb +11 -0
- metadata +7 -5
@@ -424,7 +424,7 @@ module Sequel
|
|
424
424
|
@current = opts[:current] || current_migration_version
|
425
425
|
|
426
426
|
raise(Error, "No current version available") unless current
|
427
|
-
raise(Error, "No target version available") unless target
|
427
|
+
raise(Error, "No target version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target
|
428
428
|
|
429
429
|
@direction = current < target ? :up : :down
|
430
430
|
@migrations = get_migrations
|
data/lib/sequel/model/base.rb
CHANGED
@@ -326,9 +326,9 @@ module Sequel
|
|
326
326
|
unless @plugins.include?(m)
|
327
327
|
@plugins << m
|
328
328
|
m.apply(self, *args, &blk) if m.respond_to?(:apply)
|
329
|
-
include(m::InstanceMethods) if
|
330
|
-
extend(m::ClassMethods)if
|
331
|
-
if
|
329
|
+
include(m::InstanceMethods) if plugin_module_defined?(m, :InstanceMethods)
|
330
|
+
extend(m::ClassMethods)if plugin_module_defined?(m, :ClassMethods)
|
331
|
+
if plugin_module_defined?(m, :DatasetMethods)
|
332
332
|
dataset.extend(m::DatasetMethods) if @dataset
|
333
333
|
dataset_method_modules << m::DatasetMethods
|
334
334
|
meths = m::DatasetMethods.public_instance_methods.reject{|x| NORMAL_METHOD_NAME_REGEXP !~ x.to_s}
|
@@ -337,7 +337,7 @@ module Sequel
|
|
337
337
|
end
|
338
338
|
m.configure(self, *args, &blk) if m.respond_to?(:configure)
|
339
339
|
end
|
340
|
-
|
340
|
+
|
341
341
|
# Returns primary key attribute hash. If using a composite primary key
|
342
342
|
# value such be an array with values for each primary key in the correct
|
343
343
|
# order. For a standard primary key, value should be an object with a
|
@@ -419,7 +419,7 @@ module Sequel
|
|
419
419
|
def set_dataset(ds, opts={})
|
420
420
|
inherited = opts[:inherited]
|
421
421
|
@dataset = case ds
|
422
|
-
when Symbol
|
422
|
+
when Symbol, SQL::Identifier, SQL::QualifiedIdentifier, SQL::AliasedExpression
|
423
423
|
@simple_table = db.literal(ds)
|
424
424
|
db[ds]
|
425
425
|
when Dataset
|
@@ -427,7 +427,7 @@ module Sequel
|
|
427
427
|
@db = ds.db
|
428
428
|
ds
|
429
429
|
else
|
430
|
-
raise(Error, "Model.set_dataset takes
|
430
|
+
raise(Error, "Model.set_dataset takes one of the following classes as an argument: Symbol, SQL::Identifier, SQL::QualifiedIdentifier, SQL::AliasedExpression, Dataset")
|
431
431
|
end
|
432
432
|
@dataset.row_proc = Proc.new{|r| load(r)}
|
433
433
|
@require_modification = Sequel::Model.require_modification.nil? ? @dataset.provides_accurate_rows_matched? : Sequel::Model.require_modification
|
@@ -658,6 +658,15 @@ module Sequel
|
|
658
658
|
Sequel::Plugins.const_get(module_name)
|
659
659
|
end
|
660
660
|
|
661
|
+
# Check if the plugin module +plugin+ defines the constant named by +submod+.
|
662
|
+
def plugin_module_defined?(plugin, submod)
|
663
|
+
if RUBY_VERSION >= '1.9'
|
664
|
+
plugin.const_defined?(submod, false)
|
665
|
+
else
|
666
|
+
plugin.const_defined?(submod)
|
667
|
+
end
|
668
|
+
end
|
669
|
+
|
661
670
|
# Find the row in the dataset that matches the primary key. Uses
|
662
671
|
# a static SQL optimization if the table and primary key are simple.
|
663
672
|
def primary_key_lookup(pk)
|
data/lib/sequel/model/errors.rb
CHANGED
@@ -40,7 +40,7 @@ module Sequel
|
|
40
40
|
def full_messages
|
41
41
|
inject([]) do |m, kv|
|
42
42
|
att, errors = *kv
|
43
|
-
errors.each {|e| m << "#{Array(att).join(ATTRIBUTE_JOINER)} #{e}"}
|
43
|
+
errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(ATTRIBUTE_JOINER)} #{e}")}
|
44
44
|
m
|
45
45
|
end
|
46
46
|
end
|
@@ -56,6 +56,7 @@ module Sequel
|
|
56
56
|
_join_table_dataset(opts).filter(opts[:left_key]=>send(opts[:left_primary_key])).select_map(opts[:right_key])
|
57
57
|
end
|
58
58
|
def_association_pks_setter(opts) do |pks|
|
59
|
+
pks = convert_pk_array(opts, pks)
|
59
60
|
checked_transaction do
|
60
61
|
ds = _join_table_dataset(opts).filter(opts[:left_key]=>send(opts[:left_primary_key]))
|
61
62
|
ds.exclude(opts[:right_key]=>pks).delete
|
@@ -74,6 +75,7 @@ module Sequel
|
|
74
75
|
send(opts.dataset_method).select_map(opts.associated_class.primary_key)
|
75
76
|
end
|
76
77
|
def_association_pks_setter(opts) do |pks|
|
78
|
+
pks = convert_pk_array(opts, pks)
|
77
79
|
checked_transaction do
|
78
80
|
ds = send(opts.dataset_method)
|
79
81
|
primary_key = opts.associated_class.primary_key
|
@@ -84,6 +86,20 @@ module Sequel
|
|
84
86
|
end
|
85
87
|
end
|
86
88
|
end
|
89
|
+
|
90
|
+
module InstanceMethods
|
91
|
+
private
|
92
|
+
|
93
|
+
# If the associated class's primary key column type is integer,
|
94
|
+
# typecast all provided values to integer before using them.
|
95
|
+
def convert_pk_array(opts, pks)
|
96
|
+
if klass = opts.associated_class and sch = klass.db_schema and col = sch[klass.primary_key] and col[:type] == :integer
|
97
|
+
pks.map{|pk| model.db.typecast_value(:integer, pk)}
|
98
|
+
else
|
99
|
+
pks
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
87
103
|
end
|
88
104
|
end
|
89
105
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Sequel
|
2
2
|
module Plugins
|
3
|
-
# The update_primary_key plugin allows you to modify an
|
3
|
+
# The update_primary_key plugin allows you to modify an object's
|
4
4
|
# primary key and then save the record. Sequel does not work
|
5
5
|
# correctly with primary key modifications by default. Sequel
|
6
6
|
# is designed to work with surrogate primary keys that never need to be
|
data/lib/sequel/version.rb
CHANGED
@@ -3,10 +3,10 @@ module Sequel
|
|
3
3
|
MAJOR = 3
|
4
4
|
# The minor version of Sequel. Bumped for every non-patch level
|
5
5
|
# release, generally around once a month.
|
6
|
-
MINOR =
|
6
|
+
MINOR = 25
|
7
7
|
# The tiny version of Sequel. Usually 0, only bumped for bugfix
|
8
8
|
# releases that fix regressions from previous versions.
|
9
|
-
TINY =
|
9
|
+
TINY = 0
|
10
10
|
|
11
11
|
# The version of Sequel you are using, as a string (e.g. "2.11.0")
|
12
12
|
VERSION = [MAJOR, MINOR, TINY].join('.')
|
data/spec/adapters/mysql_spec.rb
CHANGED
@@ -998,6 +998,13 @@ if MYSQL_DB.adapter_scheme == :mysql or MYSQL_DB.adapter_scheme == :jdbc
|
|
998
998
|
@d.row_proc = proc{|r| r.keys.each{|k| r[k] *= 2 if r[k].is_a?(Integer)}; r}
|
999
999
|
@d.call_sproc(:select, :test_sproc, 3, 4).should == [{:id=>nil, :value=>2, :b=>6, :d => 8}]
|
1000
1000
|
end
|
1001
|
+
|
1002
|
+
specify "should deal with nil values" do
|
1003
|
+
MYSQL_DB.execute_ddl('CREATE PROCEDURE test_sproc(i INTEGER, v INTEGER) BEGIN INSERT INTO items VALUES (i, v); END')
|
1004
|
+
MYSQL_DB[:items].delete
|
1005
|
+
MYSQL_DB.call_sproc(:test_sproc, :args=>[1, nil])
|
1006
|
+
MYSQL_DB[:items].all.should == [{:id=>1, :value=>nil}]
|
1007
|
+
end
|
1001
1008
|
end
|
1002
1009
|
end
|
1003
1010
|
|
data/spec/core/database_spec.rb
CHANGED
@@ -478,233 +478,6 @@ describe "Database#test_connection" do
|
|
478
478
|
end
|
479
479
|
end
|
480
480
|
|
481
|
-
class DummyDataset < Sequel::Dataset
|
482
|
-
def first
|
483
|
-
raise if @opts[:from] == [:a]
|
484
|
-
true
|
485
|
-
end
|
486
|
-
end
|
487
|
-
|
488
|
-
class DummyDatabase < Sequel::Database
|
489
|
-
attr_reader :sqls
|
490
|
-
|
491
|
-
def execute(sql, opts={})
|
492
|
-
@sqls ||= []
|
493
|
-
@sqls << sql
|
494
|
-
end
|
495
|
-
|
496
|
-
def transaction; yield; end
|
497
|
-
|
498
|
-
def dataset
|
499
|
-
DummyDataset.new(self)
|
500
|
-
end
|
501
|
-
end
|
502
|
-
|
503
|
-
describe "Database#create_table" do
|
504
|
-
before do
|
505
|
-
@db = DummyDatabase.new
|
506
|
-
end
|
507
|
-
|
508
|
-
specify "should construct proper SQL" do
|
509
|
-
@db.create_table :test do
|
510
|
-
primary_key :id, :integer, :null => false
|
511
|
-
column :name, :text
|
512
|
-
index :name, :unique => true
|
513
|
-
end
|
514
|
-
@db.sqls.should == [
|
515
|
-
'CREATE TABLE test (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name text)',
|
516
|
-
'CREATE UNIQUE INDEX test_name_index ON test (name)'
|
517
|
-
]
|
518
|
-
end
|
519
|
-
|
520
|
-
specify "should create a temporary table" do
|
521
|
-
@db.create_table :test_tmp, :temp => true do
|
522
|
-
primary_key :id, :integer, :null => false
|
523
|
-
column :name, :text
|
524
|
-
index :name, :unique => true
|
525
|
-
end
|
526
|
-
|
527
|
-
@db.sqls.should == [
|
528
|
-
'CREATE TEMPORARY TABLE test_tmp (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name text)',
|
529
|
-
'CREATE UNIQUE INDEX test_tmp_name_index ON test_tmp (name)'
|
530
|
-
]
|
531
|
-
end
|
532
|
-
|
533
|
-
specify "should not use default schema when creating a temporary table" do
|
534
|
-
@db.default_schema = :foo
|
535
|
-
@db.create_table :test_tmp, :temp => true do
|
536
|
-
column :name, :text
|
537
|
-
end
|
538
|
-
@db.sqls.should == ['CREATE TEMPORARY TABLE test_tmp (name text)']
|
539
|
-
end
|
540
|
-
end
|
541
|
-
|
542
|
-
describe "Database#alter_table" do
|
543
|
-
before do
|
544
|
-
@db = DummyDatabase.new
|
545
|
-
end
|
546
|
-
|
547
|
-
specify "should construct proper SQL" do
|
548
|
-
@db.alter_table :xyz do
|
549
|
-
add_column :aaa, :text, :null => false, :unique => true
|
550
|
-
drop_column :bbb
|
551
|
-
rename_column :ccc, :ddd
|
552
|
-
set_column_type :eee, :integer
|
553
|
-
set_column_default :hhh, 'abcd'
|
554
|
-
|
555
|
-
add_index :fff, :unique => true
|
556
|
-
drop_index :ggg
|
557
|
-
end
|
558
|
-
|
559
|
-
@db.sqls.should == [
|
560
|
-
'ALTER TABLE xyz ADD COLUMN aaa text NOT NULL UNIQUE',
|
561
|
-
'ALTER TABLE xyz DROP COLUMN bbb',
|
562
|
-
'ALTER TABLE xyz RENAME COLUMN ccc TO ddd',
|
563
|
-
'ALTER TABLE xyz ALTER COLUMN eee TYPE integer',
|
564
|
-
"ALTER TABLE xyz ALTER COLUMN hhh SET DEFAULT 'abcd'",
|
565
|
-
|
566
|
-
'CREATE UNIQUE INDEX xyz_fff_index ON xyz (fff)',
|
567
|
-
'DROP INDEX xyz_ggg_index'
|
568
|
-
]
|
569
|
-
end
|
570
|
-
end
|
571
|
-
|
572
|
-
describe "Database#add_column" do
|
573
|
-
before do
|
574
|
-
@db = DummyDatabase.new
|
575
|
-
end
|
576
|
-
|
577
|
-
specify "should construct proper SQL" do
|
578
|
-
@db.add_column :test, :name, :text, :unique => true
|
579
|
-
@db.sqls.should == [
|
580
|
-
'ALTER TABLE test ADD COLUMN name text UNIQUE'
|
581
|
-
]
|
582
|
-
end
|
583
|
-
end
|
584
|
-
|
585
|
-
describe "Database#drop_column" do
|
586
|
-
before do
|
587
|
-
@db = DummyDatabase.new
|
588
|
-
end
|
589
|
-
|
590
|
-
specify "should construct proper SQL" do
|
591
|
-
@db.drop_column :test, :name
|
592
|
-
@db.sqls.should == [
|
593
|
-
'ALTER TABLE test DROP COLUMN name'
|
594
|
-
]
|
595
|
-
end
|
596
|
-
end
|
597
|
-
|
598
|
-
describe "Database#rename_column" do
|
599
|
-
before do
|
600
|
-
@db = DummyDatabase.new
|
601
|
-
end
|
602
|
-
|
603
|
-
specify "should construct proper SQL" do
|
604
|
-
@db.rename_column :test, :abc, :def
|
605
|
-
@db.sqls.should == [
|
606
|
-
'ALTER TABLE test RENAME COLUMN abc TO def'
|
607
|
-
]
|
608
|
-
end
|
609
|
-
end
|
610
|
-
|
611
|
-
describe "Database#set_column_type" do
|
612
|
-
before do
|
613
|
-
@db = DummyDatabase.new
|
614
|
-
end
|
615
|
-
|
616
|
-
specify "should construct proper SQL" do
|
617
|
-
@db.set_column_type :test, :name, :integer
|
618
|
-
@db.sqls.should == [
|
619
|
-
'ALTER TABLE test ALTER COLUMN name TYPE integer'
|
620
|
-
]
|
621
|
-
end
|
622
|
-
end
|
623
|
-
|
624
|
-
describe "Database#set_column_default" do
|
625
|
-
before do
|
626
|
-
@db = DummyDatabase.new
|
627
|
-
end
|
628
|
-
|
629
|
-
specify "should construct proper SQL" do
|
630
|
-
@db.set_column_default :test, :name, 'zyx'
|
631
|
-
@db.sqls.should == [
|
632
|
-
"ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"
|
633
|
-
]
|
634
|
-
end
|
635
|
-
end
|
636
|
-
|
637
|
-
describe "Database#add_index" do
|
638
|
-
before do
|
639
|
-
@db = DummyDatabase.new
|
640
|
-
end
|
641
|
-
|
642
|
-
specify "should construct proper SQL" do
|
643
|
-
@db.add_index :test, :name, :unique => true
|
644
|
-
@db.sqls.should == [
|
645
|
-
'CREATE UNIQUE INDEX test_name_index ON test (name)'
|
646
|
-
]
|
647
|
-
end
|
648
|
-
|
649
|
-
specify "should accept multiple columns" do
|
650
|
-
@db.add_index :test, [:one, :two]
|
651
|
-
@db.sqls.should == [
|
652
|
-
'CREATE INDEX test_one_two_index ON test (one, two)'
|
653
|
-
]
|
654
|
-
end
|
655
|
-
end
|
656
|
-
|
657
|
-
describe "Database#drop_index" do
|
658
|
-
before do
|
659
|
-
@db = DummyDatabase.new
|
660
|
-
end
|
661
|
-
|
662
|
-
specify "should construct proper SQL" do
|
663
|
-
@db.drop_index :test, :name
|
664
|
-
@db.sqls.should == [
|
665
|
-
'DROP INDEX test_name_index'
|
666
|
-
]
|
667
|
-
end
|
668
|
-
|
669
|
-
end
|
670
|
-
|
671
|
-
class Dummy2Database < Sequel::Database
|
672
|
-
attr_reader :sql
|
673
|
-
def execute(sql); @sql = sql; end
|
674
|
-
def transaction; yield; end
|
675
|
-
end
|
676
|
-
|
677
|
-
describe "Database#drop_table" do
|
678
|
-
before do
|
679
|
-
@db = DummyDatabase.new
|
680
|
-
end
|
681
|
-
|
682
|
-
specify "should construct proper SQL" do
|
683
|
-
@db.drop_table :test
|
684
|
-
@db.sqls.should == ['DROP TABLE test']
|
685
|
-
end
|
686
|
-
|
687
|
-
specify "should accept multiple table names" do
|
688
|
-
@db.drop_table :a, :bb, :ccc
|
689
|
-
@db.sqls.should == [
|
690
|
-
'DROP TABLE a',
|
691
|
-
'DROP TABLE bb',
|
692
|
-
'DROP TABLE ccc'
|
693
|
-
]
|
694
|
-
end
|
695
|
-
end
|
696
|
-
|
697
|
-
describe "Database#rename_table" do
|
698
|
-
before do
|
699
|
-
@db = DummyDatabase.new
|
700
|
-
end
|
701
|
-
|
702
|
-
specify "should construct proper SQL" do
|
703
|
-
@db.rename_table :abc, :xyz
|
704
|
-
@db.sqls.should == ['ALTER TABLE abc RENAME TO xyz']
|
705
|
-
end
|
706
|
-
end
|
707
|
-
|
708
481
|
describe "Database#table_exists?" do
|
709
482
|
specify "should try to select the first record from the table's dataset" do
|
710
483
|
db2 = DummyDatabase.new
|
@@ -1282,74 +1055,6 @@ describe "Database#[]" do
|
|
1282
1055
|
end
|
1283
1056
|
end
|
1284
1057
|
|
1285
|
-
describe "Database#create_view" do
|
1286
|
-
before do
|
1287
|
-
@db = DummyDatabase.new
|
1288
|
-
end
|
1289
|
-
|
1290
|
-
specify "should construct proper SQL with raw SQL" do
|
1291
|
-
@db.create_view :test, "SELECT * FROM xyz"
|
1292
|
-
@db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
|
1293
|
-
@db.sqls.clear
|
1294
|
-
@db.create_view :test.identifier, "SELECT * FROM xyz"
|
1295
|
-
@db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
|
1296
|
-
end
|
1297
|
-
|
1298
|
-
specify "should construct proper SQL with dataset" do
|
1299
|
-
@db.create_view :test, @db[:items].select(:a, :b).order(:c)
|
1300
|
-
@db.sqls.should == ['CREATE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
1301
|
-
@db.sqls.clear
|
1302
|
-
@db.create_view :test.qualify(:sch), @db[:items].select(:a, :b).order(:c)
|
1303
|
-
@db.sqls.should == ['CREATE VIEW sch.test AS SELECT a, b FROM items ORDER BY c']
|
1304
|
-
end
|
1305
|
-
end
|
1306
|
-
|
1307
|
-
describe "Database#create_or_replace_view" do
|
1308
|
-
before do
|
1309
|
-
@db = DummyDatabase.new
|
1310
|
-
end
|
1311
|
-
|
1312
|
-
specify "should construct proper SQL with raw SQL" do
|
1313
|
-
@db.create_or_replace_view :test, "SELECT * FROM xyz"
|
1314
|
-
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT * FROM xyz']
|
1315
|
-
@db.sqls.clear
|
1316
|
-
@db.create_or_replace_view :sch__test, "SELECT * FROM xyz"
|
1317
|
-
@db.sqls.should == ['CREATE OR REPLACE VIEW sch.test AS SELECT * FROM xyz']
|
1318
|
-
end
|
1319
|
-
|
1320
|
-
specify "should construct proper SQL with dataset" do
|
1321
|
-
@db.create_or_replace_view :test, @db[:items].select(:a, :b).order(:c)
|
1322
|
-
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
1323
|
-
@db.sqls.clear
|
1324
|
-
@db.create_or_replace_view :test.identifier, @db[:items].select(:a, :b).order(:c)
|
1325
|
-
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
1326
|
-
end
|
1327
|
-
end
|
1328
|
-
|
1329
|
-
describe "Database#drop_view" do
|
1330
|
-
before do
|
1331
|
-
@db = DummyDatabase.new
|
1332
|
-
end
|
1333
|
-
|
1334
|
-
specify "should construct proper SQL" do
|
1335
|
-
@db.drop_view :test
|
1336
|
-
@db.drop_view :test.identifier
|
1337
|
-
@db.drop_view :sch__test
|
1338
|
-
@db.drop_view :test.qualify(:sch)
|
1339
|
-
@db.sqls.should == ['DROP VIEW test', 'DROP VIEW test', 'DROP VIEW sch.test', 'DROP VIEW sch.test']
|
1340
|
-
end
|
1341
|
-
end
|
1342
|
-
|
1343
|
-
describe "Database#alter_table_sql" do
|
1344
|
-
before do
|
1345
|
-
@db = DummyDatabase.new
|
1346
|
-
end
|
1347
|
-
|
1348
|
-
specify "should raise error for an invalid op" do
|
1349
|
-
proc {@db.send(:alter_table_sql, :mau, :op => :blah)}.should raise_error(Sequel::Error)
|
1350
|
-
end
|
1351
|
-
end
|
1352
|
-
|
1353
1058
|
describe "Database#inspect" do
|
1354
1059
|
before do
|
1355
1060
|
@db = DummyDatabase.new
|