sequel 4.47.0 → 4.48.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +134 -0
- data/Rakefile +1 -1
- data/doc/release_notes/4.48.0.txt +293 -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 +24 -7
- data/lib/sequel/adapters/jdbc.rb +36 -22
- data/lib/sequel/adapters/jdbc/db2.rb +12 -3
- data/lib/sequel/adapters/jdbc/derby.rb +4 -5
- data/lib/sequel/adapters/jdbc/oracle.rb +16 -2
- data/lib/sequel/adapters/jdbc/postgresql.rb +43 -18
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +9 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +11 -4
- data/lib/sequel/adapters/mock.rb +24 -19
- data/lib/sequel/adapters/mysql.rb +17 -16
- data/lib/sequel/adapters/mysql2.rb +4 -5
- data/lib/sequel/adapters/oracle.rb +5 -9
- data/lib/sequel/adapters/postgres.rb +89 -102
- 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 +75 -24
- data/lib/sequel/adapters/shared/postgres.rb +196 -94
- 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/core.rb +2 -2
- data/lib/sequel/database/connecting.rb +5 -5
- data/lib/sequel/database/dataset.rb +6 -3
- 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 +18 -10
- 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 +19 -8
- data/lib/sequel/extensions/core_extensions.rb +4 -1
- data/lib/sequel/extensions/duplicate_columns_handler.rb +1 -1
- 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 +6 -6
- data/lib/sequel/extensions/no_auto_literal_strings.rb +1 -1
- 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 +24 -24
- 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/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.rb +25 -57
- data/lib/sequel/model/associations.rb +14 -5
- data/lib/sequel/model/base.rb +96 -32
- 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 +1 -1
- data/lib/sequel/plugins/caching.rb +19 -13
- data/lib/sequel/plugins/class_table_inheritance.rb +19 -10
- data/lib/sequel/plugins/column_conflicts.rb +7 -2
- data/lib/sequel/plugins/column_select.rb +1 -1
- data/lib/sequel/plugins/csv_serializer.rb +8 -8
- data/lib/sequel/plugins/defaults_setter.rb +10 -0
- 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 +17 -10
- data/lib/sequel/plugins/lazy_attributes.rb +8 -7
- data/lib/sequel/plugins/modification_detection.rb +3 -0
- data/lib/sequel/plugins/nested_attributes.rb +5 -1
- data/lib/sequel/plugins/pg_array_associations.rb +5 -0
- data/lib/sequel/plugins/prepared_statements.rb +1 -0
- data/lib/sequel/plugins/rcte_tree.rb +4 -4
- data/lib/sequel/plugins/serialization.rb +3 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +2 -2
- 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 +2 -1
- data/lib/sequel/plugins/validation_class_methods.rb +5 -6
- data/lib/sequel/plugins/validation_helpers.rb +2 -4
- data/lib/sequel/plugins/xml_serializer.rb +4 -4
- data/lib/sequel/sql.rb +2 -2
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +115 -14
- data/spec/adapters/mysql_spec.rb +78 -28
- data/spec/adapters/oracle_spec.rb +24 -24
- data/spec/adapters/postgres_spec.rb +38 -24
- data/spec/adapters/sqlanywhere_spec.rb +88 -86
- data/spec/adapters/sqlite_spec.rb +29 -24
- data/spec/core/connection_pool_spec.rb +17 -0
- data/spec/core/database_spec.rb +6 -0
- data/spec/core/dataset_spec.rb +46 -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 +48 -2
- data/spec/extensions/column_conflicts_spec.rb +11 -0
- data/spec/extensions/connection_validator_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +8 -8
- data/spec/extensions/defaults_setter_spec.rb +1 -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/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/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/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/query_literals_spec.rb +3 -1
- data/spec/extensions/schema_dumper_spec.rb +96 -98
- 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/single_table_inheritance_spec.rb +1 -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 +9 -3
- data/spec/extensions/whitelist_security_spec.rb +26 -0
- data/spec/integration/dataset_test.rb +45 -44
- data/spec/integration/plugin_test.rb +20 -0
- 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/class_dataset_methods_spec.rb +14 -4
- data/spec/model/dataset_methods_spec.rb +12 -3
- data/spec/model/model_spec.rb +8 -0
- metadata +6 -4
- data/spec/adapters/firebird_spec.rb +0 -405
- data/spec/adapters/informix_spec.rb +0 -100
@@ -117,17 +117,17 @@ describe "An Oracle database" do
|
|
117
117
|
|
118
118
|
it "should return the correct record count" do
|
119
119
|
@d.count.must_equal 0
|
120
|
-
@d
|
121
|
-
@d
|
122
|
-
@d
|
120
|
+
@d.insert(:name => 'abc', :value => 123)
|
121
|
+
@d.insert(:name => 'abc', :value => 456)
|
122
|
+
@d.insert(:name => 'def', :value => 789)
|
123
123
|
@d.count.must_equal 3
|
124
124
|
end
|
125
125
|
|
126
126
|
it "should return the correct records" do
|
127
127
|
@d.to_a.must_equal []
|
128
|
-
@d
|
129
|
-
@d
|
130
|
-
@d
|
128
|
+
@d.insert(:name => 'abc', :value => 123)
|
129
|
+
@d.insert(:name => 'abc', :value => 456)
|
130
|
+
@d.insert(:name => 'def', :value => 789)
|
131
131
|
|
132
132
|
@d.order(:value).to_a.must_equal [
|
133
133
|
{:date_created=>nil, :name => 'abc', :value => 123},
|
@@ -214,9 +214,9 @@ describe "An Oracle database" do
|
|
214
214
|
end
|
215
215
|
|
216
216
|
it "should update records correctly" do
|
217
|
-
@d
|
218
|
-
@d
|
219
|
-
@d
|
217
|
+
@d.insert(:name => 'abc', :value => 123)
|
218
|
+
@d.insert(:name => 'abc', :value => 456)
|
219
|
+
@d.insert(:name => 'def', :value => 789)
|
220
220
|
@d.filter(:name => 'abc').update(:value => 530)
|
221
221
|
|
222
222
|
@d[:name => 'def'][:value].must_equal 789
|
@@ -224,17 +224,17 @@ describe "An Oracle database" do
|
|
224
224
|
end
|
225
225
|
|
226
226
|
it "should translate values correctly" do
|
227
|
-
@d
|
228
|
-
@d
|
227
|
+
@d.insert(:name => 'abc', :value => 456)
|
228
|
+
@d.insert(:name => 'def', :value => 789)
|
229
229
|
@d.filter{value > 500}.update(:date_created => Sequel.lit("to_timestamp('2009-09-09', 'YYYY-MM-DD')"))
|
230
230
|
|
231
231
|
@d[:name => 'def'][:date_created].strftime('%F').must_equal '2009-09-09'
|
232
232
|
end
|
233
233
|
|
234
234
|
it "should delete records correctly" do
|
235
|
-
@d
|
236
|
-
@d
|
237
|
-
@d
|
235
|
+
@d.insert(:name => 'abc', :value => 123)
|
236
|
+
@d.insert(:name => 'abc', :value => 456)
|
237
|
+
@d.insert(:name => 'def', :value => 789)
|
238
238
|
@d.filter(:name => 'abc').delete
|
239
239
|
|
240
240
|
@d.count.must_equal 1
|
@@ -248,7 +248,7 @@ describe "An Oracle database" do
|
|
248
248
|
|
249
249
|
it "should support transactions" do
|
250
250
|
DB.transaction do
|
251
|
-
@d
|
251
|
+
@d.insert(:name => 'abc', :value => 1)
|
252
252
|
end
|
253
253
|
|
254
254
|
@d.count.must_equal 1
|
@@ -257,15 +257,15 @@ describe "An Oracle database" do
|
|
257
257
|
it "should return correct result" do
|
258
258
|
@d1 = DB[:books]
|
259
259
|
@d1.delete
|
260
|
-
@d1
|
261
|
-
@d1
|
262
|
-
@d1
|
263
|
-
@d1
|
260
|
+
@d1.insert(:id => 1, :title => 'aaa', :category_id => 100)
|
261
|
+
@d1.insert(:id => 2, :title => 'bbb', :category_id => 100)
|
262
|
+
@d1.insert(:id => 3, :title => 'ccc', :category_id => 101)
|
263
|
+
@d1.insert(:id => 4, :title => 'ddd', :category_id => 102)
|
264
264
|
|
265
265
|
@d2 = DB[:categories]
|
266
266
|
@d2.delete
|
267
|
-
@d2
|
268
|
-
@d2
|
267
|
+
@d2.insert(:id => 100, :cat_name => 'ruby')
|
268
|
+
@d2.insert(:id => 101, :cat_name => 'rails')
|
269
269
|
|
270
270
|
@d1.join(:categories, :id => :category_id).select(Sequel[:books][:id], :title, :cat_name).order(Sequel[:books][:id]).to_a.must_equal [
|
271
271
|
{:id => 1, :title => 'aaa', :cat_name => 'ruby'},
|
@@ -294,9 +294,9 @@ describe "An Oracle database" do
|
|
294
294
|
it "should allow columns to be renamed" do
|
295
295
|
@d1 = DB[:books]
|
296
296
|
@d1.delete
|
297
|
-
@d1
|
298
|
-
@d1
|
299
|
-
@d1
|
297
|
+
@d1.insert(:id => 1, :title => 'aaa', :category_id => 100)
|
298
|
+
@d1.insert(:id => 2, :title => 'bbb', :category_id => 100)
|
299
|
+
@d1.insert(:id => 3, :title => 'bbb', :category_id => 100)
|
300
300
|
|
301
301
|
@d1.select(Sequel.as(:title, :name)).order_by(:id).to_a.must_equal [
|
302
302
|
{ :name => 'aaa' },
|
@@ -4,6 +4,7 @@ require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
|
|
4
4
|
|
5
5
|
uses_pg = Sequel::Postgres::USES_PG if DB.adapter_scheme == :postgres
|
6
6
|
uses_pg_or_jdbc = uses_pg || DB.adapter_scheme == :jdbc
|
7
|
+
# SEQUEL5: Remove native handling
|
7
8
|
|
8
9
|
def DB.sqls
|
9
10
|
(@sqls ||= [])
|
@@ -445,16 +446,16 @@ describe "A PostgreSQL dataset" do
|
|
445
446
|
end
|
446
447
|
|
447
448
|
it "should support regexps" do
|
448
|
-
@d
|
449
|
-
@d
|
449
|
+
@d.insert(:name => 'abc', :value => 1)
|
450
|
+
@d.insert(:name => 'bcd', :value => 2)
|
450
451
|
@d.filter(:name => /bc/).count.must_equal 2
|
451
452
|
@d.filter(:name => /^bc/).count.must_equal 1
|
452
453
|
end
|
453
454
|
|
454
455
|
it "should support NULLS FIRST and NULLS LAST" do
|
455
|
-
@d
|
456
|
-
@d
|
457
|
-
@d
|
456
|
+
@d.insert(:name => 'abc')
|
457
|
+
@d.insert(:name => 'bcd')
|
458
|
+
@d.insert(:name => 'bcd', :value => 2)
|
458
459
|
@d.order(Sequel.asc(:value, :nulls=>:first), :name).select_map(:name).must_equal %w[abc bcd bcd]
|
459
460
|
@d.order(Sequel.asc(:value, :nulls=>:last), :name).select_map(:name).must_equal %w[bcd abc bcd]
|
460
461
|
@d.order(Sequel.asc(:value, :nulls=>:first), :name).reverse.select_map(:name).must_equal %w[bcd bcd abc]
|
@@ -681,12 +682,12 @@ describe "A PostgreSQL dataset" do
|
|
681
682
|
end
|
682
683
|
|
683
684
|
it "should truncate with options" do
|
684
|
-
@d
|
685
|
+
@d.insert( :name => 'abc', :value => 1)
|
685
686
|
@d.count.must_equal 1
|
686
687
|
@d.truncate(:cascade => true)
|
687
688
|
@d.count.must_equal 0
|
688
689
|
if @d.db.server_version > 80400
|
689
|
-
@d
|
690
|
+
@d.insert( :name => 'abc', :value => 1)
|
690
691
|
@d.truncate(:cascade => true, :only=>true, :restart=>true)
|
691
692
|
@d.count.must_equal 0
|
692
693
|
end
|
@@ -802,7 +803,7 @@ describe "A PostgreSQL dataset with a timestamp field" do
|
|
802
803
|
|
803
804
|
cspecify "should store milliseconds in time fields for Time objects", [:do], [:swift] do
|
804
805
|
t = Time.now
|
805
|
-
@d
|
806
|
+
@d.insert(:time=>t)
|
806
807
|
t2 = @d.get(:time)
|
807
808
|
@d.literal(t2).must_equal @d.literal(t)
|
808
809
|
t2.strftime('%Y-%m-%d %H:%M:%S').must_equal t.strftime('%Y-%m-%d %H:%M:%S')
|
@@ -811,7 +812,7 @@ describe "A PostgreSQL dataset with a timestamp field" do
|
|
811
812
|
|
812
813
|
cspecify "should store milliseconds in time fields for DateTime objects", [:do], [:swift] do
|
813
814
|
t = DateTime.now
|
814
|
-
@d
|
815
|
+
@d.insert(:time=>t)
|
815
816
|
t2 = @d.get(:time)
|
816
817
|
@d.literal(t2).must_equal @d.literal(t)
|
817
818
|
t2.strftime('%Y-%m-%d %H:%M:%S').must_equal t.strftime('%Y-%m-%d %H:%M:%S')
|
@@ -820,7 +821,7 @@ describe "A PostgreSQL dataset with a timestamp field" do
|
|
820
821
|
|
821
822
|
if DB.adapter_scheme == :postgres
|
822
823
|
it "should handle infinite timestamps if convert_infinite_timestamps is set" do
|
823
|
-
@d
|
824
|
+
@d.insert(:time=>Sequel.cast('infinity', DateTime))
|
824
825
|
@db.convert_infinite_timestamps = :nil
|
825
826
|
@db[:test3].get(:time).must_be_nil
|
826
827
|
@db.convert_infinite_timestamps = :string
|
@@ -863,7 +864,7 @@ describe "A PostgreSQL dataset with a timestamp field" do
|
|
863
864
|
end
|
864
865
|
|
865
866
|
it "should handle infinite dates if convert_infinite_timestamps is set" do
|
866
|
-
@d
|
867
|
+
@d.insert(:date=>Sequel.cast('infinity', Date))
|
867
868
|
@db.convert_infinite_timestamps = :nil
|
868
869
|
@db[:test3].get(:date).must_be_nil
|
869
870
|
@db.convert_infinite_timestamps = :string
|
@@ -916,12 +917,12 @@ describe "A PostgreSQL database" do
|
|
916
917
|
|
917
918
|
it "should support column operations" do
|
918
919
|
@db.create_table!(:test2){text :name; integer :value}
|
919
|
-
@db[:test2]
|
920
|
+
@db[:test2].insert({})
|
920
921
|
@db[:test2].columns.must_equal [:name, :value]
|
921
922
|
|
922
923
|
@db.add_column :test2, :xyz, :text, :default => '000'
|
923
924
|
@db[:test2].columns.must_equal [:name, :value, :xyz]
|
924
|
-
@db[:test2]
|
925
|
+
@db[:test2].insert(:name => 'mmm', :value => 111)
|
925
926
|
@db[:test2].first[:xyz].must_equal '000'
|
926
927
|
|
927
928
|
@db[:test2].columns.must_equal [:name, :value, :xyz]
|
@@ -931,7 +932,7 @@ describe "A PostgreSQL database" do
|
|
931
932
|
|
932
933
|
@db[:test2].delete
|
933
934
|
@db.add_column :test2, :xyz, :text, :default => '000'
|
934
|
-
@db[:test2]
|
935
|
+
@db[:test2].insert(:name => 'mmm', :value => 111, :xyz => 'qqqq')
|
935
936
|
|
936
937
|
@db[:test2].columns.must_equal [:name, :value, :xyz]
|
937
938
|
@db.rename_column :test2, :xyz, :zyx
|
@@ -940,7 +941,7 @@ describe "A PostgreSQL database" do
|
|
940
941
|
|
941
942
|
@db.add_column :test2, :xyz, :float
|
942
943
|
@db[:test2].delete
|
943
|
-
@db[:test2]
|
944
|
+
@db[:test2].insert(:name => 'mmm', :value => 111, :xyz => 56.78)
|
944
945
|
@db.set_column_type :test2, :xyz, :integer
|
945
946
|
|
946
947
|
@db[:test2].first[:xyz].must_equal 57
|
@@ -1517,19 +1518,19 @@ if DB.server_version >= 80300
|
|
1517
1518
|
|
1518
1519
|
it "should search by indexed column" do
|
1519
1520
|
record = {:title => "oopsla conference", :body => "test"}
|
1520
|
-
@ds
|
1521
|
+
@ds.insert(record)
|
1521
1522
|
@ds.full_text_search(:title, "oopsla").all.must_include(record)
|
1522
1523
|
end
|
1523
1524
|
|
1524
1525
|
it "should join multiple coumns with spaces to search by last words in row" do
|
1525
1526
|
record = {:title => "multiple words", :body => "are easy to search"}
|
1526
|
-
@ds
|
1527
|
+
@ds.insert(record)
|
1527
1528
|
@ds.full_text_search([:title, :body], "words").all.must_include(record)
|
1528
1529
|
end
|
1529
1530
|
|
1530
1531
|
it "should return rows with a NULL in one column if a match in another column" do
|
1531
1532
|
record = {:title => "multiple words", :body =>nil}
|
1532
|
-
@ds
|
1533
|
+
@ds.insert(record)
|
1533
1534
|
@ds.full_text_search([:title, :body], "words").all.must_include(record)
|
1534
1535
|
end
|
1535
1536
|
end
|
@@ -1781,7 +1782,7 @@ if DB.adapter_scheme == :postgres
|
|
1781
1782
|
before(:all) do
|
1782
1783
|
deprecated do
|
1783
1784
|
@db = DB
|
1784
|
-
@
|
1785
|
+
@cp = @db.conversion_procs.dup
|
1785
1786
|
@db.conversion_procs.delete(1013)
|
1786
1787
|
Sequel::Postgres::PG_NAMED_TYPES[:oidvector] = lambda{|v| v.reverse}
|
1787
1788
|
@db.reset_conversion_procs
|
@@ -1791,8 +1792,7 @@ if DB.adapter_scheme == :postgres
|
|
1791
1792
|
after(:all) do
|
1792
1793
|
deprecated do
|
1793
1794
|
Sequel::Postgres::PG_NAMED_TYPES.delete(:oidvector)
|
1794
|
-
@db.conversion_procs.
|
1795
|
-
@db.conversion_procs[1013] = @old_cp
|
1795
|
+
@db.conversion_procs.replace(@cp)
|
1796
1796
|
@db.drop_table?(:foo)
|
1797
1797
|
@db.drop_enum(:foo_enum) rescue nil
|
1798
1798
|
end
|
@@ -1961,6 +1961,18 @@ if uses_pg_or_jdbc && DB.server_version >= 90000
|
|
1961
1961
|
buf.must_equal ["1,2\n"]
|
1962
1962
|
@db[:test_copy].select_order_map(:x).must_equal [1, 3]
|
1963
1963
|
end
|
1964
|
+
|
1965
|
+
it "should not swallow error raised by block" do
|
1966
|
+
begin
|
1967
|
+
@db.copy_table(:test_copy){|b| raise ArgumentError, "foo"}
|
1968
|
+
rescue => e
|
1969
|
+
end
|
1970
|
+
|
1971
|
+
e.must_be_kind_of Sequel::DatabaseDisconnectError
|
1972
|
+
e.wrapped_exception.must_be_kind_of ArgumentError
|
1973
|
+
e.message.must_include "foo"
|
1974
|
+
end
|
1975
|
+
|
1964
1976
|
end
|
1965
1977
|
end
|
1966
1978
|
|
@@ -3375,7 +3387,7 @@ describe 'PostgreSQL interval types' do
|
|
3375
3387
|
@native = DB.adapter_scheme == :postgres || DB.adapter_scheme == :jdbc
|
3376
3388
|
end
|
3377
3389
|
after(:all) do
|
3378
|
-
Sequel::Postgres::
|
3390
|
+
Sequel::Postgres::PG__TYPES.delete(1186) # SEQUEL5: Remove
|
3379
3391
|
end
|
3380
3392
|
after do
|
3381
3393
|
@db.drop_table?(:items)
|
@@ -3487,16 +3499,18 @@ describe 'PostgreSQL row-valued/composite types' do
|
|
3487
3499
|
Integer :id
|
3488
3500
|
column :employees, 'person[]'
|
3489
3501
|
end
|
3502
|
+
oids = @db.conversion_procs.keys
|
3490
3503
|
@db.register_row_type(:address)
|
3491
3504
|
@db.register_row_type(Sequel.qualify(:public, :person))
|
3492
3505
|
@db.register_row_type(Sequel[:public][:company])
|
3506
|
+
@new_oids = @db.conversion_procs.keys - oids
|
3493
3507
|
|
3494
3508
|
@native = DB.adapter_scheme == :postgres || DB.adapter_scheme == :jdbc
|
3495
3509
|
end
|
3496
3510
|
after(:all) do
|
3497
|
-
@db.
|
3511
|
+
@new_oids.each{|oid| @db.conversion_procs.delete(oid)}
|
3498
3512
|
@db.row_types.clear
|
3499
|
-
@db.
|
3513
|
+
@db.drop_table?(:company, :person, :address)
|
3500
3514
|
end
|
3501
3515
|
after do
|
3502
3516
|
[:company, :person, :address].each{|t| @db[t].delete}
|
@@ -6,73 +6,66 @@ if DB.table_exists?(:test)
|
|
6
6
|
DB.drop_table(:test)
|
7
7
|
end
|
8
8
|
|
9
|
-
describe "
|
9
|
+
describe "convert_smallint_to_bool" do
|
10
10
|
before do
|
11
11
|
@db = DB
|
12
|
+
@ds = @db[:booltest]
|
13
|
+
@db.send(:remove_instance_variable, :@convert_smallint_to_bool) if @db.instance_variable_defined?(:@convert_smallint_to_bool)
|
12
14
|
end
|
13
15
|
after do
|
14
|
-
|
15
|
-
|
16
|
+
deprecated do
|
17
|
+
Sequel::SqlAnywhere.convert_smallint_to_bool = true
|
18
|
+
end
|
19
|
+
@db.send(:remove_instance_variable, :@convert_smallint_to_bool) if @db.instance_variable_defined?(:@convert_smallint_to_bool)
|
16
20
|
end
|
17
21
|
|
22
|
+
# SEQUEL5: Remove
|
18
23
|
describe "Sequel::SqlAnywhere.convert_smallint_to_bool" do
|
19
24
|
before do
|
20
25
|
@db.create_table!(:booltest){column :b, 'smallint'; column :i, 'integer'}
|
21
|
-
@ds = @db[:booltest]
|
22
26
|
end
|
23
27
|
after do
|
24
28
|
@db.drop_table(:booltest)
|
25
29
|
end
|
26
30
|
|
27
|
-
|
31
|
+
deprecated "should consider smallint datatypes as boolean if set, but if not, as larger smallints" do
|
28
32
|
@db.create_table!(:booltest){column :b, 'smallint'; column :i, 'integer'}
|
29
33
|
@db.schema(:booltest, :reload=>true).first.last[:type].must_equal :boolean
|
30
34
|
@db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
|
31
35
|
|
32
36
|
Sequel::SqlAnywhere.convert_smallint_to_bool = false
|
33
|
-
@
|
34
|
-
@
|
35
|
-
@db2.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
|
36
|
-
|
37
|
-
@db.schema(:booltest, :reload=>true).first.last[:type].must_equal :boolean
|
37
|
+
@db.send(:remove_instance_variable, :@convert_smallint_to_bool) if @db.instance_variable_defined?(:@convert_smallint_to_bool)
|
38
|
+
@db.schema(:booltest, :reload=>true).first.last[:type].must_equal :integer
|
38
39
|
@db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
|
39
|
-
|
40
|
-
@db2.disconnect
|
41
40
|
end
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should return all smallints as integers when unset" do
|
57
|
-
Sequel::SqlAnywhere.convert_smallint_to_bool = false
|
58
|
-
@db2 = Sequel.connect(DB.url)
|
59
|
-
@ds2 = @db2[:booltest]
|
60
|
-
@ds2.delete
|
61
|
-
@ds2 << {:b=>true, :i=>10}
|
62
|
-
@ds2.all.must_equal [{:b=>1, :i=>10}]
|
63
|
-
@ds2.delete
|
64
|
-
@ds2 << {:b=>false, :i=>0}
|
65
|
-
@ds2.all.must_equal [{:b=>0, :i=>0}]
|
66
|
-
|
67
|
-
@ds2.delete
|
68
|
-
@ds2 << {:b=>1, :i=>10}
|
69
|
-
@ds2.all.must_equal [{:b=>1, :i=>10}]
|
70
|
-
@ds2.delete
|
71
|
-
@ds2 << {:b=>0, :i=>0}
|
72
|
-
@ds2.all.must_equal [{:b=>0, :i=>0}]
|
42
|
+
it "should return smallints as bools and integers as integers when set" do
|
43
|
+
@ds.delete
|
44
|
+
@ds.insert(:b=>true, :i=>10)
|
45
|
+
@ds.all.must_equal [{:b=>true, :i=>10}]
|
46
|
+
@ds.delete
|
47
|
+
@ds.insert(:b=>false, :i=>0)
|
48
|
+
@ds.all.must_equal [{:b=>false, :i=>0}]
|
49
|
+
@ds.delete
|
50
|
+
@ds.insert(:b=>true, :i=>1)
|
51
|
+
@ds.all.must_equal [{:b=>true, :i=>1}]
|
52
|
+
end
|
73
53
|
|
74
|
-
|
75
|
-
|
54
|
+
deprecated "should return all smallints as integers when unset" do
|
55
|
+
Sequel::SqlAnywhere.convert_smallint_to_bool = false
|
56
|
+
@ds.delete
|
57
|
+
@ds.insert(:b=>true, :i=>10)
|
58
|
+
@ds.all.must_equal [{:b=>1, :i=>10}]
|
59
|
+
@ds.delete
|
60
|
+
@ds.insert(:b=>false, :i=>0)
|
61
|
+
@ds.all.must_equal [{:b=>0, :i=>0}]
|
62
|
+
|
63
|
+
@ds.delete
|
64
|
+
@ds.insert(:b=>1, :i=>10)
|
65
|
+
@ds.all.must_equal [{:b=>1, :i=>10}]
|
66
|
+
@ds.delete
|
67
|
+
@ds.insert(:b=>0, :i=>0)
|
68
|
+
@ds.all.must_equal [{:b=>0, :i=>0}]
|
76
69
|
end
|
77
70
|
end
|
78
71
|
|
@@ -92,47 +85,39 @@ describe "Convert smallint to boolean" do
|
|
92
85
|
@db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
|
93
86
|
end
|
94
87
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
@ds.all.must_equal [{:b=>true, :i=>1}]
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should return all smallints as integers when unset" do
|
110
|
-
@db2 = Sequel.connect(DB.url)
|
111
|
-
@db2.convert_smallint_to_bool = false
|
112
|
-
@ds2 = @db2[:booltest]
|
113
|
-
@ds2.delete
|
114
|
-
@ds2 << {:b=>true, :i=>10}
|
115
|
-
@ds2.all.must_equal [{:b=>1, :i=>10}]
|
116
|
-
@ds2.delete
|
117
|
-
@ds2 << {:b=>false, :i=>0}
|
118
|
-
@ds2.all.must_equal [{:b=>0, :i=>0}]
|
119
|
-
|
120
|
-
@ds2.delete
|
121
|
-
@ds2 << {:b=>1, :i=>10}
|
122
|
-
@ds2.all.must_equal [{:b=>1, :i=>10}]
|
123
|
-
@ds2.delete
|
124
|
-
@ds2 << {:b=>0, :i=>0}
|
125
|
-
@ds2.all.must_equal [{:b=>0, :i=>0}]
|
88
|
+
it "should return smallints as bools and integers as integers when set" do
|
89
|
+
@ds.delete
|
90
|
+
@ds.insert(:b=>true, :i=>10)
|
91
|
+
@ds.all.must_equal [{:b=>true, :i=>10}]
|
92
|
+
@ds.delete
|
93
|
+
@ds.insert(:b=>false, :i=>0)
|
94
|
+
@ds.all.must_equal [{:b=>false, :i=>0}]
|
95
|
+
@ds.delete
|
96
|
+
@ds.insert(:b=>true, :i=>1)
|
97
|
+
@ds.all.must_equal [{:b=>true, :i=>1}]
|
98
|
+
end
|
126
99
|
|
127
|
-
|
128
|
-
|
100
|
+
it "should return all smallints as integers when unset" do
|
101
|
+
@db.convert_smallint_to_bool = false
|
102
|
+
@ds.delete
|
103
|
+
@ds.insert(:b=>true, :i=>10)
|
104
|
+
@ds.all.must_equal [{:b=>1, :i=>10}]
|
105
|
+
@ds.delete
|
106
|
+
@ds.insert(:b=>false, :i=>0)
|
107
|
+
@ds.all.must_equal [{:b=>0, :i=>0}]
|
108
|
+
|
109
|
+
@ds.delete
|
110
|
+
@ds.insert(:b=>1, :i=>10)
|
111
|
+
@ds.all.must_equal [{:b=>1, :i=>10}]
|
112
|
+
@ds.delete
|
113
|
+
@ds.insert(:b=>0, :i=>0)
|
114
|
+
@ds.all.must_equal [{:b=>0, :i=>0}]
|
129
115
|
end
|
130
116
|
end
|
131
117
|
|
132
118
|
describe "Dataset#convert_smallint_to_bool" do
|
133
119
|
before do
|
134
120
|
@db.create_table!(:booltest){column :b, 'smallint'; column :i, 'integer'}
|
135
|
-
@ds = @db[:booltest]
|
136
121
|
end
|
137
122
|
after do
|
138
123
|
@db.drop_table(:booltest)
|
@@ -140,30 +125,47 @@ describe "Convert smallint to boolean" do
|
|
140
125
|
|
141
126
|
it "should return smallints as bools and integers as integers when set" do
|
142
127
|
@ds.delete
|
143
|
-
@ds
|
128
|
+
@ds.insert(:b=>true, :i=>10)
|
144
129
|
@ds.all.must_equal [{:b=>true, :i=>10}]
|
145
130
|
@ds.delete
|
146
|
-
@ds
|
131
|
+
@ds.insert(:b=>false, :i=>0)
|
147
132
|
@ds.all.must_equal [{:b=>false, :i=>0}]
|
148
133
|
@ds.delete
|
149
|
-
@ds
|
134
|
+
@ds.insert(:b=>true, :i=>1)
|
150
135
|
@ds.all.must_equal [{:b=>true, :i=>1}]
|
151
136
|
end
|
152
137
|
|
153
|
-
|
138
|
+
deprecated "should return all smallints as integers when unset" do
|
154
139
|
@ds.convert_smallint_to_bool = false
|
155
140
|
@ds.delete
|
156
|
-
@ds
|
141
|
+
@ds.insert(:b=>true, :i=>10)
|
142
|
+
@ds.all.must_equal [{:b=>1, :i=>10}]
|
143
|
+
@ds.delete
|
144
|
+
@ds.insert(:b=>false, :i=>0)
|
145
|
+
@ds.all.must_equal [{:b=>0, :i=>0}]
|
146
|
+
|
147
|
+
@ds.delete
|
148
|
+
@ds.insert(:b=>1, :i=>10)
|
149
|
+
@ds.all.must_equal [{:b=>1, :i=>10}]
|
150
|
+
@ds.delete
|
151
|
+
@ds.insert(:b=>0, :i=>0)
|
152
|
+
@ds.all.must_equal [{:b=>0, :i=>0}]
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should support with_convert_smallint_to_bool for returning modified dataset with setting changed" do
|
156
|
+
@ds = @ds.with_convert_smallint_to_bool(false)
|
157
|
+
@ds.delete
|
158
|
+
@ds.insert(:b=>true, :i=>10)
|
157
159
|
@ds.all.must_equal [{:b=>1, :i=>10}]
|
158
160
|
@ds.delete
|
159
|
-
@ds
|
161
|
+
@ds.insert(:b=>false, :i=>0)
|
160
162
|
@ds.all.must_equal [{:b=>0, :i=>0}]
|
161
163
|
|
162
164
|
@ds.delete
|
163
|
-
@ds
|
165
|
+
@ds.insert(:b=>1, :i=>10)
|
164
166
|
@ds.all.must_equal [{:b=>1, :i=>10}]
|
165
167
|
@ds.delete
|
166
|
-
@ds
|
168
|
+
@ds.insert(:b=>0, :i=>0)
|
167
169
|
@ds.all.must_equal [{:b=>0, :i=>0}]
|
168
170
|
end
|
169
171
|
end
|