sequel 3.39.0 → 3.40.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 +30 -0
- data/README.rdoc +4 -3
- data/doc/active_record.rdoc +1 -1
- data/doc/opening_databases.rdoc +7 -0
- data/doc/release_notes/3.40.0.txt +73 -0
- data/lib/sequel/adapters/ado.rb +29 -3
- data/lib/sequel/adapters/ado/access.rb +334 -0
- data/lib/sequel/adapters/ado/mssql.rb +0 -6
- data/lib/sequel/adapters/cubrid.rb +143 -0
- data/lib/sequel/adapters/jdbc.rb +26 -18
- data/lib/sequel/adapters/jdbc/cubrid.rb +52 -0
- data/lib/sequel/adapters/jdbc/derby.rb +7 -7
- data/lib/sequel/adapters/jdbc/hsqldb.rb +5 -0
- data/lib/sequel/adapters/jdbc/mysql.rb +9 -4
- data/lib/sequel/adapters/mysql.rb +0 -3
- data/lib/sequel/adapters/mysql2.rb +0 -3
- data/lib/sequel/adapters/oracle.rb +4 -1
- data/lib/sequel/adapters/postgres.rb +4 -4
- data/lib/sequel/adapters/shared/access.rb +205 -3
- data/lib/sequel/adapters/shared/cubrid.rb +216 -0
- data/lib/sequel/adapters/shared/db2.rb +7 -2
- data/lib/sequel/adapters/shared/mssql.rb +3 -34
- data/lib/sequel/adapters/shared/mysql.rb +4 -33
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +11 -0
- data/lib/sequel/adapters/shared/oracle.rb +5 -0
- data/lib/sequel/adapters/shared/postgres.rb +2 -1
- data/lib/sequel/adapters/utils/split_alter_table.rb +36 -0
- data/lib/sequel/database/connecting.rb +1 -1
- data/lib/sequel/database/query.rb +30 -7
- data/lib/sequel/database/schema_methods.rb +7 -2
- data/lib/sequel/dataset/query.rb +9 -10
- data/lib/sequel/dataset/sql.rb +14 -26
- data/lib/sequel/extensions/pg_hstore.rb +19 -0
- data/lib/sequel/extensions/pg_row.rb +5 -5
- data/lib/sequel/plugins/association_pks.rb +121 -18
- data/lib/sequel/plugins/json_serializer.rb +19 -0
- data/lib/sequel/sql.rb +11 -0
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/postgres_spec.rb +42 -0
- data/spec/core/database_spec.rb +17 -0
- data/spec/core/dataset_spec.rb +11 -0
- data/spec/core/expression_filters_spec.rb +13 -0
- data/spec/extensions/association_pks_spec.rb +163 -3
- data/spec/extensions/pg_hstore_spec.rb +6 -0
- data/spec/extensions/pg_row_spec.rb +17 -0
- data/spec/integration/associations_test.rb +1 -1
- data/spec/integration/dataset_test.rb +13 -13
- data/spec/integration/plugin_test.rb +232 -7
- data/spec/integration/schema_test.rb +8 -12
- data/spec/integration/spec_helper.rb +1 -1
- data/spec/integration/type_test.rb +6 -0
- metadata +9 -2
@@ -608,7 +608,7 @@ describe "Sequel::Model Simple Associations" do
|
|
608
608
|
@els = {:eager_limit_strategy=>:correlated_subquery}
|
609
609
|
end
|
610
610
|
it_should_behave_like "eager limit strategies"
|
611
|
-
end unless Sequel.guarded?(:mysql, :db2, :oracle, :h2)
|
611
|
+
end unless Sequel.guarded?(:mysql, :db2, :oracle, :h2, :cubrid)
|
612
612
|
|
613
613
|
specify "should handle many_to_one associations with same name as :key" do
|
614
614
|
Album.def_column_alias(:artist_id_id, :artist_id)
|
@@ -867,23 +867,23 @@ describe "Sequel::Dataset convenience methods" do
|
|
867
867
|
end
|
868
868
|
|
869
869
|
it "#group_and_count should return a grouping by count" do
|
870
|
-
@ds.group_and_count(:a).order(:
|
870
|
+
@ds.group_and_count(:a).order{count(:a)}.all.should == []
|
871
871
|
@ds.insert(20, 10)
|
872
|
-
@ds.group_and_count(:a).order(:
|
872
|
+
@ds.group_and_count(:a).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.should == [{:a=>20, :count=>1}]
|
873
873
|
@ds.insert(20, 30)
|
874
|
-
@ds.group_and_count(:a).order(:
|
874
|
+
@ds.group_and_count(:a).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.should == [{:a=>20, :count=>2}]
|
875
875
|
@ds.insert(30, 30)
|
876
|
-
@ds.group_and_count(:a).order(:
|
876
|
+
@ds.group_and_count(:a).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.should == [{:a=>30, :count=>1}, {:a=>20, :count=>2}]
|
877
877
|
end
|
878
878
|
|
879
879
|
it "#group_and_count should support column aliases" do
|
880
|
-
@ds.group_and_count(:a___c).order(:
|
880
|
+
@ds.group_and_count(:a___c).order{count(:a)}.all.should == []
|
881
881
|
@ds.insert(20, 10)
|
882
|
-
@ds.group_and_count(:a___c).order(:
|
882
|
+
@ds.group_and_count(:a___c).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.should == [{:c=>20, :count=>1}]
|
883
883
|
@ds.insert(20, 30)
|
884
|
-
@ds.group_and_count(:a___c).order(:
|
884
|
+
@ds.group_and_count(:a___c).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.should == [{:c=>20, :count=>2}]
|
885
885
|
@ds.insert(30, 30)
|
886
|
-
@ds.group_and_count(:a___c).order(:
|
886
|
+
@ds.group_and_count(:a___c).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.should == [{:c=>30, :count=>1}, {:c=>20, :count=>2}]
|
887
887
|
end
|
888
888
|
|
889
889
|
specify "#range should return the range between the maximum and minimum values" do
|
@@ -906,21 +906,21 @@ end
|
|
906
906
|
describe "Sequel::Dataset main SQL methods" do
|
907
907
|
before(:all) do
|
908
908
|
@db = INTEGRATION_DB
|
909
|
-
@db.create_table!(:
|
910
|
-
@ds = @db[:
|
909
|
+
@db.create_table!(:d){Integer :a; Integer :b}
|
910
|
+
@ds = @db[:d].order(:a)
|
911
911
|
end
|
912
912
|
before do
|
913
913
|
@ds.delete
|
914
914
|
end
|
915
915
|
after(:all) do
|
916
|
-
@db.drop_table?(:
|
916
|
+
@db.drop_table?(:d)
|
917
917
|
end
|
918
918
|
|
919
919
|
it "#exists should return a usable exists clause" do
|
920
|
-
@ds.filter(@db[:
|
920
|
+
@ds.filter(@db[:d___c].filter(:c__a=>:d__b).exists).all.should == []
|
921
921
|
@ds.insert(20, 30)
|
922
922
|
@ds.insert(10, 20)
|
923
|
-
@ds.filter(@db[:
|
923
|
+
@ds.filter(@db[:d___c].filter(:c__a=>:d__b).exists).all.should == [{:a=>10, :b=>20}]
|
924
924
|
end
|
925
925
|
|
926
926
|
it "#filter and #exclude should work with placeholder strings" do
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
|
2
2
|
|
3
|
-
# H2 and MSSQL don't support USING joins
|
4
3
|
# DB2 does not seem to support USING joins in every version; it seems to be
|
5
4
|
# valid expression in DB2 iSeries UDB though.
|
6
|
-
unless Sequel.guarded?(:
|
5
|
+
unless !INTEGRATION_DB.dataset.supports_join_using? || Sequel.guarded?(:db2)
|
7
6
|
describe "Class Table Inheritance Plugin" do
|
8
7
|
before(:all) do
|
9
8
|
@db = INTEGRATION_DB
|
@@ -1069,7 +1068,7 @@ end
|
|
1069
1068
|
describe "AssociationPks plugin" do
|
1070
1069
|
before(:all) do
|
1071
1070
|
@db = INTEGRATION_DB
|
1072
|
-
@db.drop_table?(:albums_tags, :tags, :albums, :artists)
|
1071
|
+
@db.drop_table?(:albums_tags, :albums_vocalists, :vocalists_instruments, :vocalists_hits, :hits, :instruments, :vocalists, :tags, :albums, :artists)
|
1073
1072
|
@db.create_table(:artists) do
|
1074
1073
|
primary_key :id
|
1075
1074
|
String :name
|
@@ -1087,6 +1086,46 @@ describe "AssociationPks plugin" do
|
|
1087
1086
|
foreign_key :album_id, :albums
|
1088
1087
|
foreign_key :tag_id, :tags
|
1089
1088
|
end
|
1089
|
+
@db.create_table(:vocalists) do
|
1090
|
+
String :first
|
1091
|
+
String :last
|
1092
|
+
primary_key [:first, :last]
|
1093
|
+
foreign_key :album_id, :albums
|
1094
|
+
end
|
1095
|
+
@db.create_table(:albums_vocalists) do
|
1096
|
+
foreign_key :album_id, :albums
|
1097
|
+
String :first
|
1098
|
+
String :last
|
1099
|
+
foreign_key [:first, :last], :vocalists
|
1100
|
+
end
|
1101
|
+
@db.create_table(:instruments) do
|
1102
|
+
primary_key :id
|
1103
|
+
String :first
|
1104
|
+
String :last
|
1105
|
+
foreign_key [:first, :last], :vocalists
|
1106
|
+
end
|
1107
|
+
@db.create_table(:vocalists_instruments) do
|
1108
|
+
String :first
|
1109
|
+
String :last
|
1110
|
+
foreign_key [:first, :last], :vocalists
|
1111
|
+
foreign_key :instrument_id, :instruments
|
1112
|
+
end
|
1113
|
+
@db.create_table(:hits) do
|
1114
|
+
Integer :year
|
1115
|
+
Integer :week
|
1116
|
+
primary_key [:year, :week]
|
1117
|
+
String :first
|
1118
|
+
String :last
|
1119
|
+
foreign_key [:first, :last], :vocalists
|
1120
|
+
end
|
1121
|
+
@db.create_table(:vocalists_hits) do
|
1122
|
+
String :first
|
1123
|
+
String :last
|
1124
|
+
foreign_key [:first, :last], :vocalists
|
1125
|
+
Integer :year
|
1126
|
+
Integer :week
|
1127
|
+
foreign_key [:year, :week], :hits
|
1128
|
+
end
|
1090
1129
|
class ::Artist < Sequel::Model
|
1091
1130
|
plugin :association_pks
|
1092
1131
|
one_to_many :albums, :order=>:id
|
@@ -1097,9 +1136,19 @@ describe "AssociationPks plugin" do
|
|
1097
1136
|
end
|
1098
1137
|
class ::Tag < Sequel::Model
|
1099
1138
|
end
|
1139
|
+
class ::Vocalist < Sequel::Model
|
1140
|
+
set_primary_key [:first, :last]
|
1141
|
+
plugin :association_pks
|
1142
|
+
end
|
1143
|
+
class ::Instrument < Sequel::Model
|
1144
|
+
plugin :association_pks
|
1145
|
+
end
|
1146
|
+
class ::Hit < Sequel::Model
|
1147
|
+
set_primary_key [:year, :week]
|
1148
|
+
end
|
1100
1149
|
end
|
1101
1150
|
before do
|
1102
|
-
[:albums_tags, :tags, :albums, :artists].each{|t| @db[t].delete}
|
1151
|
+
[:albums_tags, :albums_vocalists, :vocalists_instruments, :vocalists_hits, :hits, :instruments, :vocalists, :tags, :albums, :artists].each{|t| @db[t].delete}
|
1103
1152
|
@ar1 =@db[:artists].insert(:name=>'YJM')
|
1104
1153
|
@ar2 =@db[:artists].insert(:name=>'AS')
|
1105
1154
|
@al1 =@db[:albums].insert(:name=>'RF', :artist_id=>@ar1)
|
@@ -1111,10 +1160,34 @@ describe "AssociationPks plugin" do
|
|
1111
1160
|
{@al1=>[@t1, @t2, @t3], @al2=>[@t2]}.each do |aid, tids|
|
1112
1161
|
tids.each{|tid| @db[:albums_tags].insert([aid, tid])}
|
1113
1162
|
end
|
1163
|
+
@v1 = ['F1', 'L1']
|
1164
|
+
@v2 = ['F2', 'L2']
|
1165
|
+
@v3 = ['F3', 'L3']
|
1166
|
+
@db[:vocalists].insert(@v1 + [@al1])
|
1167
|
+
@db[:vocalists].insert(@v2 + [@al1])
|
1168
|
+
@db[:vocalists].insert(@v3 + [@al1])
|
1169
|
+
@i1 = @db[:instruments].insert([:first, :last], @v1)
|
1170
|
+
@i2 = @db[:instruments].insert([:first, :last], @v1)
|
1171
|
+
@i3 = @db[:instruments].insert([:first, :last], @v1)
|
1172
|
+
@h1 = [1997, 1]
|
1173
|
+
@h2 = [1997, 2]
|
1174
|
+
@h3 = [1997, 3]
|
1175
|
+
@db[:hits].insert(@h1 + @v1)
|
1176
|
+
@db[:hits].insert(@h2 + @v1)
|
1177
|
+
@db[:hits].insert(@h3 + @v1)
|
1178
|
+
{@al1=>[@v1, @v2, @v3], @al2=>[@v2]}.each do |aid, vids|
|
1179
|
+
vids.each{|vid| @db[:albums_vocalists].insert([aid] + vid)}
|
1180
|
+
end
|
1181
|
+
{@v1=>[@i1, @i2, @i3], @v2=>[@i2]}.each do |vid, iids|
|
1182
|
+
iids.each{|iid| @db[:vocalists_instruments].insert(vid + [iid])}
|
1183
|
+
end
|
1184
|
+
{@v1=>[@h1, @h2, @h3], @v2=>[@h2]}.each do |vid, hids|
|
1185
|
+
hids.each{|hid| @db[:vocalists_hits].insert(vid + hid)}
|
1186
|
+
end
|
1114
1187
|
end
|
1115
1188
|
after(:all) do
|
1116
|
-
@db.drop_table? :albums_tags, :tags, :albums, :artists
|
1117
|
-
[:Artist, :Album, :Tag].each{|s| Object.send(:remove_const, s)}
|
1189
|
+
@db.drop_table? :albums_tags, :albums_vocalists, :vocalists_instruments, :vocalists_hits, :hits, :instruments, :vocalists, :tags, :albums, :artists
|
1190
|
+
[:Artist, :Album, :Tag, :Vocalist, :Instrument, :Hit].each{|s| Object.send(:remove_const, s)}
|
1118
1191
|
end
|
1119
1192
|
|
1120
1193
|
specify "should return correct associated pks for one_to_many associations" do
|
@@ -1125,6 +1198,36 @@ describe "AssociationPks plugin" do
|
|
1125
1198
|
Album.order(:id).all.map{|a| a.tag_pks.sort}.should == [[@t1, @t2, @t3], [@t2], []]
|
1126
1199
|
end
|
1127
1200
|
|
1201
|
+
specify "should return correct associated right-side cpks for one_to_many associations" do
|
1202
|
+
Album.one_to_many :vocalists, :order=>:first
|
1203
|
+
Album.order(:id).all.map{|a| a.vocalist_pks.sort}.should == [[@v1, @v2, @v3], [], []]
|
1204
|
+
end
|
1205
|
+
|
1206
|
+
specify "should return correct associated right-side cpks for many_to_many associations" do
|
1207
|
+
Album.many_to_many :vocalists, :join_table=>:albums_vocalists, :right_key=>[:first, :last], :order=>:first
|
1208
|
+
Album.order(:id).all.map{|a| a.vocalist_pks.sort}.should == [[@v1, @v2, @v3], [@v2], []]
|
1209
|
+
end
|
1210
|
+
|
1211
|
+
specify "should return correct associated pks for left-side cpks for one_to_many associations" do
|
1212
|
+
Vocalist.one_to_many :instruments, :key=>[:first, :last], :order=>:id
|
1213
|
+
Vocalist.order(:first, :last).all.map{|a| a.instrument_pks.sort}.should == [[@i1, @i2, @i3], [], []]
|
1214
|
+
end
|
1215
|
+
|
1216
|
+
specify "should return correct associated pks for left-side cpks for many_to_many associations" do
|
1217
|
+
Vocalist.many_to_many :instruments, :join_table=>:vocalists_instruments, :left_key=>[:first, :last], :order=>:id
|
1218
|
+
Vocalist.order(:first, :last).all.map{|a| a.instrument_pks.sort}.should == [[@i1, @i2, @i3], [@i2], []]
|
1219
|
+
end
|
1220
|
+
|
1221
|
+
specify "should return correct associated right-side cpks for left-side cpks for one_to_many associations" do
|
1222
|
+
Vocalist.one_to_many :hits, :key=>[:first, :last], :order=>:week
|
1223
|
+
Vocalist.order(:first, :last).all.map{|a| a.hit_pks.sort}.should == [[@h1, @h2, @h3], [], []]
|
1224
|
+
end
|
1225
|
+
|
1226
|
+
specify "should return correct associated right-side cpks for left-side cpks for many_to_many associations" do
|
1227
|
+
Vocalist.many_to_many :hits, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week], :order=>:week
|
1228
|
+
Vocalist.order(:first, :last).all.map{|a| a.hit_pks.sort}.should == [[@h1, @h2, @h3], [@h2], []]
|
1229
|
+
end
|
1230
|
+
|
1128
1231
|
specify "should set associated pks correctly for a one_to_many association" do
|
1129
1232
|
Artist.use_transactions = true
|
1130
1233
|
Album.order(:id).select_map(:artist_id).should == [@ar1, @ar1, @ar1]
|
@@ -1162,8 +1265,130 @@ describe "AssociationPks plugin" do
|
|
1162
1265
|
Album[@al3].tag_pks = []
|
1163
1266
|
@db[:albums_tags].filter(:album_id=>@al1).select_order_map(:tag_id).should == []
|
1164
1267
|
end
|
1165
|
-
end
|
1166
1268
|
|
1269
|
+
specify "should set associated right-side cpks correctly for a one_to_many association" do
|
1270
|
+
Album.use_transactions = true
|
1271
|
+
Album.one_to_many :vocalists, :order=>:first
|
1272
|
+
Album.order(:id).all.map{|a| a.vocalist_pks.sort}.should == [[@v1, @v2, @v3], [], []]
|
1273
|
+
|
1274
|
+
Album[@al2].vocalist_pks = [@v1, @v3]
|
1275
|
+
Album[@al1].vocalist_pks.should == [@v2]
|
1276
|
+
Vocalist.order(:first, :last).select_map(:album_id).should == [@al2, @al1, @al2]
|
1277
|
+
|
1278
|
+
Album[@al1].vocalist_pks = [@v1]
|
1279
|
+
Album[@al2].vocalist_pks.should == [@v3]
|
1280
|
+
Vocalist.order(:first, :last).select_map(:album_id).should == [@al1, nil, @al2]
|
1281
|
+
|
1282
|
+
Album[@al1].vocalist_pks = [@v1, @v2]
|
1283
|
+
Album[@al2].vocalist_pks.should == [@v3]
|
1284
|
+
Vocalist.order(:first, :last).select_map(:album_id).should == [@al1, @al1, @al2]
|
1285
|
+
end
|
1286
|
+
|
1287
|
+
specify "should set associated right-side cpks correctly for a many_to_many association" do
|
1288
|
+
Album.use_transactions = true
|
1289
|
+
Album.many_to_many :vocalists, :join_table=>:albums_vocalists, :right_key=>[:first, :last], :order=>:first
|
1290
|
+
|
1291
|
+
@db[:albums_vocalists].filter(:album_id=>@al1).select_order_map([:first, :last]).should == [@v1, @v2, @v3]
|
1292
|
+
Album[@al1].vocalist_pks = [@v1, @v3]
|
1293
|
+
@db[:albums_vocalists].filter(:album_id=>@al1).select_order_map([:first, :last]).should == [@v1, @v3]
|
1294
|
+
Album[@al1].vocalist_pks = []
|
1295
|
+
@db[:albums_vocalists].filter(:album_id=>@al1).select_order_map([:first, :last]).should == []
|
1296
|
+
|
1297
|
+
@db[:albums_vocalists].filter(:album_id=>@al2).select_order_map([:first, :last]).should == [@v2]
|
1298
|
+
Album[@al2].vocalist_pks = [@v1, @v2]
|
1299
|
+
@db[:albums_vocalists].filter(:album_id=>@al2).select_order_map([:first, :last]).should == [@v1, @v2]
|
1300
|
+
Album[@al2].vocalist_pks = []
|
1301
|
+
@db[:albums_vocalists].filter(:album_id=>@al1).select_order_map([:first, :last]).should == []
|
1302
|
+
|
1303
|
+
@db[:albums_vocalists].filter(:album_id=>@al3).select_order_map([:first, :last]).should == []
|
1304
|
+
Album[@al3].vocalist_pks = [@v1, @v3]
|
1305
|
+
@db[:albums_vocalists].filter(:album_id=>@al3).select_order_map([:first, :last]).should == [@v1, @v3]
|
1306
|
+
Album[@al3].vocalist_pks = []
|
1307
|
+
@db[:albums_vocalists].filter(:album_id=>@al1).select_order_map([:first, :last]).should == []
|
1308
|
+
end
|
1309
|
+
|
1310
|
+
specify "should set associated pks correctly with left-side cpks for a one_to_many association" do
|
1311
|
+
Vocalist.use_transactions = true
|
1312
|
+
Vocalist.one_to_many :instruments, :key=>[:first, :last], :order=>:id
|
1313
|
+
Vocalist.order(:first, :last).all.map{|a| a.instrument_pks.sort}.should == [[@i1, @i2, @i3], [], []]
|
1314
|
+
|
1315
|
+
Vocalist[@v2].instrument_pks = [@i1, @i3]
|
1316
|
+
Vocalist[@v1].instrument_pks.should == [@i2]
|
1317
|
+
Instrument.order(:id).select_map([:first, :last]).should == [@v2, @v1, @v2]
|
1318
|
+
|
1319
|
+
Vocalist[@v1].instrument_pks = [@i1]
|
1320
|
+
Vocalist[@v2].instrument_pks.should == [@i3]
|
1321
|
+
Instrument.order(:id).select_map([:first, :last]).should == [@v1, [nil, nil], @v2]
|
1322
|
+
|
1323
|
+
Vocalist[@v1].instrument_pks = [@i1, @i2]
|
1324
|
+
Vocalist[@v2].instrument_pks.should == [@i3]
|
1325
|
+
Instrument.order(:id).select_map([:first, :last]).should == [@v1, @v1, @v2]
|
1326
|
+
end
|
1327
|
+
|
1328
|
+
specify "should set associated pks correctly with left-side cpks for a many_to_many association" do
|
1329
|
+
Vocalist.use_transactions = true
|
1330
|
+
Vocalist.many_to_many :instruments, :join_table=>:vocalists_instruments, :left_key=>[:first, :last], :order=>:id
|
1331
|
+
|
1332
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v1]).select_order_map(:instrument_id).should == [@i1, @i2, @i3]
|
1333
|
+
Vocalist[@v1].instrument_pks = [@i1, @i3]
|
1334
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v1]).select_order_map(:instrument_id).should == [@i1, @i3]
|
1335
|
+
Vocalist[@v1].instrument_pks = []
|
1336
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v1]).select_order_map(:instrument_id).should == []
|
1337
|
+
|
1338
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v2]).select_order_map(:instrument_id).should == [@i2]
|
1339
|
+
Vocalist[@v2].instrument_pks = [@i1, @i2]
|
1340
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v2]).select_order_map(:instrument_id).should == [@i1, @i2]
|
1341
|
+
Vocalist[@v2].instrument_pks = []
|
1342
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v1]).select_order_map(:instrument_id).should == []
|
1343
|
+
|
1344
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v3]).select_order_map(:instrument_id).should == []
|
1345
|
+
Vocalist[@v3].instrument_pks = [@i1, @i3]
|
1346
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v3]).select_order_map(:instrument_id).should == [@i1, @i3]
|
1347
|
+
Vocalist[@v3].instrument_pks = []
|
1348
|
+
@db[:vocalists_instruments].filter([:first, :last]=>[@v1]).select_order_map(:instrument_id).should == []
|
1349
|
+
end
|
1350
|
+
|
1351
|
+
specify "should set associated right-side cpks correctly with left-side cpks for a one_to_many association" do
|
1352
|
+
Vocalist.use_transactions = true
|
1353
|
+
Vocalist.one_to_many :hits, :key=>[:first, :last], :order=>:week
|
1354
|
+
Vocalist.order(:first, :last).all.map{|a| a.hit_pks.sort}.should == [[@h1, @h2, @h3], [], []]
|
1355
|
+
|
1356
|
+
Vocalist[@v2].hit_pks = [@h1, @h3]
|
1357
|
+
Vocalist[@v1].hit_pks.should == [@h2]
|
1358
|
+
Hit.order(:year, :week).select_map([:first, :last]).should == [@v2, @v1, @v2]
|
1359
|
+
|
1360
|
+
Vocalist[@v1].hit_pks = [@h1]
|
1361
|
+
Vocalist[@v2].hit_pks.should == [@h3]
|
1362
|
+
Hit.order(:year, :week).select_map([:first, :last]).should == [@v1, [nil, nil], @v2]
|
1363
|
+
|
1364
|
+
Vocalist[@v1].hit_pks = [@h1, @h2]
|
1365
|
+
Vocalist[@v2].hit_pks.should == [@h3]
|
1366
|
+
Hit.order(:year, :week).select_map([:first, :last]).should == [@v1, @v1, @v2]
|
1367
|
+
end
|
1368
|
+
|
1369
|
+
specify "should set associated right-side cpks correctly with left-side cpks for a many_to_many association" do
|
1370
|
+
Vocalist.use_transactions = true
|
1371
|
+
Vocalist.many_to_many :hits, :join_table=>:vocalists_hits, :left_key=>[:first, :last], :right_key=>[:year, :week], :order=>:week
|
1372
|
+
|
1373
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v1]).select_order_map([:year, :week]).should == [@h1, @h2, @h3]
|
1374
|
+
Vocalist[@v1].hit_pks = [@h1, @h3]
|
1375
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v1]).select_order_map([:year, :week]).should == [@h1, @h3]
|
1376
|
+
Vocalist[@v1].hit_pks = []
|
1377
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v1]).select_order_map([:year, :week]).should == []
|
1378
|
+
|
1379
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v2]).select_order_map([:year, :week]).should == [@h2]
|
1380
|
+
Vocalist[@v2].hit_pks = [@h1, @h2]
|
1381
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v2]).select_order_map([:year, :week]).should == [@h1, @h2]
|
1382
|
+
Vocalist[@v2].hit_pks = []
|
1383
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v1]).select_order_map([:year, :week]).should == []
|
1384
|
+
|
1385
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v3]).select_order_map([:year, :week]).should == []
|
1386
|
+
Vocalist[@v3].hit_pks = [@h1, @h3]
|
1387
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v3]).select_order_map([:year, :week]).should == [@h1, @h3]
|
1388
|
+
Vocalist[@v3].hit_pks = []
|
1389
|
+
@db[:vocalists_hits].filter([:first, :last]=>[@v1]).select_order_map([:year, :week]).should == []
|
1390
|
+
end
|
1391
|
+
end
|
1167
1392
|
|
1168
1393
|
describe "List plugin without a scope" do
|
1169
1394
|
before(:all) do
|
@@ -420,18 +420,14 @@ describe "Database schema modifiers" do
|
|
420
420
|
end
|
421
421
|
|
422
422
|
specify "should rename columns when the table is referenced by a foreign key" do
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
@db[:itemsfk].select_order_map([:id, :b]).should == [[1, 10], [2, 20]]
|
432
|
-
ensure
|
433
|
-
@db.drop_table(:items, :itemsfk)
|
434
|
-
end
|
423
|
+
@db.create_table!(:items2){primary_key :id; Integer :a}
|
424
|
+
@db.create_table!(:items){Integer :id, :primary_key=>true; foreign_key :items_id, :items2}
|
425
|
+
@db[:items2].insert(:a=>10)
|
426
|
+
@ds.insert(:id=>1)
|
427
|
+
@db.alter_table(:items2){rename_column :a, :b}
|
428
|
+
@db[:items2].insert(:b=>20)
|
429
|
+
@ds.insert(:id=>2)
|
430
|
+
@db[:items2].select_order_map([:id, :b]).should == [[1, 10], [2, 20]]
|
435
431
|
end
|
436
432
|
|
437
433
|
cspecify "should set column NULL/NOT NULL correctly", [:jdbc, :db2], [:db2] do
|
@@ -86,7 +86,7 @@ else
|
|
86
86
|
INTEGRATION_DB = Sequel.sqlite
|
87
87
|
end
|
88
88
|
|
89
|
-
if INTEGRATION_DB.adapter_scheme == :ibmdb
|
89
|
+
if INTEGRATION_DB.adapter_scheme == :ibmdb || (INTEGRATION_DB.adapter_scheme == :ado && INTEGRATION_DB.database_type == :access)
|
90
90
|
def INTEGRATION_DB.drop_table(*tables)
|
91
91
|
super
|
92
92
|
rescue Sequel::DatabaseError
|
@@ -60,6 +60,12 @@ describe "Supported types" do
|
|
60
60
|
ds.all.should == [{:name=>'Test User'}]
|
61
61
|
end
|
62
62
|
|
63
|
+
specify "should support generic text type" do
|
64
|
+
ds = create_items_table_with_column(:name, String, :text=>true)
|
65
|
+
ds.insert(:name => 'Test User'*100)
|
66
|
+
ds.all.should == [{:name=>'Test User'*100}]
|
67
|
+
end
|
68
|
+
|
63
69
|
cspecify "should support generic date type", [:do, :sqlite], [:jdbc, :sqlite], :mssql, :oracle do
|
64
70
|
ds = create_items_table_with_column(:dat, Date)
|
65
71
|
d = Date.today
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.40.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-26 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: The Database Toolkit for Ruby
|
15
15
|
email: code@jeremyevans.net
|
@@ -101,6 +101,7 @@ extra_rdoc_files:
|
|
101
101
|
- doc/release_notes/3.37.0.txt
|
102
102
|
- doc/release_notes/3.38.0.txt
|
103
103
|
- doc/release_notes/3.39.0.txt
|
104
|
+
- doc/release_notes/3.40.0.txt
|
104
105
|
files:
|
105
106
|
- MIT-LICENSE
|
106
107
|
- CHANGELOG
|
@@ -177,6 +178,7 @@ files:
|
|
177
178
|
- doc/release_notes/3.37.0.txt
|
178
179
|
- doc/release_notes/3.38.0.txt
|
179
180
|
- doc/release_notes/3.39.0.txt
|
181
|
+
- doc/release_notes/3.40.0.txt
|
180
182
|
- doc/sharding.rdoc
|
181
183
|
- doc/sql.rdoc
|
182
184
|
- doc/validations.rdoc
|
@@ -371,6 +373,7 @@ files:
|
|
371
373
|
- lib/sequel.rb
|
372
374
|
- lib/sequel/adapters/ado.rb
|
373
375
|
- lib/sequel/adapters/ado/mssql.rb
|
376
|
+
- lib/sequel/adapters/ado/access.rb
|
374
377
|
- lib/sequel/adapters/amalgalite.rb
|
375
378
|
- lib/sequel/adapters/db2.rb
|
376
379
|
- lib/sequel/adapters/dbi.rb
|
@@ -397,6 +400,7 @@ files:
|
|
397
400
|
- lib/sequel/adapters/jdbc/hsqldb.rb
|
398
401
|
- lib/sequel/adapters/jdbc/derby.rb
|
399
402
|
- lib/sequel/adapters/jdbc/progress.rb
|
403
|
+
- lib/sequel/adapters/jdbc/cubrid.rb
|
400
404
|
- lib/sequel/adapters/mysql.rb
|
401
405
|
- lib/sequel/adapters/odbc.rb
|
402
406
|
- lib/sequel/adapters/odbc/mssql.rb
|
@@ -414,10 +418,12 @@ files:
|
|
414
418
|
- lib/sequel/adapters/shared/mysql_prepared_statements.rb
|
415
419
|
- lib/sequel/adapters/shared/db2.rb
|
416
420
|
- lib/sequel/adapters/shared/firebird.rb
|
421
|
+
- lib/sequel/adapters/shared/cubrid.rb
|
417
422
|
- lib/sequel/adapters/sqlite.rb
|
418
423
|
- lib/sequel/adapters/utils/stored_procedures.rb
|
419
424
|
- lib/sequel/adapters/utils/emulate_offset_with_row_number.rb
|
420
425
|
- lib/sequel/adapters/utils/pg_types.rb
|
426
|
+
- lib/sequel/adapters/utils/split_alter_table.rb
|
421
427
|
- lib/sequel/adapters/mysql2.rb
|
422
428
|
- lib/sequel/adapters/swift.rb
|
423
429
|
- lib/sequel/adapters/swift/mysql.rb
|
@@ -426,6 +432,7 @@ files:
|
|
426
432
|
- lib/sequel/adapters/tinytds.rb
|
427
433
|
- lib/sequel/adapters/ibmdb.rb
|
428
434
|
- lib/sequel/adapters/mock.rb
|
435
|
+
- lib/sequel/adapters/cubrid.rb
|
429
436
|
- lib/sequel/connection_pool.rb
|
430
437
|
- lib/sequel/connection_pool/sharded_single.rb
|
431
438
|
- lib/sequel/connection_pool/sharded_threaded.rb
|