sequel 4.46.0 → 4.49.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.
- checksums.yaml +4 -4
- data/CHANGELOG +210 -0
- data/Rakefile +1 -1
- data/doc/advanced_associations.rdoc +1 -1
- data/doc/opening_databases.rdoc +3 -2
- data/doc/release_notes/4.47.0.txt +56 -0
- data/doc/release_notes/4.48.0.txt +293 -0
- data/doc/release_notes/4.49.0.txt +222 -0
- data/lib/sequel/adapters/ado/access.rb +2 -1
- data/lib/sequel/adapters/do/postgres.rb +5 -2
- data/lib/sequel/adapters/ibmdb.rb +30 -8
- data/lib/sequel/adapters/jdbc/as400.rb +1 -1
- data/lib/sequel/adapters/jdbc/db2.rb +12 -3
- data/lib/sequel/adapters/jdbc/derby.rb +4 -5
- data/lib/sequel/adapters/jdbc/h2.rb +10 -1
- data/lib/sequel/adapters/jdbc/oracle.rb +16 -2
- data/lib/sequel/adapters/jdbc/postgresql.rb +46 -20
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +9 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +20 -6
- data/lib/sequel/adapters/jdbc.rb +39 -23
- data/lib/sequel/adapters/mock.rb +27 -19
- data/lib/sequel/adapters/mysql.rb +17 -16
- data/lib/sequel/adapters/mysql2.rb +5 -6
- data/lib/sequel/adapters/oracle.rb +5 -9
- data/lib/sequel/adapters/postgres.rb +91 -103
- data/lib/sequel/adapters/shared/db2.rb +22 -6
- data/lib/sequel/adapters/shared/mssql.rb +5 -4
- data/lib/sequel/adapters/shared/mysql.rb +79 -25
- data/lib/sequel/adapters/shared/oracle.rb +26 -3
- data/lib/sequel/adapters/shared/postgres.rb +199 -95
- data/lib/sequel/adapters/shared/sqlanywhere.rb +23 -10
- data/lib/sequel/adapters/shared/sqlite.rb +72 -82
- data/lib/sequel/adapters/sqlanywhere.rb +4 -1
- data/lib/sequel/adapters/sqlite.rb +5 -3
- data/lib/sequel/adapters/swift/postgres.rb +5 -2
- data/lib/sequel/adapters/tinytds.rb +0 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -1
- data/lib/sequel/adapters/utils/pg_types.rb +2 -76
- data/lib/sequel/ast_transformer.rb +1 -1
- data/lib/sequel/connection_pool/sharded_single.rb +1 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +1 -1
- data/lib/sequel/connection_pool/single.rb +2 -2
- data/lib/sequel/connection_pool/threaded.rb +2 -2
- data/lib/sequel/connection_pool.rb +9 -2
- data/lib/sequel/core.rb +2 -2
- data/lib/sequel/database/connecting.rb +8 -8
- data/lib/sequel/database/dataset.rb +6 -3
- data/lib/sequel/database/dataset_defaults.rb +14 -1
- data/lib/sequel/database/misc.rb +1 -1
- data/lib/sequel/database/query.rb +3 -0
- data/lib/sequel/database/schema_methods.rb +1 -1
- data/lib/sequel/dataset/actions.rb +72 -10
- data/lib/sequel/dataset/dataset_module.rb +58 -0
- data/lib/sequel/dataset/graph.rb +1 -1
- data/lib/sequel/dataset/misc.rb +1 -0
- data/lib/sequel/dataset/prepared_statements.rb +3 -3
- data/lib/sequel/dataset/query.rb +22 -11
- data/lib/sequel/dataset.rb +1 -1
- data/lib/sequel/exceptions.rb +8 -0
- data/lib/sequel/extensions/_model_pg_row.rb +5 -2
- data/lib/sequel/extensions/core_extensions.rb +4 -1
- data/lib/sequel/extensions/current_datetime_timestamp.rb +2 -1
- data/lib/sequel/extensions/date_arithmetic.rb +1 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -3
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +3 -0
- data/lib/sequel/extensions/filter_having.rb +2 -0
- data/lib/sequel/extensions/freeze_datasets.rb +2 -0
- data/lib/sequel/extensions/from_block.rb +1 -1
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/hash_aliases.rb +2 -0
- data/lib/sequel/extensions/identifier_mangling.rb +0 -7
- data/lib/sequel/extensions/meta_def.rb +2 -0
- data/lib/sequel/extensions/migration.rb +11 -8
- data/lib/sequel/extensions/no_auto_literal_strings.rb +1 -1
- data/lib/sequel/extensions/null_dataset.rb +1 -0
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/extensions/pg_array.rb +207 -130
- data/lib/sequel/extensions/pg_hstore.rb +38 -20
- data/lib/sequel/extensions/pg_inet.rb +18 -6
- data/lib/sequel/extensions/pg_interval.rb +19 -12
- data/lib/sequel/extensions/pg_json.rb +25 -14
- data/lib/sequel/extensions/pg_json_ops.rb +2 -2
- data/lib/sequel/extensions/pg_range.rb +133 -100
- data/lib/sequel/extensions/pg_range_ops.rb +4 -3
- data/lib/sequel/extensions/pg_row.rb +68 -39
- data/lib/sequel/extensions/pg_row_ops.rb +11 -5
- data/lib/sequel/extensions/query_literals.rb +2 -0
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +2 -0
- data/lib/sequel/extensions/s.rb +1 -1
- data/lib/sequel/extensions/schema_dumper.rb +29 -25
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +3 -1
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +83 -0
- data/lib/sequel/extensions/server_block.rb +32 -15
- data/lib/sequel/extensions/set_overrides.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +0 -1
- data/lib/sequel/extensions/symbol_aref.rb +0 -4
- data/lib/sequel/model/associations.rb +35 -7
- data/lib/sequel/model/base.rb +113 -87
- data/lib/sequel/model/dataset_module.rb +5 -43
- data/lib/sequel/model/errors.rb +2 -1
- data/lib/sequel/model/inflections.rb +17 -5
- data/lib/sequel/model.rb +26 -58
- data/lib/sequel/plugins/active_model.rb +2 -2
- data/lib/sequel/plugins/association_autoreloading.rb +2 -0
- data/lib/sequel/plugins/association_dependencies.rb +3 -3
- data/lib/sequel/plugins/association_pks.rb +73 -46
- data/lib/sequel/plugins/association_proxies.rb +1 -1
- data/lib/sequel/plugins/auto_validations.rb +6 -2
- data/lib/sequel/plugins/boolean_readers.rb +2 -2
- data/lib/sequel/plugins/boolean_subsets.rb +1 -1
- data/lib/sequel/plugins/caching.rb +19 -13
- data/lib/sequel/plugins/class_table_inheritance.rb +24 -13
- data/lib/sequel/plugins/column_conflicts.rb +7 -2
- data/lib/sequel/plugins/column_select.rb +3 -3
- data/lib/sequel/plugins/composition.rb +2 -2
- data/lib/sequel/plugins/csv_serializer.rb +8 -8
- data/lib/sequel/plugins/dataset_associations.rb +25 -13
- data/lib/sequel/plugins/defaults_setter.rb +13 -1
- data/lib/sequel/plugins/eager_each.rb +1 -1
- data/lib/sequel/plugins/force_encoding.rb +2 -2
- data/lib/sequel/plugins/hook_class_methods.rb +9 -12
- data/lib/sequel/plugins/identifier_columns.rb +2 -0
- data/lib/sequel/plugins/instance_filters.rb +3 -1
- data/lib/sequel/plugins/instance_hooks.rb +17 -9
- data/lib/sequel/plugins/json_serializer.rb +19 -12
- data/lib/sequel/plugins/lazy_attributes.rb +8 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +2 -0
- data/lib/sequel/plugins/modification_detection.rb +3 -0
- data/lib/sequel/plugins/nested_attributes.rb +6 -2
- data/lib/sequel/plugins/pg_array_associations.rb +5 -0
- data/lib/sequel/plugins/pg_row.rb +4 -2
- data/lib/sequel/plugins/pg_typecast_on_load.rb +2 -0
- data/lib/sequel/plugins/prepared_statements.rb +1 -0
- data/lib/sequel/plugins/rcte_tree.rb +4 -24
- data/lib/sequel/plugins/serialization.rb +9 -15
- data/lib/sequel/plugins/single_table_inheritance.rb +8 -3
- data/lib/sequel/plugins/split_values.rb +6 -5
- data/lib/sequel/plugins/static_cache.rb +31 -25
- data/lib/sequel/plugins/subset_conditions.rb +3 -1
- data/lib/sequel/plugins/table_select.rb +1 -1
- data/lib/sequel/plugins/touch.rb +4 -2
- data/lib/sequel/plugins/validation_class_methods.rb +5 -6
- data/lib/sequel/plugins/validation_helpers.rb +14 -8
- data/lib/sequel/plugins/xml_serializer.rb +4 -4
- data/lib/sequel/sql.rb +18 -9
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +115 -14
- data/spec/adapters/mssql_spec.rb +4 -4
- data/spec/adapters/mysql_spec.rb +83 -29
- data/spec/adapters/oracle_spec.rb +28 -24
- data/spec/adapters/postgres_spec.rb +40 -24
- data/spec/adapters/sqlanywhere_spec.rb +88 -86
- data/spec/adapters/sqlite_spec.rb +29 -24
- data/spec/bin_spec.rb +7 -1
- data/spec/core/connection_pool_spec.rb +45 -14
- data/spec/core/database_spec.rb +155 -0
- data/spec/core/dataset_spec.rb +219 -36
- data/spec/core/schema_spec.rb +16 -0
- data/spec/core/spec_helper.rb +1 -0
- data/spec/core_extensions_spec.rb +6 -2
- data/spec/extensions/active_model_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +34 -2
- data/spec/extensions/auto_literal_strings_spec.rb +5 -1
- data/spec/extensions/auto_validations_spec.rb +2 -0
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +106 -19
- data/spec/extensions/column_conflicts_spec.rb +11 -0
- data/spec/extensions/column_select_spec.rb +1 -0
- data/spec/extensions/composition_spec.rb +13 -0
- data/spec/extensions/connection_validator_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +20 -8
- data/spec/extensions/defaults_setter_spec.rb +15 -1
- data/spec/extensions/filter_having_spec.rb +5 -3
- data/spec/extensions/hash_aliases_spec.rb +3 -1
- data/spec/extensions/identifier_columns_spec.rb +3 -1
- data/spec/extensions/implicit_subquery_spec.rb +4 -2
- data/spec/extensions/json_serializer_spec.rb +18 -0
- data/spec/extensions/lazy_attributes_spec.rb +3 -3
- data/spec/extensions/many_through_many_spec.rb +4 -4
- data/spec/extensions/meta_def_spec.rb +9 -0
- data/spec/extensions/migration_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +14 -3
- data/spec/extensions/no_auto_literal_strings_spec.rb +8 -4
- data/spec/extensions/null_dataset_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +29 -18
- data/spec/extensions/pg_array_spec.rb +44 -25
- data/spec/extensions/pg_hstore_spec.rb +10 -0
- data/spec/extensions/pg_inet_spec.rb +26 -0
- data/spec/extensions/pg_interval_spec.rb +20 -0
- data/spec/extensions/pg_json_spec.rb +24 -0
- data/spec/extensions/pg_range_spec.rb +98 -14
- data/spec/extensions/pg_row_spec.rb +14 -4
- data/spec/extensions/pg_typecast_on_load_spec.rb +11 -9
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/query_literals_spec.rb +3 -1
- data/spec/extensions/schema_dumper_spec.rb +108 -94
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +10 -6
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +121 -0
- data/spec/extensions/serialization_spec.rb +1 -1
- data/spec/extensions/server_block_spec.rb +7 -0
- data/spec/extensions/single_table_inheritance_spec.rb +17 -1
- data/spec/extensions/spec_helper.rb +7 -1
- data/spec/extensions/static_cache_spec.rb +75 -24
- data/spec/extensions/string_agg_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +9 -0
- data/spec/extensions/validation_helpers_spec.rb +10 -5
- data/spec/extensions/whitelist_security_spec.rb +26 -0
- data/spec/integration/associations_test.rb +8 -0
- data/spec/integration/dataset_test.rb +45 -44
- data/spec/integration/model_test.rb +53 -4
- data/spec/integration/plugin_test.rb +28 -4
- data/spec/integration/prepared_statement_test.rb +3 -0
- data/spec/integration/schema_test.rb +21 -1
- data/spec/integration/transaction_test.rb +40 -40
- data/spec/model/association_reflection_spec.rb +43 -1
- data/spec/model/associations_spec.rb +29 -9
- data/spec/model/class_dataset_methods_spec.rb +20 -4
- data/spec/model/dataset_methods_spec.rb +12 -3
- data/spec/model/eager_loading_spec.rb +8 -8
- data/spec/model/model_spec.rb +45 -1
- data/spec/model/plugins_spec.rb +34 -0
- data/spec/model/record_spec.rb +1 -1
- data/spec/spec_config.rb +2 -0
- metadata +11 -4
- data/spec/adapters/firebird_spec.rb +0 -405
- data/spec/adapters/informix_spec.rb +0 -100
|
@@ -9,7 +9,9 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it "should call the dataset method of the same name with the same args" do
|
|
12
|
-
|
|
12
|
+
deprecated do
|
|
13
|
+
@c.<<({}).must_equal @d
|
|
14
|
+
end
|
|
13
15
|
@db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
|
|
14
16
|
@c.all.must_equal [@c.load(:id=>1)]
|
|
15
17
|
@db.sqls.must_equal ["SELECT * FROM items"]
|
|
@@ -27,7 +29,9 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
27
29
|
@c.except(@d, :from_self=>false).sql.must_equal "SELECT * FROM items EXCEPT SELECT * FROM items"
|
|
28
30
|
@c.exclude(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
|
|
29
31
|
@c.exclude_having(:a).sql.must_equal "SELECT * FROM items HAVING NOT a"
|
|
30
|
-
|
|
32
|
+
deprecated do
|
|
33
|
+
@c.exclude_where(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
|
|
34
|
+
end
|
|
31
35
|
@c.fetch_rows("S"){|r| r.must_equal(:id=>1)}
|
|
32
36
|
@db.sqls.must_equal ["S"]
|
|
33
37
|
@c.filter(:a).sql.must_equal "SELECT * FROM items WHERE a"
|
|
@@ -56,7 +60,9 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
56
60
|
@c.insert.must_equal 2
|
|
57
61
|
@db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
|
|
58
62
|
@c.intersect(@d, :from_self=>false).sql.must_equal "SELECT * FROM items INTERSECT SELECT * FROM items"
|
|
59
|
-
|
|
63
|
+
deprecated do
|
|
64
|
+
@c.interval(:id).must_equal 1
|
|
65
|
+
end
|
|
60
66
|
@db.sqls.must_equal ["SELECT (max(id) - min(id)) AS interval FROM items LIMIT 1"]
|
|
61
67
|
@c.join(@c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
|
62
68
|
@c.join_table(:inner, @c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
|
|
@@ -116,6 +122,8 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
116
122
|
@db.sqls.must_equal ["SELECT * FROM items"]
|
|
117
123
|
@c.sum(:id).must_equal 1
|
|
118
124
|
@db.sqls.must_equal ["SELECT sum(id) AS sum FROM items LIMIT 1"]
|
|
125
|
+
@c.as_hash(:id, :id).must_equal(1=>1)
|
|
126
|
+
@db.sqls.must_equal ["SELECT * FROM items"]
|
|
119
127
|
@c.to_hash(:id, :id).must_equal(1=>1)
|
|
120
128
|
@db.sqls.must_equal ["SELECT * FROM items"]
|
|
121
129
|
@c.to_hash_groups(:id, :id).must_equal(1=>[1])
|
|
@@ -127,6 +135,12 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
127
135
|
@c.with(:a, @d).sql.must_equal "WITH a AS (SELECT * FROM items) SELECT * FROM items"
|
|
128
136
|
@c.with_recursive(:a, @d, @d).sql.must_equal "WITH a AS (SELECT * FROM items UNION ALL SELECT * FROM items) SELECT * FROM items"
|
|
129
137
|
@c.with_sql('S').sql.must_equal "S"
|
|
138
|
+
@c.where_all(:id=>1){|r|}.must_equal [@c.load(:id=>1)]
|
|
139
|
+
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1)"]
|
|
140
|
+
@c.where_each(:id=>1){|r|}
|
|
141
|
+
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1)"]
|
|
142
|
+
@c.where_single_value(:id=>1).must_equal 1
|
|
143
|
+
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1) LIMIT 1"]
|
|
130
144
|
|
|
131
145
|
sc = Class.new(@c)
|
|
132
146
|
sc.set_dataset(@d.where(:a).order(:a).select(:a).group(:a).limit(2))
|
|
@@ -134,7 +148,9 @@ describe Sequel::Model, "class dataset methods" do
|
|
|
134
148
|
sc.invert.sql.must_equal 'SELECT a FROM items WHERE NOT a GROUP BY a ORDER BY a LIMIT 2'
|
|
135
149
|
sc.dataset = sc.dataset.with_fetch(:v1=>1, :v2=>2)
|
|
136
150
|
@db.sqls
|
|
137
|
-
|
|
151
|
+
deprecated do
|
|
152
|
+
sc.range(:a).must_equal(1..2)
|
|
153
|
+
end
|
|
138
154
|
@db.sqls.must_equal ["SELECT min(a) AS v1, max(a) AS v2 FROM (SELECT a FROM items WHERE a GROUP BY a ORDER BY a LIMIT 2) AS t1 LIMIT 1"]
|
|
139
155
|
sc.reverse.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
|
|
140
156
|
sc.reverse_order.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
|
|
@@ -38,7 +38,7 @@ describe Sequel::Model::DatasetMethods, "#destroy" do
|
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
describe Sequel::Model::DatasetMethods, "#
|
|
41
|
+
describe Sequel::Model::DatasetMethods, "#as_hash" do
|
|
42
42
|
before do
|
|
43
43
|
@c = Class.new(Sequel::Model(:items)) do
|
|
44
44
|
set_primary_key :name
|
|
@@ -47,6 +47,15 @@ describe Sequel::Model::DatasetMethods, "#to_hash" do
|
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
it "should result in a hash with primary key value keys and model object values" do
|
|
50
|
+
@d = @d.with_fetch([{:name=>1}, {:name=>2}])
|
|
51
|
+
h = @d.as_hash
|
|
52
|
+
h.must_be_kind_of(Hash)
|
|
53
|
+
a = h.to_a
|
|
54
|
+
a.collect{|x| x[1].class}.must_equal [@c, @c]
|
|
55
|
+
a.sort_by{|x| x[0]}.collect{|x| [x[0], x[1].values]}.must_equal [[1, {:name=>1}], [2, {:name=>2}]]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should be aliased as to_hash" do
|
|
50
59
|
@d = @d.with_fetch([{:name=>1}, {:name=>2}])
|
|
51
60
|
h = @d.to_hash
|
|
52
61
|
h.must_be_kind_of(Hash)
|
|
@@ -57,7 +66,7 @@ describe Sequel::Model::DatasetMethods, "#to_hash" do
|
|
|
57
66
|
|
|
58
67
|
it "should result in a hash with given value keys and model object values" do
|
|
59
68
|
@d = @d.with_fetch([{:name=>1, :number=>3}, {:name=>2, :number=>4}])
|
|
60
|
-
h = @d.
|
|
69
|
+
h = @d.as_hash(:number)
|
|
61
70
|
h.must_be_kind_of(Hash)
|
|
62
71
|
a = h.to_a
|
|
63
72
|
a.collect{|x| x[1].class}.must_equal [@c, @c]
|
|
@@ -66,7 +75,7 @@ describe Sequel::Model::DatasetMethods, "#to_hash" do
|
|
|
66
75
|
|
|
67
76
|
it "should raise an error if the class doesn't have a primary key" do
|
|
68
77
|
@c.no_primary_key
|
|
69
|
-
proc{@d.
|
|
78
|
+
proc{@d.as_hash}.must_raise(Sequel::Error)
|
|
70
79
|
end
|
|
71
80
|
end
|
|
72
81
|
|
|
@@ -380,8 +380,8 @@ describe Sequel::Model, "#eager" do
|
|
|
380
380
|
DB.sqls.must_equal []
|
|
381
381
|
end
|
|
382
382
|
|
|
383
|
-
it "should handle a :
|
|
384
|
-
EagerAlbum.many_to_one :sband, :clone=>:band, :
|
|
383
|
+
it "should handle a :predicate_key option to change the SQL used in the lookup, for many_to_one associations" do
|
|
384
|
+
EagerAlbum.many_to_one :sband, :clone=>:band, :predicate_key=>(Sequel[:bands][:id] / 3), :primary_key_method=>:id3
|
|
385
385
|
EagerBand.dataset = EagerBand.dataset.with_fetch(:id=>6)
|
|
386
386
|
a = EagerAlbum.eager(:sband).all
|
|
387
387
|
DB.sqls.must_equal ['SELECT * FROM albums', 'SELECT * FROM bands WHERE ((bands.id / 3) IN (2))']
|
|
@@ -390,8 +390,8 @@ describe Sequel::Model, "#eager" do
|
|
|
390
390
|
DB.sqls.must_equal []
|
|
391
391
|
end
|
|
392
392
|
|
|
393
|
-
it "should handle a :
|
|
394
|
-
EagerBand.one_to_many :salbums, :clone=>:albums, :
|
|
393
|
+
it "should handle a :predicate_key option to change the SQL used in the lookup, for one_to_many associations" do
|
|
394
|
+
EagerBand.one_to_many :salbums, :clone=>:albums, :predicate_key=>(Sequel[:albums][:band_id] * 3), :key_method=>:band_id3, :eager=>nil, :reciprocal=>nil
|
|
395
395
|
EagerBand.dataset = EagerBand.dataset.with_fetch(:id=>6)
|
|
396
396
|
a = EagerBand.eager(:salbums).all
|
|
397
397
|
DB.sqls.must_equal ['SELECT * FROM bands', 'SELECT * FROM albums WHERE ((albums.band_id * 3) IN (6))']
|
|
@@ -400,8 +400,8 @@ describe Sequel::Model, "#eager" do
|
|
|
400
400
|
DB.sqls.must_equal []
|
|
401
401
|
end
|
|
402
402
|
|
|
403
|
-
it "should handle a :
|
|
404
|
-
EagerAlbum.many_to_many :sgenres, :clone=>:genres, :
|
|
403
|
+
it "should handle a :predicate_key option to change the SQL used in the lookup, for many_to_many associations" do
|
|
404
|
+
EagerAlbum.many_to_many :sgenres, :clone=>:genres, :predicate_key=>(Sequel[:ag][:album_id] * 1)
|
|
405
405
|
a = EagerAlbum.eager(:sgenres).all
|
|
406
406
|
a.must_equal [EagerAlbum.load(:id => 1, :band_id => 2)]
|
|
407
407
|
DB.sqls.must_equal ['SELECT * FROM albums', "SELECT genres.*, (ag.album_id * 1) AS x_foreign_key_x FROM genres INNER JOIN ag ON (ag.genre_id = genres.id) WHERE ((ag.album_id * 1) IN (1))"]
|
|
@@ -409,8 +409,8 @@ describe Sequel::Model, "#eager" do
|
|
|
409
409
|
DB.sqls.must_equal []
|
|
410
410
|
end
|
|
411
411
|
|
|
412
|
-
it "should handle a :
|
|
413
|
-
EagerAlbum.one_through_one :sgenre, :clone=>:genre, :
|
|
412
|
+
it "should handle a :predicate_key option to change the SQL used in the lookup, for one_through_one associations" do
|
|
413
|
+
EagerAlbum.one_through_one :sgenre, :clone=>:genre, :predicate_key=>(Sequel[:ag][:album_id] * 1)
|
|
414
414
|
a = EagerAlbum.eager(:sgenre).all
|
|
415
415
|
a.must_equal [EagerAlbum.load(:id => 1, :band_id => 2)]
|
|
416
416
|
DB.sqls.must_equal ['SELECT * FROM albums', "SELECT genres.*, (ag.album_id * 1) AS x_foreign_key_x FROM genres INNER JOIN ag ON (ag.genre_id = genres.id) WHERE ((ag.album_id * 1) IN (1))"]
|
data/spec/model/model_spec.rb
CHANGED
|
@@ -489,6 +489,14 @@ describe Sequel::Model, ".require_valid_table = true" do
|
|
|
489
489
|
c.set_dataset @db[:bars]
|
|
490
490
|
c.columns.must_equal [:id]
|
|
491
491
|
end
|
|
492
|
+
|
|
493
|
+
deprecated "should assume nil value is the same as false" do
|
|
494
|
+
c = Class.new(Sequel::Model)
|
|
495
|
+
c.require_valid_table = nil
|
|
496
|
+
ds = @db.dataset
|
|
497
|
+
def ds.columns; raise Sequel::Error; end
|
|
498
|
+
c.set_dataset(ds)
|
|
499
|
+
end
|
|
492
500
|
end
|
|
493
501
|
|
|
494
502
|
describe Sequel::Model, "constructors" do
|
|
@@ -1114,7 +1122,43 @@ describe "Model.db_schema" do
|
|
|
1114
1122
|
@c.db_schema.must_equal(:x=>{:type=>:integer}, :z=>{}, :y=>{:type=>:string})
|
|
1115
1123
|
end
|
|
1116
1124
|
|
|
1117
|
-
|
|
1125
|
+
deprecated "should not raise error if setting dataset where getting schema and columns raises an error" do
|
|
1126
|
+
def @db.schema(table, opts={})
|
|
1127
|
+
raise Sequel::Error
|
|
1128
|
+
end
|
|
1129
|
+
@c.dataset = @dataset.join(:x, :id).from_self.columns(:id, :x)
|
|
1130
|
+
@c.db_schema.must_equal(:x=>{}, :id=>{})
|
|
1131
|
+
end
|
|
1132
|
+
|
|
1133
|
+
it "should not raise error if setting dataset where getting schema and columns raises an error and require_valid_table is false" do
|
|
1134
|
+
@c.require_valid_table = false
|
|
1135
|
+
def @db.schema(table, opts={})
|
|
1136
|
+
raise Sequel::Error
|
|
1137
|
+
end
|
|
1138
|
+
@c.dataset = @dataset.join(:x, :id).from_self.columns(:id, :x)
|
|
1139
|
+
@c.db_schema.must_equal(:x=>{}, :id=>{})
|
|
1140
|
+
end
|
|
1141
|
+
|
|
1142
|
+
it "should raise error if setting dataset where getting schema and columns raises an error and require_valid_table is true" do
|
|
1143
|
+
@c.require_valid_table = true
|
|
1144
|
+
def @db.schema(table, opts={})
|
|
1145
|
+
raise Sequel::Error
|
|
1146
|
+
end
|
|
1147
|
+
@c.dataset = @dataset.join(:x, :id).from_self.columns(:id, :x)
|
|
1148
|
+
@c.db_schema.must_equal(:x=>{}, :id=>{})
|
|
1149
|
+
end
|
|
1150
|
+
|
|
1151
|
+
it "should use dataset columns if getting schema raises an error and require_valid_table is false" do
|
|
1152
|
+
@c.require_valid_table = false
|
|
1153
|
+
def @db.schema(table, opts={})
|
|
1154
|
+
raise Sequel::Error
|
|
1155
|
+
end
|
|
1156
|
+
@c.dataset = @dataset.join(:x, :id).from_self.columns(:id, :x)
|
|
1157
|
+
@c.db_schema.must_equal(:x=>{}, :id=>{})
|
|
1158
|
+
end
|
|
1159
|
+
|
|
1160
|
+
it "should use dataset columns if getting schema raises an error and require_valid_table is true" do
|
|
1161
|
+
@c.require_valid_table = true
|
|
1118
1162
|
def @db.schema(table, opts={})
|
|
1119
1163
|
raise Sequel::Error
|
|
1120
1164
|
end
|
data/spec/model/plugins_spec.rb
CHANGED
|
@@ -295,4 +295,38 @@ describe Sequel::Plugins do
|
|
|
295
295
|
@c.foo.must_equal 1
|
|
296
296
|
end
|
|
297
297
|
end
|
|
298
|
+
|
|
299
|
+
describe "Sequel::Model.plugin" do
|
|
300
|
+
before do
|
|
301
|
+
@c = Class.new(Sequel::Model)
|
|
302
|
+
end
|
|
303
|
+
after do
|
|
304
|
+
Sequel::Plugins.send(:remove_const, :SomethingOrOther)
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
it "should try loading plugins from sequel/plugins/:plugin" do
|
|
308
|
+
a = []
|
|
309
|
+
m = Module.new
|
|
310
|
+
(class << @c; self end).send(:define_method, :require) do |b|
|
|
311
|
+
a << b
|
|
312
|
+
Sequel::Plugins.const_set(:SomethingOrOther, m)
|
|
313
|
+
end
|
|
314
|
+
@c.plugin :something_or_other
|
|
315
|
+
@c.plugins.must_include m
|
|
316
|
+
a.must_equal ['sequel/plugins/something_or_other']
|
|
317
|
+
end
|
|
298
318
|
|
|
319
|
+
deprecated "should try loading plugins from sequel_plugin" do
|
|
320
|
+
proc{@c.plugin :something_or_other}.must_raise(LoadError)
|
|
321
|
+
a = []
|
|
322
|
+
m = Module.new
|
|
323
|
+
(class << @c; self end).send(:define_method, :require) do |b|
|
|
324
|
+
a << b
|
|
325
|
+
raise LoadError if b == 'sequel/plugins/something_or_other'
|
|
326
|
+
Sequel::Plugins.const_set(:SomethingOrOther, m)
|
|
327
|
+
end
|
|
328
|
+
@c.plugin :something_or_other
|
|
329
|
+
@c.plugins.must_include m
|
|
330
|
+
a.must_equal ['sequel/plugins/something_or_other', 'sequel_something_or_other']
|
|
331
|
+
end
|
|
332
|
+
end
|
data/spec/model/record_spec.rb
CHANGED
|
@@ -436,7 +436,7 @@ describe "Model#freeze" do
|
|
|
436
436
|
end
|
|
437
437
|
|
|
438
438
|
it "should still have working class attr overriddable methods" do
|
|
439
|
-
|
|
439
|
+
[:typecast_empty_string_to_nil, :typecast_on_assignment, :strict_param_setting, :raise_on_save_failure, :raise_on_typecast_failure, :require_modification, :use_transactions].each{|m| @o.send(m) == Album.send(m)}
|
|
440
440
|
end
|
|
441
441
|
|
|
442
442
|
it "should have working new? method" do
|
data/spec/spec_config.rb
CHANGED
|
@@ -2,6 +2,8 @@ ENV['SEQUEL_POSTGRES_URL'] ||= 'postgres:///sequel_test?user=sequel_test&passwor
|
|
|
2
2
|
ENV['SEQUEL_SQLITE_URL'] ||= 'sqlite:/'
|
|
3
3
|
gem 'minitest'
|
|
4
4
|
require 'minitest'
|
|
5
|
+
require 'minitest/autorun'
|
|
6
|
+
#at_exit{GC.stress = true}
|
|
5
7
|
if false # Minitest.respond_to?(:before_parallel_fork)
|
|
6
8
|
if SEQUEL_ADAPTER_TEST.to_s == 'postgres'
|
|
7
9
|
Minitest.before_parallel_fork{DB.disconnect}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sequel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.49.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jeremy Evans
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-08-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: minitest
|
|
@@ -248,6 +248,9 @@ extra_rdoc_files:
|
|
|
248
248
|
- doc/release_notes/4.44.0.txt
|
|
249
249
|
- doc/release_notes/4.45.0.txt
|
|
250
250
|
- doc/release_notes/4.46.0.txt
|
|
251
|
+
- doc/release_notes/4.47.0.txt
|
|
252
|
+
- doc/release_notes/4.48.0.txt
|
|
253
|
+
- doc/release_notes/4.49.0.txt
|
|
251
254
|
files:
|
|
252
255
|
- CHANGELOG
|
|
253
256
|
- MIT-LICENSE
|
|
@@ -385,6 +388,9 @@ files:
|
|
|
385
388
|
- doc/release_notes/4.44.0.txt
|
|
386
389
|
- doc/release_notes/4.45.0.txt
|
|
387
390
|
- doc/release_notes/4.46.0.txt
|
|
391
|
+
- doc/release_notes/4.47.0.txt
|
|
392
|
+
- doc/release_notes/4.48.0.txt
|
|
393
|
+
- doc/release_notes/4.49.0.txt
|
|
388
394
|
- doc/release_notes/4.5.0.txt
|
|
389
395
|
- doc/release_notes/4.6.0.txt
|
|
390
396
|
- doc/release_notes/4.7.0.txt
|
|
@@ -488,6 +494,7 @@ files:
|
|
|
488
494
|
- lib/sequel/database/transactions.rb
|
|
489
495
|
- lib/sequel/dataset.rb
|
|
490
496
|
- lib/sequel/dataset/actions.rb
|
|
497
|
+
- lib/sequel/dataset/dataset_module.rb
|
|
491
498
|
- lib/sequel/dataset/features.rb
|
|
492
499
|
- lib/sequel/dataset/graph.rb
|
|
493
500
|
- lib/sequel/dataset/misc.rb
|
|
@@ -561,6 +568,7 @@ files:
|
|
|
561
568
|
- lib/sequel/extensions/schema_dumper.rb
|
|
562
569
|
- lib/sequel/extensions/select_remove.rb
|
|
563
570
|
- lib/sequel/extensions/sequel_3_dataset_methods.rb
|
|
571
|
+
- lib/sequel/extensions/sequel_4_dataset_methods.rb
|
|
564
572
|
- lib/sequel/extensions/server_block.rb
|
|
565
573
|
- lib/sequel/extensions/server_logging.rb
|
|
566
574
|
- lib/sequel/extensions/set_overrides.rb
|
|
@@ -674,8 +682,6 @@ files:
|
|
|
674
682
|
- lib/sequel/version.rb
|
|
675
683
|
- spec/adapter_spec.rb
|
|
676
684
|
- spec/adapters/db2_spec.rb
|
|
677
|
-
- spec/adapters/firebird_spec.rb
|
|
678
|
-
- spec/adapters/informix_spec.rb
|
|
679
685
|
- spec/adapters/mssql_spec.rb
|
|
680
686
|
- spec/adapters/mysql_spec.rb
|
|
681
687
|
- spec/adapters/oracle_spec.rb
|
|
@@ -810,6 +816,7 @@ files:
|
|
|
810
816
|
- spec/extensions/scissors_spec.rb
|
|
811
817
|
- spec/extensions/select_remove_spec.rb
|
|
812
818
|
- spec/extensions/sequel_3_dataset_methods_spec.rb
|
|
819
|
+
- spec/extensions/sequel_4_dataset_methods_spec.rb
|
|
813
820
|
- spec/extensions/serialization_modification_detection_spec.rb
|
|
814
821
|
- spec/extensions/serialization_spec.rb
|
|
815
822
|
- spec/extensions/server_block_spec.rb
|