sequel 3.28.0 → 3.29.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 +119 -3
- data/Rakefile +5 -3
- data/bin/sequel +1 -5
- data/doc/model_hooks.rdoc +9 -1
- data/doc/opening_databases.rdoc +49 -40
- data/doc/prepared_statements.rdoc +27 -6
- data/doc/release_notes/3.28.0.txt +2 -2
- data/doc/release_notes/3.29.0.txt +459 -0
- data/doc/sharding.rdoc +7 -1
- data/doc/testing.rdoc +18 -9
- data/doc/transactions.rdoc +41 -1
- data/lib/sequel/adapters/ado.rb +28 -17
- data/lib/sequel/adapters/ado/mssql.rb +18 -6
- data/lib/sequel/adapters/amalgalite.rb +11 -7
- data/lib/sequel/adapters/db2.rb +122 -70
- data/lib/sequel/adapters/dbi.rb +15 -15
- data/lib/sequel/adapters/do.rb +5 -36
- data/lib/sequel/adapters/do/mysql.rb +0 -5
- data/lib/sequel/adapters/do/postgres.rb +0 -5
- data/lib/sequel/adapters/do/sqlite.rb +0 -5
- data/lib/sequel/adapters/firebird.rb +3 -6
- data/lib/sequel/adapters/ibmdb.rb +24 -16
- data/lib/sequel/adapters/informix.rb +2 -4
- data/lib/sequel/adapters/jdbc.rb +47 -11
- data/lib/sequel/adapters/jdbc/as400.rb +5 -24
- data/lib/sequel/adapters/jdbc/db2.rb +0 -5
- data/lib/sequel/adapters/jdbc/derby.rb +217 -0
- data/lib/sequel/adapters/jdbc/firebird.rb +0 -5
- data/lib/sequel/adapters/jdbc/h2.rb +10 -12
- data/lib/sequel/adapters/jdbc/hsqldb.rb +166 -0
- data/lib/sequel/adapters/jdbc/informix.rb +0 -5
- data/lib/sequel/adapters/jdbc/jtds.rb +0 -5
- data/lib/sequel/adapters/jdbc/mysql.rb +0 -10
- data/lib/sequel/adapters/jdbc/oracle.rb +70 -3
- data/lib/sequel/adapters/jdbc/postgresql.rb +0 -11
- data/lib/sequel/adapters/jdbc/sqlite.rb +0 -5
- data/lib/sequel/adapters/jdbc/sqlserver.rb +0 -5
- data/lib/sequel/adapters/jdbc/transactions.rb +56 -7
- data/lib/sequel/adapters/mock.rb +315 -0
- data/lib/sequel/adapters/mysql.rb +64 -51
- data/lib/sequel/adapters/mysql2.rb +15 -9
- data/lib/sequel/adapters/odbc.rb +13 -6
- data/lib/sequel/adapters/odbc/db2.rb +0 -4
- data/lib/sequel/adapters/odbc/mssql.rb +0 -5
- data/lib/sequel/adapters/openbase.rb +2 -4
- data/lib/sequel/adapters/oracle.rb +333 -51
- data/lib/sequel/adapters/postgres.rb +80 -27
- data/lib/sequel/adapters/shared/access.rb +0 -6
- data/lib/sequel/adapters/shared/db2.rb +13 -15
- data/lib/sequel/adapters/shared/firebird.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +23 -18
- data/lib/sequel/adapters/shared/mysql.rb +6 -6
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +6 -0
- data/lib/sequel/adapters/shared/oracle.rb +185 -30
- data/lib/sequel/adapters/shared/postgres.rb +35 -18
- data/lib/sequel/adapters/shared/progress.rb +0 -6
- data/lib/sequel/adapters/shared/sqlite.rb +116 -37
- data/lib/sequel/adapters/sqlite.rb +16 -8
- data/lib/sequel/adapters/swift.rb +5 -5
- data/lib/sequel/adapters/swift/mysql.rb +0 -5
- data/lib/sequel/adapters/swift/postgres.rb +0 -5
- data/lib/sequel/adapters/swift/sqlite.rb +6 -4
- data/lib/sequel/adapters/tinytds.rb +13 -10
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +8 -0
- data/lib/sequel/core.rb +40 -0
- data/lib/sequel/database/connecting.rb +1 -2
- data/lib/sequel/database/dataset.rb +3 -3
- data/lib/sequel/database/dataset_defaults.rb +58 -0
- data/lib/sequel/database/misc.rb +62 -2
- data/lib/sequel/database/query.rb +113 -49
- data/lib/sequel/database/schema_methods.rb +7 -2
- data/lib/sequel/dataset/actions.rb +37 -19
- data/lib/sequel/dataset/features.rb +24 -0
- data/lib/sequel/dataset/graph.rb +7 -6
- data/lib/sequel/dataset/misc.rb +11 -3
- data/lib/sequel/dataset/mutation.rb +2 -3
- data/lib/sequel/dataset/prepared_statements.rb +6 -4
- data/lib/sequel/dataset/query.rb +46 -15
- data/lib/sequel/dataset/sql.rb +28 -4
- data/lib/sequel/extensions/named_timezones.rb +5 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +1 -1
- data/lib/sequel/model.rb +2 -1
- data/lib/sequel/model/associations.rb +115 -33
- data/lib/sequel/model/base.rb +91 -31
- data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
- data/lib/sequel/plugins/dataset_associations.rb +100 -0
- data/lib/sequel/plugins/force_encoding.rb +6 -6
- data/lib/sequel/plugins/identity_map.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +6 -10
- data/lib/sequel/plugins/prepared_statements.rb +12 -1
- data/lib/sequel/plugins/prepared_statements_associations.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +29 -15
- data/lib/sequel/plugins/serialization.rb +6 -1
- data/lib/sequel/plugins/sharding.rb +0 -5
- data/lib/sequel/plugins/single_table_inheritance.rb +1 -1
- data/lib/sequel/plugins/typecast_on_load.rb +9 -12
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/timezones.rb +42 -42
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mssql_spec.rb +29 -29
- data/spec/adapters/mysql_spec.rb +86 -104
- data/spec/adapters/oracle_spec.rb +48 -76
- data/spec/adapters/postgres_spec.rb +98 -33
- data/spec/adapters/spec_helper.rb +0 -5
- data/spec/adapters/sqlite_spec.rb +24 -21
- data/spec/core/connection_pool_spec.rb +9 -15
- data/spec/core/core_sql_spec.rb +20 -31
- data/spec/core/database_spec.rb +491 -227
- data/spec/core/dataset_spec.rb +638 -1051
- data/spec/core/expression_filters_spec.rb +0 -1
- data/spec/core/mock_adapter_spec.rb +378 -0
- data/spec/core/object_graph_spec.rb +48 -114
- data/spec/core/schema_generator_spec.rb +3 -3
- data/spec/core/schema_spec.rb +51 -114
- data/spec/core/spec_helper.rb +3 -90
- data/spec/extensions/class_table_inheritance_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +199 -0
- data/spec/extensions/instance_hooks_spec.rb +71 -0
- data/spec/extensions/named_timezones_spec.rb +22 -2
- data/spec/extensions/nested_attributes_spec.rb +3 -0
- data/spec/extensions/schema_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -0
- data/spec/extensions/serialization_spec.rb +5 -8
- data/spec/extensions/spec_helper.rb +4 -0
- data/spec/extensions/thread_local_timezones_spec.rb +22 -2
- data/spec/extensions/typecast_on_load_spec.rb +1 -6
- data/spec/integration/associations_test.rb +123 -12
- data/spec/integration/dataset_test.rb +140 -47
- data/spec/integration/eager_loader_test.rb +19 -21
- data/spec/integration/model_test.rb +80 -1
- data/spec/integration/plugin_test.rb +179 -128
- data/spec/integration/prepared_statement_test.rb +92 -91
- data/spec/integration/schema_test.rb +42 -23
- data/spec/integration/spec_helper.rb +25 -31
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +161 -34
- data/spec/integration/type_test.rb +3 -3
- data/spec/model/association_reflection_spec.rb +83 -7
- data/spec/model/associations_spec.rb +393 -676
- data/spec/model/base_spec.rb +186 -116
- data/spec/model/dataset_methods_spec.rb +7 -27
- data/spec/model/eager_loading_spec.rb +343 -867
- data/spec/model/hooks_spec.rb +160 -79
- data/spec/model/model_spec.rb +118 -165
- data/spec/model/plugins_spec.rb +7 -13
- data/spec/model/record_spec.rb +138 -207
- data/spec/model/spec_helper.rb +10 -73
- metadata +14 -8
|
@@ -2,7 +2,7 @@ require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
|
|
|
2
2
|
|
|
3
3
|
describe Sequel::Schema::Generator do
|
|
4
4
|
before do
|
|
5
|
-
@generator = Sequel::Schema::Generator.new(
|
|
5
|
+
@generator = Sequel::Schema::Generator.new(Sequel.mock) do
|
|
6
6
|
string :title
|
|
7
7
|
column :body, :text
|
|
8
8
|
foreign_key :parent_id
|
|
@@ -97,7 +97,7 @@ end
|
|
|
97
97
|
|
|
98
98
|
describe Sequel::Schema::AlterTableGenerator do
|
|
99
99
|
before do
|
|
100
|
-
@generator = Sequel::Schema::AlterTableGenerator.new(
|
|
100
|
+
@generator = Sequel::Schema::AlterTableGenerator.new(Sequel.mock) do
|
|
101
101
|
add_column :aaa, :text
|
|
102
102
|
drop_column :bbb
|
|
103
103
|
rename_column :ccc, :ho
|
|
@@ -147,7 +147,7 @@ end
|
|
|
147
147
|
|
|
148
148
|
describe "Sequel::Schema::Generator generic type methods" do
|
|
149
149
|
it "should store the type class in :type for each column" do
|
|
150
|
-
Sequel::Schema::Generator.new(
|
|
150
|
+
Sequel::Schema::Generator.new(Sequel.mock) do
|
|
151
151
|
String :a
|
|
152
152
|
Integer :b
|
|
153
153
|
Fixnum :c
|
data/spec/core/schema_spec.rb
CHANGED
|
@@ -2,7 +2,7 @@ require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
|
|
|
2
2
|
|
|
3
3
|
describe "DB#create_table" do
|
|
4
4
|
before do
|
|
5
|
-
@db =
|
|
5
|
+
@db = Sequel.mock
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
specify "should accept the table name" do
|
|
@@ -88,13 +88,11 @@ describe "DB#create_table" do
|
|
|
88
88
|
end
|
|
89
89
|
@db.sqls.should == ['CREATE TABLE cats (id integer PRIMARY KEY AUTOINCREMENT)']
|
|
90
90
|
|
|
91
|
-
@db.sqls.clear
|
|
92
91
|
@db.create_table(:cats) do
|
|
93
92
|
primary_key :id, :serial, :auto_increment => false
|
|
94
93
|
end
|
|
95
94
|
@db.sqls.should == ['CREATE TABLE cats (id serial PRIMARY KEY)']
|
|
96
95
|
|
|
97
|
-
@db.sqls.clear
|
|
98
96
|
@db.create_table(:cats) do
|
|
99
97
|
primary_key :id, :type => :serial, :auto_increment => false
|
|
100
98
|
end
|
|
@@ -154,7 +152,6 @@ describe "DB#create_table" do
|
|
|
154
152
|
varchar :name
|
|
155
153
|
end
|
|
156
154
|
@db.sqls.should == ["CREATE TABLE cats (name varchar(255))"]
|
|
157
|
-
@db.sqls.clear
|
|
158
155
|
@db.create_table(:cats) do
|
|
159
156
|
varchar :name, :size => 51
|
|
160
157
|
end
|
|
@@ -199,7 +196,6 @@ describe "DB#create_table" do
|
|
|
199
196
|
end
|
|
200
197
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects(id))"]
|
|
201
198
|
|
|
202
|
-
@db.sqls.clear
|
|
203
199
|
@db.create_table(:cats) do
|
|
204
200
|
foreign_key :project_id, :table => :projects, :key => :zzz
|
|
205
201
|
end
|
|
@@ -212,32 +208,25 @@ describe "DB#create_table" do
|
|
|
212
208
|
end
|
|
213
209
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE RESTRICT)"]
|
|
214
210
|
|
|
215
|
-
@db.sqls.clear
|
|
216
211
|
@db.create_table(:cats) do
|
|
217
212
|
foreign_key :project_id, :table => :projects, :on_delete => :cascade
|
|
218
213
|
end
|
|
219
214
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE CASCADE)"]
|
|
220
215
|
|
|
221
|
-
@db.sqls.clear
|
|
222
216
|
@db.create_table(:cats) do
|
|
223
217
|
foreign_key :project_id, :table => :projects, :on_delete => :no_action
|
|
224
218
|
end
|
|
225
219
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE NO ACTION)"]
|
|
226
|
-
@db.sqls.clear
|
|
227
220
|
|
|
228
|
-
@db.sqls.clear
|
|
229
221
|
@db.create_table(:cats) do
|
|
230
222
|
foreign_key :project_id, :table => :projects, :on_delete => :set_null
|
|
231
223
|
end
|
|
232
224
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE SET NULL)"]
|
|
233
|
-
@db.sqls.clear
|
|
234
225
|
|
|
235
|
-
@db.sqls.clear
|
|
236
226
|
@db.create_table(:cats) do
|
|
237
227
|
foreign_key :project_id, :table => :projects, :on_delete => :set_default
|
|
238
228
|
end
|
|
239
229
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON DELETE SET DEFAULT)"]
|
|
240
|
-
@db.sqls.clear
|
|
241
230
|
end
|
|
242
231
|
|
|
243
232
|
specify "should accept foreign keys with ON UPDATE clause" do
|
|
@@ -246,32 +235,25 @@ describe "DB#create_table" do
|
|
|
246
235
|
end
|
|
247
236
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON UPDATE RESTRICT)"]
|
|
248
237
|
|
|
249
|
-
@db.sqls.clear
|
|
250
238
|
@db.create_table(:cats) do
|
|
251
239
|
foreign_key :project_id, :table => :projects, :on_update => :cascade
|
|
252
240
|
end
|
|
253
241
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON UPDATE CASCADE)"]
|
|
254
242
|
|
|
255
|
-
@db.sqls.clear
|
|
256
243
|
@db.create_table(:cats) do
|
|
257
244
|
foreign_key :project_id, :table => :projects, :on_update => :no_action
|
|
258
245
|
end
|
|
259
246
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON UPDATE NO ACTION)"]
|
|
260
|
-
@db.sqls.clear
|
|
261
247
|
|
|
262
|
-
@db.sqls.clear
|
|
263
248
|
@db.create_table(:cats) do
|
|
264
249
|
foreign_key :project_id, :table => :projects, :on_update => :set_null
|
|
265
250
|
end
|
|
266
251
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON UPDATE SET NULL)"]
|
|
267
|
-
@db.sqls.clear
|
|
268
252
|
|
|
269
|
-
@db.sqls.clear
|
|
270
253
|
@db.create_table(:cats) do
|
|
271
254
|
foreign_key :project_id, :table => :projects, :on_update => :set_default
|
|
272
255
|
end
|
|
273
256
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects ON UPDATE SET DEFAULT)"]
|
|
274
|
-
@db.sqls.clear
|
|
275
257
|
end
|
|
276
258
|
|
|
277
259
|
specify "should accept foreign keys with deferrable option" do
|
|
@@ -368,7 +350,6 @@ describe "DB#create_table" do
|
|
|
368
350
|
@db.meta_def(:execute_ddl){|*a| raise Sequel::DatabaseError if /blah/.match(a.first); super(*a)}
|
|
369
351
|
lambda{@db.create_table(:cats){Integer :id; index :blah; index :id}}.should raise_error(Sequel::DatabaseError)
|
|
370
352
|
@db.sqls.should == ['CREATE TABLE cats (id integer)']
|
|
371
|
-
@db.sqls.clear
|
|
372
353
|
lambda{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}.should_not raise_error(Sequel::DatabaseError)
|
|
373
354
|
@db.sqls.should == ['CREATE TABLE cats (id integer)', 'CREATE INDEX cats_id_index ON cats (id)']
|
|
374
355
|
end
|
|
@@ -506,7 +487,6 @@ describe "DB#create_table" do
|
|
|
506
487
|
foreign_key [:a, :b], :abc, :key => [:real_a, :real_b]
|
|
507
488
|
end
|
|
508
489
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc(real_a, real_b))"]
|
|
509
|
-
@db.sqls.clear
|
|
510
490
|
|
|
511
491
|
@db.create_table(:cats) do
|
|
512
492
|
integer :a
|
|
@@ -524,7 +504,6 @@ describe "DB#create_table" do
|
|
|
524
504
|
end
|
|
525
505
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc ON DELETE CASCADE)"]
|
|
526
506
|
|
|
527
|
-
@db.sqls.clear
|
|
528
507
|
@db.create_table(:cats) do
|
|
529
508
|
integer :a
|
|
530
509
|
integer :b
|
|
@@ -532,7 +511,6 @@ describe "DB#create_table" do
|
|
|
532
511
|
end
|
|
533
512
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc ON UPDATE NO ACTION)"]
|
|
534
513
|
|
|
535
|
-
@db.sqls.clear
|
|
536
514
|
@db.create_table(:cats) do
|
|
537
515
|
integer :a
|
|
538
516
|
integer :b
|
|
@@ -540,7 +518,6 @@ describe "DB#create_table" do
|
|
|
540
518
|
end
|
|
541
519
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc ON DELETE RESTRICT ON UPDATE SET DEFAULT)"]
|
|
542
520
|
|
|
543
|
-
@db.sqls.clear
|
|
544
521
|
@db.create_table(:cats) do
|
|
545
522
|
integer :a
|
|
546
523
|
integer :b
|
|
@@ -552,7 +529,7 @@ end
|
|
|
552
529
|
|
|
553
530
|
describe "DB#create_table!" do
|
|
554
531
|
before do
|
|
555
|
-
@db =
|
|
532
|
+
@db = Sequel.mock
|
|
556
533
|
end
|
|
557
534
|
|
|
558
535
|
specify "should create the table if it does not exist" do
|
|
@@ -570,13 +547,13 @@ end
|
|
|
570
547
|
|
|
571
548
|
describe "DB#create_table?" do
|
|
572
549
|
before do
|
|
573
|
-
@db =
|
|
550
|
+
@db = Sequel.mock
|
|
574
551
|
end
|
|
575
552
|
|
|
576
553
|
specify "should not create the table if the table already exists" do
|
|
577
554
|
@db.meta_def(:table_exists?){|a| true}
|
|
578
555
|
@db.create_table?(:cats){|*a|}
|
|
579
|
-
@db.sqls.should ==
|
|
556
|
+
@db.sqls.should == []
|
|
580
557
|
end
|
|
581
558
|
|
|
582
559
|
specify "should create the table if the table doesn't already exist" do
|
|
@@ -594,7 +571,7 @@ end
|
|
|
594
571
|
|
|
595
572
|
describe "DB#drop_table" do
|
|
596
573
|
before do
|
|
597
|
-
@db =
|
|
574
|
+
@db = Sequel.mock
|
|
598
575
|
end
|
|
599
576
|
|
|
600
577
|
specify "should generate a DROP TABLE statement" do
|
|
@@ -615,7 +592,7 @@ end
|
|
|
615
592
|
|
|
616
593
|
describe "DB#alter_table" do
|
|
617
594
|
before do
|
|
618
|
-
@db =
|
|
595
|
+
@db = Sequel.mock
|
|
619
596
|
end
|
|
620
597
|
|
|
621
598
|
specify "should allow adding not null constraint" do
|
|
@@ -659,7 +636,6 @@ describe "DB#alter_table" do
|
|
|
659
636
|
end
|
|
660
637
|
@db.sqls.should == ["ALTER TABLE cats ADD UNIQUE (a, b)"]
|
|
661
638
|
|
|
662
|
-
@db.sqls.clear
|
|
663
639
|
@db.alter_table(:cats) do
|
|
664
640
|
add_unique_constraint [:a, :b], :name => :ab_uniq
|
|
665
641
|
end
|
|
@@ -679,19 +655,16 @@ describe "DB#alter_table" do
|
|
|
679
655
|
end
|
|
680
656
|
@db.sqls.should == ["ALTER TABLE cats ADD FOREIGN KEY (node_id, prop_id) REFERENCES nodes_props"]
|
|
681
657
|
|
|
682
|
-
@db.sqls.clear
|
|
683
658
|
@db.alter_table(:cats) do
|
|
684
659
|
add_foreign_key [:node_id, :prop_id], :nodes_props, :name => :cfk
|
|
685
660
|
end
|
|
686
661
|
@db.sqls.should == ["ALTER TABLE cats ADD CONSTRAINT cfk FOREIGN KEY (node_id, prop_id) REFERENCES nodes_props"]
|
|
687
662
|
|
|
688
|
-
@db.sqls.clear
|
|
689
663
|
@db.alter_table(:cats) do
|
|
690
664
|
add_foreign_key [:node_id, :prop_id], :nodes_props, :key => [:nid, :pid]
|
|
691
665
|
end
|
|
692
666
|
@db.sqls.should == ["ALTER TABLE cats ADD FOREIGN KEY (node_id, prop_id) REFERENCES nodes_props(nid, pid)"]
|
|
693
667
|
|
|
694
|
-
@db.sqls.clear
|
|
695
668
|
@db.alter_table(:cats) do
|
|
696
669
|
add_foreign_key [:node_id, :prop_id], :nodes_props, :on_delete => :restrict, :on_update => :cascade
|
|
697
670
|
end
|
|
@@ -709,7 +682,7 @@ describe "DB#alter_table" do
|
|
|
709
682
|
@db.meta_def(:execute_ddl){|*a| raise Sequel::DatabaseError}
|
|
710
683
|
lambda{@db.add_index(:cats, :id)}.should raise_error(Sequel::DatabaseError)
|
|
711
684
|
lambda{@db.add_index(:cats, :id, :ignore_errors=>true)}.should_not raise_error(Sequel::DatabaseError)
|
|
712
|
-
@db.sqls.should ==
|
|
685
|
+
@db.sqls.should == []
|
|
713
686
|
end
|
|
714
687
|
|
|
715
688
|
specify "should support add_primary_key" do
|
|
@@ -725,7 +698,6 @@ describe "DB#alter_table" do
|
|
|
725
698
|
end
|
|
726
699
|
@db.sqls.should == ["ALTER TABLE cats ADD PRIMARY KEY (id, type)"]
|
|
727
700
|
|
|
728
|
-
@db.sqls.clear
|
|
729
701
|
@db.alter_table(:cats) do
|
|
730
702
|
add_primary_key [:id, :type], :name => :cpk
|
|
731
703
|
end
|
|
@@ -809,7 +781,7 @@ end
|
|
|
809
781
|
|
|
810
782
|
describe "Database#create_table" do
|
|
811
783
|
before do
|
|
812
|
-
@db =
|
|
784
|
+
@db = Sequel.mock
|
|
813
785
|
end
|
|
814
786
|
|
|
815
787
|
specify "should construct proper SQL" do
|
|
@@ -818,10 +790,8 @@ describe "Database#create_table" do
|
|
|
818
790
|
column :name, :text
|
|
819
791
|
index :name, :unique => true
|
|
820
792
|
end
|
|
821
|
-
@db.sqls.should == [
|
|
822
|
-
'CREATE
|
|
823
|
-
'CREATE UNIQUE INDEX test_name_index ON test (name)'
|
|
824
|
-
]
|
|
793
|
+
@db.sqls.should == ['CREATE TABLE test (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name text)',
|
|
794
|
+
'CREATE UNIQUE INDEX test_name_index ON test (name)']
|
|
825
795
|
end
|
|
826
796
|
|
|
827
797
|
specify "should create a temporary table" do
|
|
@@ -831,10 +801,8 @@ describe "Database#create_table" do
|
|
|
831
801
|
index :name, :unique => true
|
|
832
802
|
end
|
|
833
803
|
|
|
834
|
-
@db.sqls.should == [
|
|
835
|
-
'CREATE
|
|
836
|
-
'CREATE UNIQUE INDEX test_tmp_name_index ON test_tmp (name)'
|
|
837
|
-
]
|
|
804
|
+
@db.sqls.should == ['CREATE TEMPORARY TABLE test_tmp (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name text)',
|
|
805
|
+
'CREATE UNIQUE INDEX test_tmp_name_index ON test_tmp (name)']
|
|
838
806
|
end
|
|
839
807
|
|
|
840
808
|
specify "should not use default schema when creating a temporary table" do
|
|
@@ -848,7 +816,7 @@ end
|
|
|
848
816
|
|
|
849
817
|
describe "Database#alter_table" do
|
|
850
818
|
before do
|
|
851
|
-
@db =
|
|
819
|
+
@db = Sequel.mock
|
|
852
820
|
end
|
|
853
821
|
|
|
854
822
|
specify "should construct proper SQL" do
|
|
@@ -858,40 +826,31 @@ describe "Database#alter_table" do
|
|
|
858
826
|
rename_column :ccc, :ddd
|
|
859
827
|
set_column_type :eee, :integer
|
|
860
828
|
set_column_default :hhh, 'abcd'
|
|
861
|
-
|
|
862
829
|
add_index :fff, :unique => true
|
|
863
830
|
drop_index :ggg
|
|
864
831
|
end
|
|
865
832
|
|
|
866
|
-
@db.sqls.should == [
|
|
867
|
-
'ALTER TABLE xyz ADD COLUMN aaa text NOT NULL UNIQUE',
|
|
833
|
+
@db.sqls.should == ['ALTER TABLE xyz ADD COLUMN aaa text NOT NULL UNIQUE',
|
|
868
834
|
'ALTER TABLE xyz DROP COLUMN bbb',
|
|
869
835
|
'ALTER TABLE xyz RENAME COLUMN ccc TO ddd',
|
|
870
836
|
'ALTER TABLE xyz ALTER COLUMN eee TYPE integer',
|
|
871
837
|
"ALTER TABLE xyz ALTER COLUMN hhh SET DEFAULT 'abcd'",
|
|
872
|
-
|
|
873
838
|
'CREATE UNIQUE INDEX xyz_fff_index ON xyz (fff)',
|
|
874
|
-
'DROP INDEX xyz_ggg_index'
|
|
875
|
-
]
|
|
839
|
+
'DROP INDEX xyz_ggg_index']
|
|
876
840
|
end
|
|
877
841
|
end
|
|
878
842
|
|
|
879
843
|
describe "Database#add_column" do
|
|
880
|
-
before do
|
|
881
|
-
@db = DummyDatabase.new
|
|
882
|
-
end
|
|
883
|
-
|
|
884
844
|
specify "should construct proper SQL" do
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
]
|
|
845
|
+
db = Sequel.mock
|
|
846
|
+
db.add_column :test, :name, :text, :unique => true
|
|
847
|
+
db.sqls.should == ['ALTER TABLE test ADD COLUMN name text UNIQUE']
|
|
889
848
|
end
|
|
890
849
|
end
|
|
891
850
|
|
|
892
851
|
describe "Database#drop_column" do
|
|
893
852
|
before do
|
|
894
|
-
@db =
|
|
853
|
+
@db = Sequel.mock
|
|
895
854
|
end
|
|
896
855
|
|
|
897
856
|
specify "should construct proper SQL" do
|
|
@@ -907,80 +866,68 @@ end
|
|
|
907
866
|
|
|
908
867
|
describe "Database#rename_column" do
|
|
909
868
|
before do
|
|
910
|
-
@db =
|
|
869
|
+
@db = Sequel.mock
|
|
911
870
|
end
|
|
912
871
|
|
|
913
872
|
specify "should construct proper SQL" do
|
|
914
873
|
@db.rename_column :test, :abc, :def
|
|
915
|
-
@db.sqls.should == [
|
|
916
|
-
'ALTER TABLE test RENAME COLUMN abc TO def'
|
|
917
|
-
]
|
|
874
|
+
@db.sqls.should == ['ALTER TABLE test RENAME COLUMN abc TO def']
|
|
918
875
|
end
|
|
919
876
|
end
|
|
920
877
|
|
|
921
878
|
describe "Database#set_column_type" do
|
|
922
879
|
before do
|
|
923
|
-
@db =
|
|
880
|
+
@db = Sequel.mock
|
|
924
881
|
end
|
|
925
882
|
|
|
926
883
|
specify "should construct proper SQL" do
|
|
927
884
|
@db.set_column_type :test, :name, :integer
|
|
928
|
-
@db.sqls.should == [
|
|
929
|
-
'ALTER TABLE test ALTER COLUMN name TYPE integer'
|
|
930
|
-
]
|
|
885
|
+
@db.sqls.should == ['ALTER TABLE test ALTER COLUMN name TYPE integer']
|
|
931
886
|
end
|
|
932
887
|
end
|
|
933
888
|
|
|
934
889
|
describe "Database#set_column_default" do
|
|
935
890
|
before do
|
|
936
|
-
@db =
|
|
891
|
+
@db = Sequel.mock
|
|
937
892
|
end
|
|
938
893
|
|
|
939
894
|
specify "should construct proper SQL" do
|
|
940
895
|
@db.set_column_default :test, :name, 'zyx'
|
|
941
|
-
@db.sqls.should == [
|
|
942
|
-
"ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"
|
|
943
|
-
]
|
|
896
|
+
@db.sqls.should == ["ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"]
|
|
944
897
|
end
|
|
945
898
|
end
|
|
946
899
|
|
|
947
900
|
describe "Database#add_index" do
|
|
948
901
|
before do
|
|
949
|
-
@db =
|
|
902
|
+
@db = Sequel.mock
|
|
950
903
|
end
|
|
951
904
|
|
|
952
905
|
specify "should construct proper SQL" do
|
|
953
906
|
@db.add_index :test, :name, :unique => true
|
|
954
|
-
@db.sqls.should == [
|
|
955
|
-
'CREATE UNIQUE INDEX test_name_index ON test (name)'
|
|
956
|
-
]
|
|
907
|
+
@db.sqls.should == ['CREATE UNIQUE INDEX test_name_index ON test (name)']
|
|
957
908
|
end
|
|
958
909
|
|
|
959
910
|
specify "should accept multiple columns" do
|
|
960
911
|
@db.add_index :test, [:one, :two]
|
|
961
|
-
@db.sqls.should == [
|
|
962
|
-
'CREATE INDEX test_one_two_index ON test (one, two)'
|
|
963
|
-
]
|
|
912
|
+
@db.sqls.should == ['CREATE INDEX test_one_two_index ON test (one, two)']
|
|
964
913
|
end
|
|
965
914
|
end
|
|
966
915
|
|
|
967
916
|
describe "Database#drop_index" do
|
|
968
917
|
before do
|
|
969
|
-
@db =
|
|
918
|
+
@db = Sequel.mock
|
|
970
919
|
end
|
|
971
920
|
|
|
972
921
|
specify "should construct proper SQL" do
|
|
973
922
|
@db.drop_index :test, :name
|
|
974
|
-
@db.sqls.should == [
|
|
975
|
-
'DROP INDEX test_name_index'
|
|
976
|
-
]
|
|
923
|
+
@db.sqls.should == ['DROP INDEX test_name_index']
|
|
977
924
|
end
|
|
978
925
|
|
|
979
926
|
end
|
|
980
927
|
|
|
981
928
|
describe "Database#drop_table" do
|
|
982
929
|
before do
|
|
983
|
-
@db =
|
|
930
|
+
@db = Sequel.mock
|
|
984
931
|
end
|
|
985
932
|
|
|
986
933
|
specify "should construct proper SQL" do
|
|
@@ -990,17 +937,13 @@ describe "Database#drop_table" do
|
|
|
990
937
|
|
|
991
938
|
specify "should accept multiple table names" do
|
|
992
939
|
@db.drop_table :a, :bb, :ccc
|
|
993
|
-
@db.sqls.should == [
|
|
994
|
-
'DROP TABLE a',
|
|
995
|
-
'DROP TABLE bb',
|
|
996
|
-
'DROP TABLE ccc'
|
|
997
|
-
]
|
|
940
|
+
@db.sqls.should == ['DROP TABLE a', 'DROP TABLE bb', 'DROP TABLE ccc']
|
|
998
941
|
end
|
|
999
942
|
end
|
|
1000
943
|
|
|
1001
944
|
describe "Database#rename_table" do
|
|
1002
945
|
before do
|
|
1003
|
-
@db =
|
|
946
|
+
@db = Sequel.mock
|
|
1004
947
|
end
|
|
1005
948
|
|
|
1006
949
|
specify "should construct proper SQL" do
|
|
@@ -1011,13 +954,12 @@ end
|
|
|
1011
954
|
|
|
1012
955
|
describe "Database#create_view" do
|
|
1013
956
|
before do
|
|
1014
|
-
@db =
|
|
957
|
+
@db = Sequel.mock
|
|
1015
958
|
end
|
|
1016
959
|
|
|
1017
960
|
specify "should construct proper SQL with raw SQL" do
|
|
1018
961
|
@db.create_view :test, "SELECT * FROM xyz"
|
|
1019
962
|
@db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
|
|
1020
|
-
@db.sqls.clear
|
|
1021
963
|
@db.create_view :test.identifier, "SELECT * FROM xyz"
|
|
1022
964
|
@db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
|
|
1023
965
|
end
|
|
@@ -1025,21 +967,6 @@ describe "Database#create_view" do
|
|
|
1025
967
|
specify "should construct proper SQL with dataset" do
|
|
1026
968
|
@db.create_view :test, @db[:items].select(:a, :b).order(:c)
|
|
1027
969
|
@db.sqls.should == ['CREATE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
|
1028
|
-
@db.sqls.clear
|
|
1029
|
-
@db.create_view :test.qualify(:sch), @db[:items].select(:a, :b).order(:c)
|
|
1030
|
-
@db.sqls.should == ['CREATE VIEW sch.test AS SELECT a, b FROM items ORDER BY c']
|
|
1031
|
-
end
|
|
1032
|
-
end
|
|
1033
|
-
|
|
1034
|
-
describe "Database#create_or_replace_view" do
|
|
1035
|
-
before do
|
|
1036
|
-
@db = DummyDatabase.new
|
|
1037
|
-
end
|
|
1038
|
-
|
|
1039
|
-
specify "should construct proper SQL with raw SQL" do
|
|
1040
|
-
@db.create_or_replace_view :test, "SELECT * FROM xyz"
|
|
1041
|
-
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT * FROM xyz']
|
|
1042
|
-
@db.sqls.clear
|
|
1043
970
|
@db.create_or_replace_view :sch__test, "SELECT * FROM xyz"
|
|
1044
971
|
@db.sqls.should == ['CREATE OR REPLACE VIEW sch.test AS SELECT * FROM xyz']
|
|
1045
972
|
end
|
|
@@ -1047,7 +974,6 @@ describe "Database#create_or_replace_view" do
|
|
|
1047
974
|
specify "should construct proper SQL with dataset" do
|
|
1048
975
|
@db.create_or_replace_view :test, @db[:items].select(:a, :b).order(:c)
|
|
1049
976
|
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
|
1050
|
-
@db.sqls.clear
|
|
1051
977
|
@db.create_or_replace_view :test.identifier, @db[:items].select(:a, :b).order(:c)
|
|
1052
978
|
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
|
1053
979
|
end
|
|
@@ -1055,7 +981,7 @@ end
|
|
|
1055
981
|
|
|
1056
982
|
describe "Database#drop_view" do
|
|
1057
983
|
before do
|
|
1058
|
-
@db =
|
|
984
|
+
@db = Sequel.mock
|
|
1059
985
|
end
|
|
1060
986
|
|
|
1061
987
|
specify "should construct proper SQL" do
|
|
@@ -1078,12 +1004,8 @@ describe "Database#drop_view" do
|
|
|
1078
1004
|
end
|
|
1079
1005
|
|
|
1080
1006
|
describe "Database#alter_table_sql" do
|
|
1081
|
-
before do
|
|
1082
|
-
@db = DummyDatabase.new
|
|
1083
|
-
end
|
|
1084
|
-
|
|
1085
1007
|
specify "should raise error for an invalid op" do
|
|
1086
|
-
proc {
|
|
1008
|
+
proc {Sequel.mock.send(:alter_table_sql, :mau, :op => :blah)}.should raise_error(Sequel::Error)
|
|
1087
1009
|
end
|
|
1088
1010
|
end
|
|
1089
1011
|
|
|
@@ -1100,6 +1022,21 @@ describe "Schema Parser" do
|
|
|
1100
1022
|
proc{@db.schema(:x)}.should raise_error(Sequel::Error)
|
|
1101
1023
|
end
|
|
1102
1024
|
|
|
1025
|
+
specify "should provide options if given a table name" do
|
|
1026
|
+
c = nil
|
|
1027
|
+
@db.meta_def(:schema_parse_table) do |t, opts|
|
|
1028
|
+
c = [t, opts]
|
|
1029
|
+
[[:a, {:db_type=>t.to_s}]]
|
|
1030
|
+
end
|
|
1031
|
+
@db.schema(:x)
|
|
1032
|
+
c.should == ["x", {}]
|
|
1033
|
+
@db.schema(:s__x)
|
|
1034
|
+
c.should == ["x", {:schema=>"s"}]
|
|
1035
|
+
ds = @db[:s__y]
|
|
1036
|
+
@db.schema(ds)
|
|
1037
|
+
c.should == ["y", {:schema=>"s", :dataset=>ds}]
|
|
1038
|
+
end
|
|
1039
|
+
|
|
1103
1040
|
specify "should parse the schema correctly for a single table" do
|
|
1104
1041
|
sqls = @sqls
|
|
1105
1042
|
proc{@db.schema(:x)}.should raise_error(Sequel::Error)
|