sequel 3.21.0 → 3.32.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 +539 -3
- data/MIT-LICENSE +1 -1
- data/README.rdoc +20 -6
- data/Rakefile +37 -19
- data/bin/sequel +1 -5
- data/doc/advanced_associations.rdoc +17 -0
- data/doc/association_basics.rdoc +293 -43
- data/doc/dataset_basics.rdoc +4 -4
- data/doc/dataset_filtering.rdoc +8 -0
- data/doc/mass_assignment.rdoc +54 -0
- data/doc/migration.rdoc +15 -538
- data/doc/model_hooks.rdoc +72 -27
- data/doc/opening_databases.rdoc +89 -50
- data/doc/prepared_statements.rdoc +40 -13
- data/doc/reflection.rdoc +8 -2
- data/doc/release_notes/3.22.0.txt +39 -0
- data/doc/release_notes/3.23.0.txt +172 -0
- data/doc/release_notes/3.24.0.txt +420 -0
- data/doc/release_notes/3.25.0.txt +88 -0
- data/doc/release_notes/3.26.0.txt +88 -0
- data/doc/release_notes/3.27.0.txt +82 -0
- data/doc/release_notes/3.28.0.txt +304 -0
- data/doc/release_notes/3.29.0.txt +459 -0
- data/doc/release_notes/3.30.0.txt +135 -0
- data/doc/release_notes/3.31.0.txt +146 -0
- data/doc/release_notes/3.32.0.txt +202 -0
- data/doc/schema_modification.rdoc +547 -0
- data/doc/sharding.rdoc +7 -1
- data/doc/testing.rdoc +129 -0
- data/doc/transactions.rdoc +137 -0
- data/doc/virtual_rows.rdoc +2 -2
- data/lib/sequel/adapters/ado/mssql.rb +18 -6
- data/lib/sequel/adapters/ado.rb +40 -18
- data/lib/sequel/adapters/amalgalite.rb +17 -9
- data/lib/sequel/adapters/db2.rb +175 -86
- data/lib/sequel/adapters/dbi.rb +15 -15
- data/lib/sequel/adapters/do/mysql.rb +5 -7
- data/lib/sequel/adapters/do/postgres.rb +0 -5
- data/lib/sequel/adapters/do/sqlite.rb +0 -5
- data/lib/sequel/adapters/do.rb +17 -36
- data/lib/sequel/adapters/firebird.rb +27 -208
- data/lib/sequel/adapters/ibmdb.rb +448 -0
- data/lib/sequel/adapters/informix.rb +6 -23
- data/lib/sequel/adapters/jdbc/as400.rb +16 -34
- data/lib/sequel/adapters/jdbc/db2.rb +52 -0
- data/lib/sequel/adapters/jdbc/derby.rb +260 -0
- data/lib/sequel/adapters/jdbc/firebird.rb +29 -0
- data/lib/sequel/adapters/jdbc/h2.rb +66 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +177 -0
- data/lib/sequel/adapters/jdbc/informix.rb +26 -0
- data/lib/sequel/adapters/jdbc/jtds.rb +34 -0
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
- data/lib/sequel/adapters/jdbc/mysql.rb +11 -11
- data/lib/sequel/adapters/jdbc/oracle.rb +88 -25
- data/lib/sequel/adapters/jdbc/postgresql.rb +9 -13
- data/lib/sequel/adapters/jdbc/sqlite.rb +2 -6
- data/lib/sequel/adapters/jdbc/sqlserver.rb +71 -0
- data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
- data/lib/sequel/adapters/jdbc.rb +231 -78
- data/lib/sequel/adapters/mock.rb +339 -0
- data/lib/sequel/adapters/mysql.rb +85 -184
- data/lib/sequel/adapters/mysql2.rb +26 -25
- data/lib/sequel/adapters/odbc/db2.rb +17 -0
- data/lib/sequel/adapters/odbc/mssql.rb +1 -6
- data/lib/sequel/adapters/odbc.rb +28 -9
- data/lib/sequel/adapters/openbase.rb +3 -5
- data/lib/sequel/adapters/oracle.rb +355 -53
- data/lib/sequel/adapters/postgres.rb +194 -33
- data/lib/sequel/adapters/shared/access.rb +32 -9
- data/lib/sequel/adapters/shared/db2.rb +328 -0
- data/lib/sequel/adapters/shared/firebird.rb +221 -0
- data/lib/sequel/adapters/shared/informix.rb +53 -0
- data/lib/sequel/adapters/shared/mssql.rb +278 -107
- data/lib/sequel/adapters/shared/mysql.rb +203 -65
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +149 -0
- data/lib/sequel/adapters/shared/oracle.rb +237 -46
- data/lib/sequel/adapters/shared/postgres.rb +214 -82
- data/lib/sequel/adapters/shared/progress.rb +5 -8
- data/lib/sequel/adapters/shared/sqlite.rb +200 -50
- data/lib/sequel/adapters/sqlite.rb +29 -21
- data/lib/sequel/adapters/swift/mysql.rb +12 -7
- data/lib/sequel/adapters/swift/postgres.rb +0 -5
- data/lib/sequel/adapters/swift/sqlite.rb +8 -6
- data/lib/sequel/adapters/swift.rb +5 -5
- data/lib/sequel/adapters/tinytds.rb +160 -19
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +66 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
- data/lib/sequel/ast_transformer.rb +190 -0
- data/lib/sequel/connection_pool/threaded.rb +3 -2
- data/lib/sequel/connection_pool.rb +1 -1
- data/lib/sequel/core.rb +68 -5
- data/lib/sequel/database/connecting.rb +5 -6
- data/lib/sequel/database/dataset.rb +4 -4
- data/lib/sequel/database/dataset_defaults.rb +59 -1
- data/lib/sequel/database/logging.rb +1 -1
- data/lib/sequel/database/misc.rb +104 -19
- data/lib/sequel/database/query.rb +163 -59
- data/lib/sequel/database/schema_generator.rb +17 -7
- data/lib/sequel/database/schema_methods.rb +59 -29
- data/lib/sequel/dataset/actions.rb +240 -76
- data/lib/sequel/dataset/features.rb +91 -8
- data/lib/sequel/dataset/graph.rb +38 -11
- data/lib/sequel/dataset/misc.rb +50 -23
- data/lib/sequel/dataset/mutation.rb +12 -7
- data/lib/sequel/dataset/prepared_statements.rb +59 -27
- data/lib/sequel/dataset/query.rb +236 -43
- data/lib/sequel/dataset/sql.rb +676 -267
- data/lib/sequel/dataset.rb +8 -0
- data/lib/sequel/exceptions.rb +4 -0
- data/lib/sequel/extensions/columns_introspection.rb +61 -0
- data/lib/sequel/extensions/migration.rb +6 -4
- data/lib/sequel/extensions/named_timezones.rb +5 -0
- data/lib/sequel/extensions/query.rb +1 -1
- data/lib/sequel/extensions/thread_local_timezones.rb +1 -1
- data/lib/sequel/extensions/to_dot.rb +95 -83
- data/lib/sequel/model/associations.rb +1081 -344
- data/lib/sequel/model/base.rb +420 -133
- data/lib/sequel/model/errors.rb +1 -1
- data/lib/sequel/model/exceptions.rb +5 -1
- data/lib/sequel/model.rb +20 -10
- data/lib/sequel/plugins/active_model.rb +13 -1
- data/lib/sequel/plugins/association_pks.rb +22 -4
- data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
- data/lib/sequel/plugins/composition.rb +43 -10
- data/lib/sequel/plugins/dataset_associations.rb +100 -0
- data/lib/sequel/plugins/defaults_setter.rb +58 -0
- data/lib/sequel/plugins/force_encoding.rb +6 -6
- data/lib/sequel/plugins/identity_map.rb +114 -7
- data/lib/sequel/plugins/many_through_many.rb +68 -7
- data/lib/sequel/plugins/nested_attributes.rb +65 -10
- data/lib/sequel/plugins/prepared_statements.rb +151 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +84 -0
- data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
- data/lib/sequel/plugins/rcte_tree.rb +29 -15
- data/lib/sequel/plugins/serialization.rb +98 -49
- data/lib/sequel/plugins/serialization_modification_detection.rb +63 -0
- data/lib/sequel/plugins/sharding.rb +21 -54
- data/lib/sequel/plugins/single_table_inheritance.rb +3 -1
- data/lib/sequel/plugins/typecast_on_load.rb +9 -12
- data/lib/sequel/plugins/update_primary_key.rb +2 -2
- data/lib/sequel/plugins/xml_serializer.rb +3 -3
- data/lib/sequel/sql.rb +109 -52
- data/lib/sequel/timezones.rb +57 -38
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +146 -0
- data/spec/adapters/mssql_spec.rb +135 -30
- data/spec/adapters/mysql_spec.rb +244 -212
- data/spec/adapters/oracle_spec.rb +67 -77
- data/spec/adapters/postgres_spec.rb +267 -78
- data/spec/adapters/spec_helper.rb +6 -5
- data/spec/adapters/sqlite_spec.rb +35 -21
- data/spec/core/connection_pool_spec.rb +71 -92
- data/spec/core/core_sql_spec.rb +21 -30
- data/spec/core/database_spec.rb +789 -512
- data/spec/core/dataset_spec.rb +1176 -1061
- data/spec/core/expression_filters_spec.rb +159 -42
- data/spec/core/mock_adapter_spec.rb +419 -0
- data/spec/core/object_graph_spec.rb +86 -114
- data/spec/core/schema_generator_spec.rb +3 -3
- data/spec/core/schema_spec.rb +298 -38
- data/spec/core/spec_helper.rb +6 -48
- data/spec/extensions/active_model_spec.rb +13 -0
- data/spec/extensions/association_autoreloading_spec.rb +1 -10
- data/spec/extensions/association_dependencies_spec.rb +2 -12
- data/spec/extensions/association_pks_spec.rb +66 -32
- data/spec/extensions/caching_spec.rb +23 -50
- data/spec/extensions/class_table_inheritance_spec.rb +31 -83
- data/spec/extensions/columns_introspection_spec.rb +91 -0
- data/spec/extensions/composition_spec.rb +18 -13
- data/spec/extensions/dataset_associations_spec.rb +199 -0
- data/spec/extensions/defaults_setter_spec.rb +64 -0
- data/spec/extensions/hook_class_methods_spec.rb +65 -91
- data/spec/extensions/identity_map_spec.rb +114 -22
- data/spec/extensions/instance_filters_spec.rb +11 -21
- data/spec/extensions/instance_hooks_spec.rb +53 -0
- data/spec/extensions/json_serializer_spec.rb +4 -5
- data/spec/extensions/lazy_attributes_spec.rb +16 -20
- data/spec/extensions/list_spec.rb +17 -39
- data/spec/extensions/many_through_many_spec.rb +283 -250
- data/spec/extensions/migration_spec.rb +35 -32
- data/spec/extensions/named_timezones_spec.rb +23 -3
- data/spec/extensions/nested_attributes_spec.rb +97 -88
- data/spec/extensions/optimistic_locking_spec.rb +9 -20
- data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
- data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
- data/spec/extensions/prepared_statements_spec.rb +53 -0
- data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
- data/spec/extensions/pretty_table_spec.rb +1 -6
- data/spec/extensions/query_spec.rb +6 -0
- data/spec/extensions/rcte_tree_spec.rb +41 -43
- data/spec/extensions/schema_dumper_spec.rb +5 -8
- data/spec/extensions/schema_spec.rb +13 -21
- data/spec/extensions/serialization_modification_detection_spec.rb +72 -0
- data/spec/extensions/serialization_spec.rb +81 -43
- data/spec/extensions/sharding_spec.rb +66 -140
- data/spec/extensions/single_table_inheritance_spec.rb +18 -29
- data/spec/extensions/spec_helper.rb +13 -61
- data/spec/extensions/sql_expr_spec.rb +20 -60
- data/spec/extensions/tactical_eager_loading_spec.rb +9 -19
- data/spec/extensions/thread_local_timezones_spec.rb +22 -2
- data/spec/extensions/timestamps_spec.rb +6 -6
- data/spec/extensions/to_dot_spec.rb +4 -7
- data/spec/extensions/touch_spec.rb +13 -14
- data/spec/extensions/tree_spec.rb +11 -26
- data/spec/extensions/typecast_on_load_spec.rb +1 -6
- data/spec/extensions/update_primary_key_spec.rb +30 -24
- data/spec/extensions/validation_class_methods_spec.rb +30 -51
- data/spec/extensions/validation_helpers_spec.rb +16 -35
- data/spec/extensions/xml_serializer_spec.rb +16 -4
- data/spec/integration/associations_test.rb +661 -21
- data/spec/integration/database_test.rb +4 -2
- data/spec/integration/dataset_test.rb +500 -67
- data/spec/integration/eager_loader_test.rb +19 -21
- data/spec/integration/model_test.rb +80 -1
- data/spec/integration/plugin_test.rb +367 -119
- data/spec/integration/prepared_statement_test.rb +222 -125
- data/spec/integration/schema_test.rb +217 -39
- data/spec/integration/spec_helper.rb +39 -30
- data/spec/integration/timezone_test.rb +38 -12
- data/spec/integration/transaction_test.rb +182 -5
- data/spec/integration/type_test.rb +17 -3
- data/spec/model/association_reflection_spec.rb +201 -7
- data/spec/model/associations_spec.rb +955 -662
- data/spec/model/base_spec.rb +275 -95
- data/spec/model/dataset_methods_spec.rb +7 -27
- data/spec/model/eager_loading_spec.rb +677 -676
- data/spec/model/hooks_spec.rb +349 -67
- data/spec/model/model_spec.rb +222 -168
- data/spec/model/plugins_spec.rb +24 -13
- data/spec/model/record_spec.rb +381 -218
- data/spec/model/spec_helper.rb +13 -71
- data/spec/model/validations_spec.rb +11 -0
- metadata +117 -73
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
|
|
@@ -281,6 +263,13 @@ describe "DB#create_table" do
|
|
|
281
263
|
@db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects DEFERRABLE INITIALLY DEFERRED)"]
|
|
282
264
|
end
|
|
283
265
|
|
|
266
|
+
specify "should accept collation" do
|
|
267
|
+
@db.create_table(:cats) do
|
|
268
|
+
varchar :name, :collate => :utf8_bin
|
|
269
|
+
end
|
|
270
|
+
@db.sqls.should == ["CREATE TABLE cats (name varchar(255) COLLATE utf8_bin)"]
|
|
271
|
+
end
|
|
272
|
+
|
|
284
273
|
specify "should accept inline index definition" do
|
|
285
274
|
@db.create_table(:cats) do
|
|
286
275
|
integer :id, :index => true
|
|
@@ -361,7 +350,6 @@ describe "DB#create_table" do
|
|
|
361
350
|
@db.meta_def(:execute_ddl){|*a| raise Sequel::DatabaseError if /blah/.match(a.first); super(*a)}
|
|
362
351
|
lambda{@db.create_table(:cats){Integer :id; index :blah; index :id}}.should raise_error(Sequel::DatabaseError)
|
|
363
352
|
@db.sqls.should == ['CREATE TABLE cats (id integer)']
|
|
364
|
-
@db.sqls.clear
|
|
365
353
|
lambda{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}.should_not raise_error(Sequel::DatabaseError)
|
|
366
354
|
@db.sqls.should == ['CREATE TABLE cats (id integer)', 'CREATE INDEX cats_id_index ON cats (id)']
|
|
367
355
|
end
|
|
@@ -499,7 +487,6 @@ describe "DB#create_table" do
|
|
|
499
487
|
foreign_key [:a, :b], :abc, :key => [:real_a, :real_b]
|
|
500
488
|
end
|
|
501
489
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc(real_a, real_b))"]
|
|
502
|
-
@db.sqls.clear
|
|
503
490
|
|
|
504
491
|
@db.create_table(:cats) do
|
|
505
492
|
integer :a
|
|
@@ -517,7 +504,6 @@ describe "DB#create_table" do
|
|
|
517
504
|
end
|
|
518
505
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc ON DELETE CASCADE)"]
|
|
519
506
|
|
|
520
|
-
@db.sqls.clear
|
|
521
507
|
@db.create_table(:cats) do
|
|
522
508
|
integer :a
|
|
523
509
|
integer :b
|
|
@@ -525,7 +511,6 @@ describe "DB#create_table" do
|
|
|
525
511
|
end
|
|
526
512
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc ON UPDATE NO ACTION)"]
|
|
527
513
|
|
|
528
|
-
@db.sqls.clear
|
|
529
514
|
@db.create_table(:cats) do
|
|
530
515
|
integer :a
|
|
531
516
|
integer :b
|
|
@@ -533,7 +518,6 @@ describe "DB#create_table" do
|
|
|
533
518
|
end
|
|
534
519
|
@db.sqls.should == ["CREATE TABLE cats (a integer, b integer, FOREIGN KEY (a, b) REFERENCES abc ON DELETE RESTRICT ON UPDATE SET DEFAULT)"]
|
|
535
520
|
|
|
536
|
-
@db.sqls.clear
|
|
537
521
|
@db.create_table(:cats) do
|
|
538
522
|
integer :a
|
|
539
523
|
integer :b
|
|
@@ -545,24 +529,31 @@ end
|
|
|
545
529
|
|
|
546
530
|
describe "DB#create_table!" do
|
|
547
531
|
before do
|
|
548
|
-
@db =
|
|
532
|
+
@db = Sequel.mock
|
|
549
533
|
end
|
|
550
534
|
|
|
551
|
-
specify "should
|
|
552
|
-
@db.
|
|
535
|
+
specify "should create the table if it does not exist" do
|
|
536
|
+
@db.meta_def(:table_exists?){|a| false}
|
|
537
|
+
@db.create_table!(:cats){|*a|}
|
|
538
|
+
@db.sqls.should == ['CREATE TABLE cats ()']
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
specify "should drop the table before creating it if it already exists" do
|
|
542
|
+
@db.meta_def(:table_exists?){|a| true}
|
|
543
|
+
@db.create_table!(:cats){|*a|}
|
|
553
544
|
@db.sqls.should == ['DROP TABLE cats', 'CREATE TABLE cats ()']
|
|
554
545
|
end
|
|
555
546
|
end
|
|
556
547
|
|
|
557
548
|
describe "DB#create_table?" do
|
|
558
549
|
before do
|
|
559
|
-
@db =
|
|
550
|
+
@db = Sequel.mock
|
|
560
551
|
end
|
|
561
552
|
|
|
562
553
|
specify "should not create the table if the table already exists" do
|
|
563
554
|
@db.meta_def(:table_exists?){|a| true}
|
|
564
555
|
@db.create_table?(:cats){|*a|}
|
|
565
|
-
@db.sqls.should ==
|
|
556
|
+
@db.sqls.should == []
|
|
566
557
|
end
|
|
567
558
|
|
|
568
559
|
specify "should create the table if the table doesn't already exist" do
|
|
@@ -570,22 +561,38 @@ describe "DB#create_table?" do
|
|
|
570
561
|
@db.create_table?(:cats){|*a|}
|
|
571
562
|
@db.sqls.should == ['CREATE TABLE cats ()']
|
|
572
563
|
end
|
|
564
|
+
|
|
565
|
+
specify "should use IF NOT EXISTS if the database supports that" do
|
|
566
|
+
@db.meta_def(:supports_create_table_if_not_exists?){true}
|
|
567
|
+
@db.create_table?(:cats){|*a|}
|
|
568
|
+
@db.sqls.should == ['CREATE TABLE IF NOT EXISTS cats ()']
|
|
569
|
+
end
|
|
573
570
|
end
|
|
574
571
|
|
|
575
572
|
describe "DB#drop_table" do
|
|
576
573
|
before do
|
|
577
|
-
@db =
|
|
574
|
+
@db = Sequel.mock
|
|
578
575
|
end
|
|
579
576
|
|
|
580
577
|
specify "should generate a DROP TABLE statement" do
|
|
581
578
|
@db.drop_table :cats
|
|
582
579
|
@db.sqls.should == ['DROP TABLE cats']
|
|
583
580
|
end
|
|
581
|
+
|
|
582
|
+
specify "should drop multiple tables at once" do
|
|
583
|
+
@db.drop_table :cats, :dogs
|
|
584
|
+
@db.sqls.should == ['DROP TABLE cats', 'DROP TABLE dogs']
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
specify "should take an options hash and support the :cascade option" do
|
|
588
|
+
@db.drop_table :cats, :dogs, :cascade=>true
|
|
589
|
+
@db.sqls.should == ['DROP TABLE cats CASCADE', 'DROP TABLE dogs CASCADE']
|
|
590
|
+
end
|
|
584
591
|
end
|
|
585
592
|
|
|
586
593
|
describe "DB#alter_table" do
|
|
587
594
|
before do
|
|
588
|
-
@db =
|
|
595
|
+
@db = Sequel.mock
|
|
589
596
|
end
|
|
590
597
|
|
|
591
598
|
specify "should allow adding not null constraint" do
|
|
@@ -629,7 +636,6 @@ describe "DB#alter_table" do
|
|
|
629
636
|
end
|
|
630
637
|
@db.sqls.should == ["ALTER TABLE cats ADD UNIQUE (a, b)"]
|
|
631
638
|
|
|
632
|
-
@db.sqls.clear
|
|
633
639
|
@db.alter_table(:cats) do
|
|
634
640
|
add_unique_constraint [:a, :b], :name => :ab_uniq
|
|
635
641
|
end
|
|
@@ -649,19 +655,16 @@ describe "DB#alter_table" do
|
|
|
649
655
|
end
|
|
650
656
|
@db.sqls.should == ["ALTER TABLE cats ADD FOREIGN KEY (node_id, prop_id) REFERENCES nodes_props"]
|
|
651
657
|
|
|
652
|
-
@db.sqls.clear
|
|
653
658
|
@db.alter_table(:cats) do
|
|
654
659
|
add_foreign_key [:node_id, :prop_id], :nodes_props, :name => :cfk
|
|
655
660
|
end
|
|
656
661
|
@db.sqls.should == ["ALTER TABLE cats ADD CONSTRAINT cfk FOREIGN KEY (node_id, prop_id) REFERENCES nodes_props"]
|
|
657
662
|
|
|
658
|
-
@db.sqls.clear
|
|
659
663
|
@db.alter_table(:cats) do
|
|
660
664
|
add_foreign_key [:node_id, :prop_id], :nodes_props, :key => [:nid, :pid]
|
|
661
665
|
end
|
|
662
666
|
@db.sqls.should == ["ALTER TABLE cats ADD FOREIGN KEY (node_id, prop_id) REFERENCES nodes_props(nid, pid)"]
|
|
663
667
|
|
|
664
|
-
@db.sqls.clear
|
|
665
668
|
@db.alter_table(:cats) do
|
|
666
669
|
add_foreign_key [:node_id, :prop_id], :nodes_props, :on_delete => :restrict, :on_update => :cascade
|
|
667
670
|
end
|
|
@@ -679,7 +682,7 @@ describe "DB#alter_table" do
|
|
|
679
682
|
@db.meta_def(:execute_ddl){|*a| raise Sequel::DatabaseError}
|
|
680
683
|
lambda{@db.add_index(:cats, :id)}.should raise_error(Sequel::DatabaseError)
|
|
681
684
|
lambda{@db.add_index(:cats, :id, :ignore_errors=>true)}.should_not raise_error(Sequel::DatabaseError)
|
|
682
|
-
@db.sqls.should ==
|
|
685
|
+
@db.sqls.should == []
|
|
683
686
|
end
|
|
684
687
|
|
|
685
688
|
specify "should support add_primary_key" do
|
|
@@ -695,7 +698,6 @@ describe "DB#alter_table" do
|
|
|
695
698
|
end
|
|
696
699
|
@db.sqls.should == ["ALTER TABLE cats ADD PRIMARY KEY (id, type)"]
|
|
697
700
|
|
|
698
|
-
@db.sqls.clear
|
|
699
701
|
@db.alter_table(:cats) do
|
|
700
702
|
add_primary_key [:id, :type], :name => :cpk
|
|
701
703
|
end
|
|
@@ -709,6 +711,13 @@ describe "DB#alter_table" do
|
|
|
709
711
|
@db.sqls.should == ["ALTER TABLE cats DROP COLUMN score"]
|
|
710
712
|
end
|
|
711
713
|
|
|
714
|
+
specify "should support drop_column with :cascade=>true option" do
|
|
715
|
+
@db.alter_table(:cats) do
|
|
716
|
+
drop_column :score, :cascade=>true
|
|
717
|
+
end
|
|
718
|
+
@db.sqls.should == ["ALTER TABLE cats DROP COLUMN score CASCADE"]
|
|
719
|
+
end
|
|
720
|
+
|
|
712
721
|
specify "should support drop_constraint" do
|
|
713
722
|
@db.alter_table(:cats) do
|
|
714
723
|
drop_constraint :valid_score
|
|
@@ -716,6 +725,13 @@ describe "DB#alter_table" do
|
|
|
716
725
|
@db.sqls.should == ["ALTER TABLE cats DROP CONSTRAINT valid_score"]
|
|
717
726
|
end
|
|
718
727
|
|
|
728
|
+
specify "should support drop_constraint with :cascade=>true option" do
|
|
729
|
+
@db.alter_table(:cats) do
|
|
730
|
+
drop_constraint :valid_score, :cascade=>true
|
|
731
|
+
end
|
|
732
|
+
@db.sqls.should == ["ALTER TABLE cats DROP CONSTRAINT valid_score CASCADE"]
|
|
733
|
+
end
|
|
734
|
+
|
|
719
735
|
specify "should support drop_index" do
|
|
720
736
|
@db.alter_table(:cats) do
|
|
721
737
|
drop_index :name
|
|
@@ -763,6 +779,236 @@ describe "DB#alter_table" do
|
|
|
763
779
|
end
|
|
764
780
|
end
|
|
765
781
|
|
|
782
|
+
describe "Database#create_table" do
|
|
783
|
+
before do
|
|
784
|
+
@db = Sequel.mock
|
|
785
|
+
end
|
|
786
|
+
|
|
787
|
+
specify "should construct proper SQL" do
|
|
788
|
+
@db.create_table :test do
|
|
789
|
+
primary_key :id, :integer, :null => false
|
|
790
|
+
column :name, :text
|
|
791
|
+
index :name, :unique => true
|
|
792
|
+
end
|
|
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)']
|
|
795
|
+
end
|
|
796
|
+
|
|
797
|
+
specify "should create a temporary table" do
|
|
798
|
+
@db.create_table :test_tmp, :temp => true do
|
|
799
|
+
primary_key :id, :integer, :null => false
|
|
800
|
+
column :name, :text
|
|
801
|
+
index :name, :unique => true
|
|
802
|
+
end
|
|
803
|
+
|
|
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)']
|
|
806
|
+
end
|
|
807
|
+
|
|
808
|
+
specify "should not use default schema when creating a temporary table" do
|
|
809
|
+
@db.default_schema = :foo
|
|
810
|
+
@db.create_table :test_tmp, :temp => true do
|
|
811
|
+
column :name, :text
|
|
812
|
+
end
|
|
813
|
+
@db.sqls.should == ['CREATE TEMPORARY TABLE test_tmp (name text)']
|
|
814
|
+
end
|
|
815
|
+
end
|
|
816
|
+
|
|
817
|
+
describe "Database#alter_table" do
|
|
818
|
+
before do
|
|
819
|
+
@db = Sequel.mock
|
|
820
|
+
end
|
|
821
|
+
|
|
822
|
+
specify "should construct proper SQL" do
|
|
823
|
+
@db.alter_table :xyz do
|
|
824
|
+
add_column :aaa, :text, :null => false, :unique => true
|
|
825
|
+
drop_column :bbb
|
|
826
|
+
rename_column :ccc, :ddd
|
|
827
|
+
set_column_type :eee, :integer
|
|
828
|
+
set_column_default :hhh, 'abcd'
|
|
829
|
+
add_index :fff, :unique => true
|
|
830
|
+
drop_index :ggg
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
@db.sqls.should == ['ALTER TABLE xyz ADD COLUMN aaa text NOT NULL UNIQUE',
|
|
834
|
+
'ALTER TABLE xyz DROP COLUMN bbb',
|
|
835
|
+
'ALTER TABLE xyz RENAME COLUMN ccc TO ddd',
|
|
836
|
+
'ALTER TABLE xyz ALTER COLUMN eee TYPE integer',
|
|
837
|
+
"ALTER TABLE xyz ALTER COLUMN hhh SET DEFAULT 'abcd'",
|
|
838
|
+
'CREATE UNIQUE INDEX xyz_fff_index ON xyz (fff)',
|
|
839
|
+
'DROP INDEX xyz_ggg_index']
|
|
840
|
+
end
|
|
841
|
+
end
|
|
842
|
+
|
|
843
|
+
describe "Database#add_column" do
|
|
844
|
+
specify "should construct proper SQL" do
|
|
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']
|
|
848
|
+
end
|
|
849
|
+
end
|
|
850
|
+
|
|
851
|
+
describe "Database#drop_column" do
|
|
852
|
+
before do
|
|
853
|
+
@db = Sequel.mock
|
|
854
|
+
end
|
|
855
|
+
|
|
856
|
+
specify "should construct proper SQL" do
|
|
857
|
+
@db.drop_column :test, :name
|
|
858
|
+
@db.sqls.should == ['ALTER TABLE test DROP COLUMN name']
|
|
859
|
+
end
|
|
860
|
+
|
|
861
|
+
specify "should use CASCADE for :cascade=>true option" do
|
|
862
|
+
@db.drop_column :test, :name, :cascade=>true
|
|
863
|
+
@db.sqls.should == ['ALTER TABLE test DROP COLUMN name CASCADE']
|
|
864
|
+
end
|
|
865
|
+
end
|
|
866
|
+
|
|
867
|
+
describe "Database#rename_column" do
|
|
868
|
+
before do
|
|
869
|
+
@db = Sequel.mock
|
|
870
|
+
end
|
|
871
|
+
|
|
872
|
+
specify "should construct proper SQL" do
|
|
873
|
+
@db.rename_column :test, :abc, :def
|
|
874
|
+
@db.sqls.should == ['ALTER TABLE test RENAME COLUMN abc TO def']
|
|
875
|
+
end
|
|
876
|
+
end
|
|
877
|
+
|
|
878
|
+
describe "Database#set_column_type" do
|
|
879
|
+
before do
|
|
880
|
+
@db = Sequel.mock
|
|
881
|
+
end
|
|
882
|
+
|
|
883
|
+
specify "should construct proper SQL" do
|
|
884
|
+
@db.set_column_type :test, :name, :integer
|
|
885
|
+
@db.sqls.should == ['ALTER TABLE test ALTER COLUMN name TYPE integer']
|
|
886
|
+
end
|
|
887
|
+
end
|
|
888
|
+
|
|
889
|
+
describe "Database#set_column_default" do
|
|
890
|
+
before do
|
|
891
|
+
@db = Sequel.mock
|
|
892
|
+
end
|
|
893
|
+
|
|
894
|
+
specify "should construct proper SQL" do
|
|
895
|
+
@db.set_column_default :test, :name, 'zyx'
|
|
896
|
+
@db.sqls.should == ["ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"]
|
|
897
|
+
end
|
|
898
|
+
end
|
|
899
|
+
|
|
900
|
+
describe "Database#add_index" do
|
|
901
|
+
before do
|
|
902
|
+
@db = Sequel.mock
|
|
903
|
+
end
|
|
904
|
+
|
|
905
|
+
specify "should construct proper SQL" do
|
|
906
|
+
@db.add_index :test, :name, :unique => true
|
|
907
|
+
@db.sqls.should == ['CREATE UNIQUE INDEX test_name_index ON test (name)']
|
|
908
|
+
end
|
|
909
|
+
|
|
910
|
+
specify "should accept multiple columns" do
|
|
911
|
+
@db.add_index :test, [:one, :two]
|
|
912
|
+
@db.sqls.should == ['CREATE INDEX test_one_two_index ON test (one, two)']
|
|
913
|
+
end
|
|
914
|
+
end
|
|
915
|
+
|
|
916
|
+
describe "Database#drop_index" do
|
|
917
|
+
before do
|
|
918
|
+
@db = Sequel.mock
|
|
919
|
+
end
|
|
920
|
+
|
|
921
|
+
specify "should construct proper SQL" do
|
|
922
|
+
@db.drop_index :test, :name
|
|
923
|
+
@db.sqls.should == ['DROP INDEX test_name_index']
|
|
924
|
+
end
|
|
925
|
+
|
|
926
|
+
end
|
|
927
|
+
|
|
928
|
+
describe "Database#drop_table" do
|
|
929
|
+
before do
|
|
930
|
+
@db = Sequel.mock
|
|
931
|
+
end
|
|
932
|
+
|
|
933
|
+
specify "should construct proper SQL" do
|
|
934
|
+
@db.drop_table :test
|
|
935
|
+
@db.sqls.should == ['DROP TABLE test']
|
|
936
|
+
end
|
|
937
|
+
|
|
938
|
+
specify "should accept multiple table names" do
|
|
939
|
+
@db.drop_table :a, :bb, :ccc
|
|
940
|
+
@db.sqls.should == ['DROP TABLE a', 'DROP TABLE bb', 'DROP TABLE ccc']
|
|
941
|
+
end
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
describe "Database#rename_table" do
|
|
945
|
+
before do
|
|
946
|
+
@db = Sequel.mock
|
|
947
|
+
end
|
|
948
|
+
|
|
949
|
+
specify "should construct proper SQL" do
|
|
950
|
+
@db.rename_table :abc, :xyz
|
|
951
|
+
@db.sqls.should == ['ALTER TABLE abc RENAME TO xyz']
|
|
952
|
+
end
|
|
953
|
+
end
|
|
954
|
+
|
|
955
|
+
describe "Database#create_view" do
|
|
956
|
+
before do
|
|
957
|
+
@db = Sequel.mock
|
|
958
|
+
end
|
|
959
|
+
|
|
960
|
+
specify "should construct proper SQL with raw SQL" do
|
|
961
|
+
@db.create_view :test, "SELECT * FROM xyz"
|
|
962
|
+
@db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
|
|
963
|
+
@db.create_view :test.identifier, "SELECT * FROM xyz"
|
|
964
|
+
@db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
|
|
965
|
+
end
|
|
966
|
+
|
|
967
|
+
specify "should construct proper SQL with dataset" do
|
|
968
|
+
@db.create_view :test, @db[:items].select(:a, :b).order(:c)
|
|
969
|
+
@db.sqls.should == ['CREATE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
|
970
|
+
@db.create_or_replace_view :sch__test, "SELECT * FROM xyz"
|
|
971
|
+
@db.sqls.should == ['CREATE OR REPLACE VIEW sch.test AS SELECT * FROM xyz']
|
|
972
|
+
end
|
|
973
|
+
|
|
974
|
+
specify "should construct proper SQL with dataset" do
|
|
975
|
+
@db.create_or_replace_view :test, @db[:items].select(:a, :b).order(:c)
|
|
976
|
+
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
|
977
|
+
@db.create_or_replace_view :test.identifier, @db[:items].select(:a, :b).order(:c)
|
|
978
|
+
@db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
|
|
979
|
+
end
|
|
980
|
+
end
|
|
981
|
+
|
|
982
|
+
describe "Database#drop_view" do
|
|
983
|
+
before do
|
|
984
|
+
@db = Sequel.mock
|
|
985
|
+
end
|
|
986
|
+
|
|
987
|
+
specify "should construct proper SQL" do
|
|
988
|
+
@db.drop_view :test
|
|
989
|
+
@db.drop_view :test.identifier
|
|
990
|
+
@db.drop_view :sch__test
|
|
991
|
+
@db.drop_view :test.qualify(:sch)
|
|
992
|
+
@db.sqls.should == ['DROP VIEW test', 'DROP VIEW test', 'DROP VIEW sch.test', 'DROP VIEW sch.test']
|
|
993
|
+
end
|
|
994
|
+
|
|
995
|
+
specify "should drop multiple views at once" do
|
|
996
|
+
@db.drop_view :cats, :dogs
|
|
997
|
+
@db.sqls.should == ['DROP VIEW cats', 'DROP VIEW dogs']
|
|
998
|
+
end
|
|
999
|
+
|
|
1000
|
+
specify "should take an options hash and support the :cascade option" do
|
|
1001
|
+
@db.drop_view :cats, :dogs, :cascade=>true
|
|
1002
|
+
@db.sqls.should == ['DROP VIEW cats CASCADE', 'DROP VIEW dogs CASCADE']
|
|
1003
|
+
end
|
|
1004
|
+
end
|
|
1005
|
+
|
|
1006
|
+
describe "Database#alter_table_sql" do
|
|
1007
|
+
specify "should raise error for an invalid op" do
|
|
1008
|
+
proc {Sequel.mock.send(:alter_table_sql, :mau, :op => :blah)}.should raise_error(Sequel::Error)
|
|
1009
|
+
end
|
|
1010
|
+
end
|
|
1011
|
+
|
|
766
1012
|
describe "Schema Parser" do
|
|
767
1013
|
before do
|
|
768
1014
|
@sqls = []
|
|
@@ -776,6 +1022,21 @@ describe "Schema Parser" do
|
|
|
776
1022
|
proc{@db.schema(:x)}.should raise_error(Sequel::Error)
|
|
777
1023
|
end
|
|
778
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
|
+
|
|
779
1040
|
specify "should parse the schema correctly for a single table" do
|
|
780
1041
|
sqls = @sqls
|
|
781
1042
|
proc{@db.schema(:x)}.should raise_error(Sequel::Error)
|
|
@@ -829,7 +1090,6 @@ describe "Schema Parser" do
|
|
|
829
1090
|
@db.schema(:"time with time zone").first.last[:type].should == :time
|
|
830
1091
|
@db.schema(:"time without time zone").first.last[:type].should == :time
|
|
831
1092
|
@db.schema(:boolean).first.last[:type].should == :boolean
|
|
832
|
-
@db.schema(:bit).first.last[:type].should == :boolean
|
|
833
1093
|
@db.schema(:real).first.last[:type].should == :float
|
|
834
1094
|
@db.schema(:float).first.last[:type].should == :float
|
|
835
1095
|
@db.schema(:double).first.last[:type].should == :float
|
data/spec/core/spec_helper.rb
CHANGED
|
@@ -5,53 +5,11 @@ unless Object.const_defined?('Sequel')
|
|
|
5
5
|
require 'sequel/core'
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def update(*args)
|
|
14
|
-
@db.execute update_sql(*args)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def fetch_rows(sql)
|
|
18
|
-
@db.execute(sql)
|
|
19
|
-
yield({:id => 1, :x => 1})
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def quoted_identifier(c)
|
|
23
|
-
"\"#{c}\""
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
class MockDatabase < Sequel::Database
|
|
28
|
-
set_adapter_scheme :mock
|
|
29
|
-
@@quote_identifiers = false
|
|
30
|
-
self.identifier_input_method = nil
|
|
31
|
-
self.identifier_output_method = nil
|
|
32
|
-
attr_reader :sqls
|
|
33
|
-
|
|
34
|
-
def execute(sql, opts={})
|
|
35
|
-
@sqls ||= []
|
|
36
|
-
@sqls << sql
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def reset
|
|
40
|
-
@sqls = []
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def transaction(opts={}); yield; end
|
|
44
|
-
|
|
45
|
-
def dataset; MockDataset.new(self); end
|
|
8
|
+
if ENV['SEQUEL_COLUMNS_INTROSPECTION']
|
|
9
|
+
Sequel.extension :columns_introspection
|
|
10
|
+
Sequel::Dataset.introspect_all_columns
|
|
46
11
|
end
|
|
47
12
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
self.identifier_output_method = nil
|
|
52
|
-
|
|
53
|
-
def execute(sql, opts={})
|
|
54
|
-
@sqls ||= []
|
|
55
|
-
@sqls << sql
|
|
56
|
-
end
|
|
57
|
-
end
|
|
13
|
+
Sequel.quote_identifiers = false
|
|
14
|
+
Sequel.identifier_input_method = nil
|
|
15
|
+
Sequel.identifier_output_method = nil
|
|
@@ -24,6 +24,11 @@ describe "ActiveModel plugin" do
|
|
|
24
24
|
columns :id, :id2
|
|
25
25
|
def delete; end
|
|
26
26
|
end
|
|
27
|
+
module ::Blog
|
|
28
|
+
class Post < Sequel::Model
|
|
29
|
+
plugin :active_model
|
|
30
|
+
end
|
|
31
|
+
end
|
|
27
32
|
@c = AMLintTest
|
|
28
33
|
@c.plugin :active_model
|
|
29
34
|
@m = @model = @c.new
|
|
@@ -33,6 +38,7 @@ describe "ActiveModel plugin" do
|
|
|
33
38
|
def teardown
|
|
34
39
|
super
|
|
35
40
|
Object.send(:remove_const, :AMLintTest)
|
|
41
|
+
Object.send(:remove_const, :Blog)
|
|
36
42
|
end
|
|
37
43
|
include ActiveModel::Lint::Tests
|
|
38
44
|
|
|
@@ -80,6 +86,13 @@ describe "ActiveModel plugin" do
|
|
|
80
86
|
assert_equal false, @m.persisted?
|
|
81
87
|
assert_equal false, @o.persisted?
|
|
82
88
|
end
|
|
89
|
+
|
|
90
|
+
# Should return self, not a proxy object
|
|
91
|
+
def test__to_partial_path
|
|
92
|
+
assert_equal 'am_lint_tests/am_lint_test', @m.to_partial_path
|
|
93
|
+
assert_equal 'blog/posts/post', Blog::Post.new.to_partial_path
|
|
94
|
+
end
|
|
95
|
+
|
|
83
96
|
end
|
|
84
97
|
if defined?(MiniTest::Unit)
|
|
85
98
|
tc.instance_methods.map{|x| x.to_s}.reject{|n| n !~ /\Atest_/}.each do |m|
|