sequel 4.39.0 → 4.40.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +34 -0
  3. data/README.rdoc +8 -4
  4. data/doc/active_record.rdoc +1 -1
  5. data/doc/advanced_associations.rdoc +7 -7
  6. data/doc/association_basics.rdoc +7 -7
  7. data/doc/cheat_sheet.rdoc +5 -3
  8. data/doc/core_extensions.rdoc +3 -3
  9. data/doc/dataset_filtering.rdoc +1 -1
  10. data/doc/object_model.rdoc +16 -7
  11. data/doc/postgresql.rdoc +3 -3
  12. data/doc/querying.rdoc +3 -3
  13. data/doc/release_notes/4.40.0.txt +179 -0
  14. data/doc/security.rdoc +2 -1
  15. data/doc/sql.rdoc +34 -18
  16. data/doc/testing.rdoc +1 -0
  17. data/doc/virtual_rows.rdoc +11 -2
  18. data/lib/sequel/adapters/jdbc/derby.rb +7 -1
  19. data/lib/sequel/adapters/jdbc/h2.rb +15 -1
  20. data/lib/sequel/adapters/oracle.rb +9 -5
  21. data/lib/sequel/adapters/postgres.rb +0 -1
  22. data/lib/sequel/adapters/shared/cubrid.rb +11 -11
  23. data/lib/sequel/adapters/shared/db2.rb +4 -8
  24. data/lib/sequel/adapters/shared/mssql.rb +41 -28
  25. data/lib/sequel/adapters/shared/mysql.rb +9 -6
  26. data/lib/sequel/adapters/shared/oracle.rb +16 -5
  27. data/lib/sequel/adapters/shared/postgres.rb +84 -45
  28. data/lib/sequel/adapters/shared/sqlanywhere.rb +29 -15
  29. data/lib/sequel/adapters/shared/sqlite.rb +6 -6
  30. data/lib/sequel/core.rb +61 -10
  31. data/lib/sequel/database/connecting.rb +2 -1
  32. data/lib/sequel/database/features.rb +7 -0
  33. data/lib/sequel/database/query.rb +1 -1
  34. data/lib/sequel/database/schema_methods.rb +30 -3
  35. data/lib/sequel/database/transactions.rb +4 -2
  36. data/lib/sequel/dataset/actions.rb +1 -1
  37. data/lib/sequel/dataset/graph.rb +6 -1
  38. data/lib/sequel/dataset/query.rb +14 -7
  39. data/lib/sequel/dataset/sql.rb +2 -2
  40. data/lib/sequel/extensions/core_extensions.rb +2 -1
  41. data/lib/sequel/extensions/pg_row.rb +2 -2
  42. data/lib/sequel/extensions/s.rb +57 -0
  43. data/lib/sequel/extensions/set_overrides.rb +5 -1
  44. data/lib/sequel/extensions/sql_expr.rb +1 -0
  45. data/lib/sequel/extensions/symbol_aref.rb +71 -0
  46. data/lib/sequel/extensions/symbol_aref_refinement.rb +41 -0
  47. data/lib/sequel/extensions/symbol_as.rb +23 -0
  48. data/lib/sequel/extensions/symbol_as_refinement.rb +35 -0
  49. data/lib/sequel/model/base.rb +3 -3
  50. data/lib/sequel/plugins/class_table_inheritance.rb +14 -3
  51. data/lib/sequel/plugins/column_select.rb +4 -2
  52. data/lib/sequel/plugins/dataset_associations.rb +12 -4
  53. data/lib/sequel/plugins/insert_returning_select.rb +1 -1
  54. data/lib/sequel/plugins/mssql_optimistic_locking.rb +1 -1
  55. data/lib/sequel/plugins/prepared_statements.rb +1 -0
  56. data/lib/sequel/sql.rb +40 -8
  57. data/lib/sequel/version.rb +1 -1
  58. data/spec/adapters/firebird_spec.rb +3 -3
  59. data/spec/adapters/mssql_spec.rb +40 -40
  60. data/spec/adapters/mysql_spec.rb +5 -5
  61. data/spec/adapters/oracle_spec.rb +4 -4
  62. data/spec/adapters/postgres_spec.rb +135 -124
  63. data/spec/adapters/spec_helper.rb +1 -0
  64. data/spec/adapters/sqlite_spec.rb +6 -6
  65. data/spec/core/dataset_spec.rb +2 -2
  66. data/spec/core/expression_filters_spec.rb +43 -2
  67. data/spec/core/schema_spec.rb +35 -1
  68. data/spec/core_extensions_spec.rb +27 -0
  69. data/spec/extensions/class_table_inheritance_spec.rb +8 -0
  70. data/spec/extensions/column_select_spec.rb +8 -0
  71. data/spec/extensions/core_refinements_spec.rb +1 -1
  72. data/spec/extensions/dataset_associations_spec.rb +9 -0
  73. data/spec/extensions/insert_returning_select_spec.rb +20 -0
  74. data/spec/extensions/prepared_statements_spec.rb +7 -0
  75. data/spec/extensions/s_spec.rb +60 -0
  76. data/spec/extensions/symbol_aref_refinement_spec.rb +28 -0
  77. data/spec/extensions/symbol_as_refinement_spec.rb +21 -0
  78. data/spec/integration/associations_test.rb +62 -57
  79. data/spec/integration/dataset_test.rb +54 -54
  80. data/spec/integration/eager_loader_test.rb +7 -7
  81. data/spec/integration/plugin_test.rb +20 -20
  82. data/spec/integration/prepared_statement_test.rb +1 -1
  83. data/spec/integration/schema_test.rb +21 -0
  84. data/spec/integration/spec_helper.rb +1 -0
  85. metadata +12 -2
@@ -36,7 +36,7 @@ OneToOneEagerGraphLimitStrategies = shared_description do
36
36
  @album.update(:artist => @artist)
37
37
  diff_album = @diff_album.call
38
38
  ar = @pr.call[1]
39
- ds = Artist.order(:artists__name)
39
+ ds = Artist.order(Sequel[:artists][:name])
40
40
  limit_strategy = {:limit_strategy=>@els[:eager_limit_strategy]}
41
41
 
42
42
  a = ds.eager_graph_with_options(:first_album, limit_strategy).all
@@ -105,7 +105,7 @@ OneToManyEagerGraphLimitStrategies = shared_description do
105
105
  middle_album = @middle_album.call
106
106
  diff_album = @diff_album.call
107
107
  ar = @pr.call[1]
108
- ds = Artist.order(:artists__name)
108
+ ds = Artist.order(Sequel[:artists][:name])
109
109
  limit_strategy = {:limit_strategy=>@els[:eager_limit_strategy]}
110
110
 
111
111
  ars = ds.eager_graph_with_options(:first_two_albums, limit_strategy).all
@@ -164,7 +164,7 @@ OneThroughOneEagerGraphLimitStrategies = shared_description do
164
164
  it "should correctly handle offsets when eager graphing one_through_one associations" do
165
165
  tu, tv = @other_tags.call
166
166
  al = @pr.call.first
167
- ds = Album.order(:albums__name)
167
+ ds = Album.order(Sequel[:albums][:name])
168
168
  limit_strategy = {:limit_strategy=>@els[:eager_limit_strategy]}
169
169
 
170
170
  als = ds.eager_graph_with_options(:first_tag, limit_strategy).all
@@ -220,7 +220,7 @@ ManyToManyEagerGraphLimitStrategies = shared_description do
220
220
  tu, tv = @other_tags.call
221
221
  al = @pr.call.first
222
222
  al.add_tag(tu)
223
- ds = Album.order(:albums__name)
223
+ ds = Album.order(Sequel[:albums][:name])
224
224
  limit_strategy = {:limit_strategy=>(@els||{})[:eager_limit_strategy]}
225
225
 
226
226
  als = ds.eager_graph_with_options(:first_two_tags, limit_strategy).all
@@ -287,7 +287,7 @@ ManyThroughManyEagerGraphLimitStrategies = shared_description do
287
287
  al, ar, _ = @pr.call
288
288
  al.update(:artist=>ar)
289
289
  al.add_tag(tu)
290
- ds = Artist.order(:artists__name)
290
+ ds = Artist.order(Sequel[:artists][:name])
291
291
  limit_strategy = {:limit_strategy=>@els[:eager_limit_strategy]}
292
292
 
293
293
  ars = ds.eager_graph_with_options(:first_two_tags, limit_strategy).all
@@ -350,7 +350,7 @@ OneThroughManyEagerGraphLimitStrategies = shared_description do
350
350
  al, ar, _ = @pr.call
351
351
  al.update(:artist=>ar)
352
352
  al.add_tag(tu)
353
- ds = Artist.order(:artists__name)
353
+ ds = Artist.order(Sequel[:artists][:name])
354
354
  limit_strategy = {:limit_strategy=>@els[:eager_limit_strategy]}
355
355
 
356
356
  ars = ds.eager_graph_with_options(:first_tag, limit_strategy).all
@@ -1060,7 +1060,7 @@ FilterByAssociationsOneToOneLimitStrategies = shared_description do
1060
1060
  ds.exclude(:last_album=>@album).all.must_equal [@artist, ar]
1061
1061
  ds.exclude(:last_album=>diff_album).all.must_equal [ar]
1062
1062
 
1063
- Artist.one_to_one :first_album, :clone=>:first_album do |ads| ads.where(:albums__name=>diff_album.name) end
1063
+ Artist.one_to_one :first_album, :clone=>:first_album do |ads| ads.where(Sequel[:albums][:name]=>diff_album.name) end
1064
1064
  ar.add_album(diff_album)
1065
1065
  ds.where(:first_album=>[@album, diff_album]).all.must_equal [ar]
1066
1066
  ds.exclude(:first_album=>[@album, diff_album]).all.must_equal [@artist]
@@ -1086,7 +1086,7 @@ FilterByAssociationsSingularLimitStrategies = shared_description do
1086
1086
  ds.where(ar.pk_hash).second_albums.all.must_equal []
1087
1087
  ds.where(ar.pk_hash).last_albums.all.must_equal []
1088
1088
 
1089
- Artist.one_to_one :first_album, :clone=>:first_album do |ads| ads.where(:albums__name=>diff_album.name) end
1089
+ Artist.one_to_one :first_album, :clone=>:first_album do |ads| ads.where(Sequel[:albums][:name]=>diff_album.name) end
1090
1090
  ar.add_album(diff_album)
1091
1091
  ds.where(@artist.pk_hash).first_albums.all.must_equal []
1092
1092
  ds.where(ar.pk_hash).first_albums.all.must_equal [diff_album]
@@ -1122,8 +1122,8 @@ FilterByAssociationsSingularLimitStrategies = shared_description do
1122
1122
  ds.exclude(:last_tag=>tu).all.must_equal [@album]
1123
1123
  ds.exclude(:last_tag=>tv).all.must_equal [al]
1124
1124
 
1125
- Album.one_through_one :first_tag, :clone=>:first_tag do |ads| ads.where(:tags__name=>tu.name) end
1126
- Album.one_through_one :second_tag, :clone=>:second_tag do |ads| ads.where(:tags__name=>[tu.name, tv.name]) end
1125
+ Album.one_through_one :first_tag, :clone=>:first_tag do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1126
+ Album.one_through_one :second_tag, :clone=>:second_tag do |ads| ads.where(Sequel[:tags][:name]=>[tu.name, tv.name]) end
1127
1127
 
1128
1128
  ds.where(:first_tag=>[@tag, tu]).all.must_equal [@album, al]
1129
1129
  ds.exclude(:first_tag=>[@tag, tu]).all.must_equal []
@@ -1149,8 +1149,8 @@ FilterByAssociationsSingularLimitStrategies = shared_description do
1149
1149
  ds.where(al.pk_hash).second_tags.all.must_equal []
1150
1150
  ds.where(al.pk_hash).last_tags.all.must_equal [tu]
1151
1151
 
1152
- Album.one_through_one :first_tag, :clone=>:first_tag do |ads| ads.where(:tags__name=>tu.name) end
1153
- Album.one_through_one :second_tag, :clone=>:second_tag do |ads| ads.where(:tags__name=>[tu.name, tv.name]) end
1152
+ Album.one_through_one :first_tag, :clone=>:first_tag do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1153
+ Album.one_through_one :second_tag, :clone=>:second_tag do |ads| ads.where(Sequel[:tags][:name]=>[tu.name, tv.name]) end
1154
1154
 
1155
1155
  ds.where(@album.pk_hash).first_tags.all.must_equal [tu]
1156
1156
  ds.where(@album.pk_hash).second_tags.all.must_equal [tv]
@@ -1196,8 +1196,8 @@ FilterByAssociationsSingularLimitStrategies = shared_description do
1196
1196
  ds.exclude(:last_tag=>tu).all.must_equal [@artist]
1197
1197
  ds.exclude(:last_tag=>tv).all.must_equal [ar]
1198
1198
 
1199
- Artist.one_through_many :first_tag, :clone=>:first_tag do |ads| ads.where(:tags__name=>tu.name) end
1200
- Artist.one_through_many :second_tag, :clone=>:second_tag do |ads| ads.where(:tags__name=>[tu.name, tv.name]) end
1199
+ Artist.one_through_many :first_tag, :clone=>:first_tag do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1200
+ Artist.one_through_many :second_tag, :clone=>:second_tag do |ads| ads.where(Sequel[:tags][:name]=>[tu.name, tv.name]) end
1201
1201
 
1202
1202
  ds.where(:first_tag=>[@tag, tu]).all.must_equal [@artist, ar]
1203
1203
  ds.exclude(:first_tag=>[@tag, tu]).all.must_equal []
@@ -1225,8 +1225,8 @@ FilterByAssociationsSingularLimitStrategies = shared_description do
1225
1225
  ds.where(ar.pk_hash).second_tags.all.must_equal []
1226
1226
  ds.where(ar.pk_hash).last_tags.all.must_equal [tu]
1227
1227
 
1228
- Artist.one_through_many :first_tag, :clone=>:first_tag do |ads| ads.where(:tags__name=>tu.name) end
1229
- Artist.one_through_many :second_tag, :clone=>:second_tag do |ads| ads.where(:tags__name=>[tu.name, tv.name]) end
1228
+ Artist.one_through_many :first_tag, :clone=>:first_tag do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1229
+ Artist.one_through_many :second_tag, :clone=>:second_tag do |ads| ads.where(Sequel[:tags][:name]=>[tu.name, tv.name]) end
1230
1230
 
1231
1231
  ds.where(@artist.pk_hash).first_tags.all.must_equal [tu]
1232
1232
  ds.where(@artist.pk_hash).second_tags.all.must_equal [tv]
@@ -1275,7 +1275,7 @@ FilterByAssociationsOneToManyLimitStrategies = shared_description do
1275
1275
  ds.exclude(a=>diff_album).all.must_equal [ar]
1276
1276
  end
1277
1277
 
1278
- Artist.one_to_one :first_two_albums, :clone=>:first_two_albums do |ads| ads.where(:albums__name=>diff_album.name) end
1278
+ Artist.one_to_one :first_two_albums, :clone=>:first_two_albums do |ads| ads.where(Sequel[:albums][:name]=>diff_album.name) end
1279
1279
  ar.add_album(diff_album)
1280
1280
  ds.where(:first_two_albums=>[@album, diff_album]).all.must_equal [ar]
1281
1281
  ds.exclude(:first_two_albums=>[@album, diff_album]).all.must_equal [@artist]
@@ -1306,7 +1306,7 @@ FilterByAssociationsLimitStrategies = shared_description do
1306
1306
  ds.where(ar.pk_hash).not_first_albums.all.must_equal []
1307
1307
  ds.where(ar.pk_hash).last_two_albums.all.must_equal []
1308
1308
 
1309
- Artist.one_to_one :first_two_albums, :clone=>:first_two_albums do |ads| ads.where(:albums__name=>[diff_album.name, middle_album.name]) end
1309
+ Artist.one_to_one :first_two_albums, :clone=>:first_two_albums do |ads| ads.where(Sequel[:albums][:name]=>[diff_album.name, middle_album.name]) end
1310
1310
  ar.add_album(diff_album)
1311
1311
  ds.where(@artist.pk_hash).first_two_albums.all.must_equal [middle_album]
1312
1312
  ds.where(ar.pk_hash).first_two_albums.all.must_equal [diff_album]
@@ -1350,8 +1350,8 @@ FilterByAssociationsLimitStrategies = shared_description do
1350
1350
  ds.exclude(:last_two_tags=>tu).all.must_equal []
1351
1351
  ds.exclude(:last_two_tags=>tv).all.must_equal [al]
1352
1352
 
1353
- Album.many_to_many :first_two_tags, :clone=>:first_two_tags do |ads| ads.where(:tags__name=>tu.name) end
1354
- Album.many_to_many :second_two_tags, :clone=>:second_two_tags do |ads| ads.where(:tags__name=>[tu.name, tv.name]) end
1353
+ Album.many_to_many :first_two_tags, :clone=>:first_two_tags do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1354
+ Album.many_to_many :second_two_tags, :clone=>:second_two_tags do |ads| ads.where(Sequel[:tags][:name]=>[tu.name, tv.name]) end
1355
1355
 
1356
1356
  ds.where(:first_two_tags=>[@tag, tu]).all.must_equal [@album, al]
1357
1357
  ds.exclude(:first_two_tags=>[@tag, tu]).all.must_equal []
@@ -1380,8 +1380,8 @@ FilterByAssociationsLimitStrategies = shared_description do
1380
1380
  ds.where(al.pk_hash).not_first_tags.all.must_equal []
1381
1381
  ds.where(al.pk_hash).last_two_tags.all.must_equal [tu]
1382
1382
 
1383
- Album.many_to_many :first_two_tags, :clone=>:first_two_tags do |ads| ads.where(:tags__name=>tu.name) end
1384
- Album.many_to_many :second_two_tags, :clone=>:second_two_tags do |ads| ads.where(:tags__name=>[tu.name, tv.name]) end
1383
+ Album.many_to_many :first_two_tags, :clone=>:first_two_tags do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1384
+ Album.many_to_many :second_two_tags, :clone=>:second_two_tags do |ads| ads.where(Sequel[:tags][:name]=>[tu.name, tv.name]) end
1385
1385
 
1386
1386
  ds.where(@album.pk_hash).first_two_tags.all.must_equal [tu]
1387
1387
  ds.where(@album.pk_hash).second_two_tags.all.must_equal [tv]
@@ -1435,8 +1435,8 @@ FilterByAssociationsLimitStrategies = shared_description do
1435
1435
  ds.exclude(:last_two_tags=>tu).all.must_equal []
1436
1436
  ds.exclude(:last_two_tags=>tv).all.must_equal [ar]
1437
1437
 
1438
- Artist.many_through_many :first_two_tags, :clone=>:first_tag do |ads| ads.where(:tags__name=>tu.name) end
1439
- Artist.many_through_many :second_two_tags, :clone=>:first_tag do |ads| ads.where(:tags__name=>[tv.name, tu.name]) end
1438
+ Artist.many_through_many :first_two_tags, :clone=>:first_tag do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1439
+ Artist.many_through_many :second_two_tags, :clone=>:first_tag do |ads| ads.where(Sequel[:tags][:name]=>[tv.name, tu.name]) end
1440
1440
 
1441
1441
  ds.where(:first_two_tags=>[@tag, tu]).all.must_equal [@artist, ar]
1442
1442
  ds.exclude(:first_two_tags=>[@tag, tu]).all.must_equal []
@@ -1467,8 +1467,8 @@ FilterByAssociationsLimitStrategies = shared_description do
1467
1467
  ds.where(ar.pk_hash).not_first_tags.all.must_equal []
1468
1468
  ds.where(ar.pk_hash).last_two_tags.all.must_equal [tu]
1469
1469
 
1470
- Artist.many_through_many :first_two_tags, :clone=>:first_two_tags do |ads| ads.where(:tags__name=>tu.name) end
1471
- Artist.many_through_many :second_two_tags, :clone=>:second_two_tags do |ads| ads.where(:tags__name=>[tu.name, tv.name]) end
1470
+ Artist.many_through_many :first_two_tags, :clone=>:first_two_tags do |ads| ads.where(Sequel[:tags][:name]=>tu.name) end
1471
+ Artist.many_through_many :second_two_tags, :clone=>:second_two_tags do |ads| ads.where(Sequel[:tags][:name]=>[tu.name, tv.name]) end
1472
1472
 
1473
1473
  ds.where(@artist.pk_hash).first_two_tags.all.must_equal [tu]
1474
1474
  ds.where(@artist.pk_hash).second_two_tags.all.must_equal [tv]
@@ -1624,6 +1624,7 @@ BasicRegularAndCompositeKeyAssociations = shared_description do
1624
1624
  Album.alias_tags.all.must_equal [@tag]
1625
1625
  Artist.albums.all.must_equal [@album]
1626
1626
  unless @no_many_through_many
1627
+ Album.mthm_tags.all.must_equal [@tag]
1627
1628
  Album.first_tags.all.must_equal [@tag]
1628
1629
  Artist.tags.all.must_equal [@tag]
1629
1630
  Artist.first_tags.all.must_equal [@tag]
@@ -1848,28 +1849,30 @@ describe "Sequel::Model Simple Associations" do
1848
1849
  one_to_one :first_a_album, :clone=>:a_albums
1849
1850
  plugin :many_through_many
1850
1851
  many_through_many :tags, [[:albums, :artist_id, :id], [:albums_tags, :album_id, :tag_id]]
1851
- many_through_many :first_two_tags, :clone=>:tags, :order=>:tags__name, :limit=>2, :graph_order=>:name
1852
- many_through_many :second_two_tags, :clone=>:tags, :order=>:tags__name, :limit=>[2, 1], :graph_order=>:name
1853
- many_through_many :not_first_tags, :clone=>:tags, :order=>:tags__name, :limit=>[nil, 1], :graph_order=>:name
1854
- many_through_many :last_two_tags, :clone=>:tags, :order=>Sequel.desc(:tags__name), :limit=>2, :graph_order=>Sequel.desc(:name)
1855
- many_through_many :t_tags, :clone=>:tags, :conditions=>{:tags__name=>'T'}
1856
- one_through_many :first_tag, [[:albums, :artist_id, :id], [:albums_tags, :album_id, :tag_id]], :order=>:tags__name, :graph_order=>:name, :class=>:Tag
1852
+ many_through_many :first_two_tags, :clone=>:tags, :order=>Sequel[:tags][:name], :limit=>2, :graph_order=>:name
1853
+ many_through_many :second_two_tags, :clone=>:tags, :order=>Sequel[:tags][:name], :limit=>[2, 1], :graph_order=>:name
1854
+ many_through_many :not_first_tags, :clone=>:tags, :order=>Sequel[:tags][:name], :limit=>[nil, 1], :graph_order=>:name
1855
+ many_through_many :last_two_tags, :clone=>:tags, :order=>Sequel.desc(Sequel[:tags][:name]), :limit=>2, :graph_order=>Sequel.desc(:name)
1856
+ many_through_many :t_tags, :clone=>:tags, :conditions=>{Sequel[:tags][:name]=>'T'}
1857
+ one_through_many :first_tag, [[:albums, :artist_id, :id], [:albums_tags, :album_id, :tag_id]], :order=>Sequel[:tags][:name], :graph_order=>:name, :class=>:Tag
1857
1858
  one_through_many :second_tag, :clone=>:first_tag, :limit=>[nil, 1]
1858
- one_through_many :last_tag, :clone=>:first_tag, :order=>Sequel.desc(:tags__name), :graph_order=>Sequel.desc(:name)
1859
- one_through_many :t_tag, :clone=>:first_tag, :conditions=>{:tags__name=>'T'}
1859
+ one_through_many :last_tag, :clone=>:first_tag, :order=>Sequel.desc(Sequel[:tags][:name]), :graph_order=>Sequel.desc(:name)
1860
+ one_through_many :t_tag, :clone=>:first_tag, :conditions=>{Sequel[:tags][:name]=>'T'}
1860
1861
  end
1861
1862
  class ::Album < Sequel::Model(@db)
1862
1863
  plugin :dataset_associations
1863
1864
  many_to_one :artist, :reciprocal=>nil
1864
1865
  many_to_one :a_artist, :clone=>:artist, :conditions=>{:name=>'Ar'}, :key=>:artist_id
1865
1866
  many_to_many :tags, :right_key=>:tag_id
1866
- many_to_many :alias_tags, :clone=>:tags, :join_table=>:albums_tags___at
1867
+ plugin :many_through_many
1868
+ many_through_many :mthm_tags, [[:albums_tags, :album_id, :tag_id]], :class=>:Tag
1869
+ many_to_many :alias_tags, :clone=>:tags, :join_table=>Sequel[:albums_tags].as(:at)
1867
1870
  many_to_many :first_two_tags, :clone=>:tags, :order=>:name, :limit=>2
1868
1871
  many_to_many :second_two_tags, :clone=>:tags, :order=>:name, :limit=>[2, 1]
1869
1872
  many_to_many :not_first_tags, :clone=>:tags, :order=>:name, :limit=>[nil, 1]
1870
1873
  many_to_many :last_two_tags, :clone=>:tags, :order=>Sequel.desc(:name), :limit=>2
1871
1874
  many_to_many :t_tags, :clone=>:tags, :conditions=>{:name=>'T'}
1872
- many_to_many :alias_t_tags, :clone=>:t_tags, :join_table=>:albums_tags___at
1875
+ many_to_many :alias_t_tags, :clone=>:t_tags, :join_table=>Sequel[:albums_tags].as(:at)
1873
1876
  one_through_one :first_tag, :clone=>:tags, :order=>:name
1874
1877
  one_through_one :second_tag, :clone=>:first_tag, :limit=>[nil, 1]
1875
1878
  one_through_one :last_tag, :clone=>:tags, :order=>Sequel.desc(:name)
@@ -1970,9 +1973,9 @@ describe "Sequel::Model Simple Associations" do
1970
1973
  @album.update(:artist => @artist)
1971
1974
  @album.add_tag(@tag)
1972
1975
 
1973
- Artist.set_dataset(:artists___ar)
1974
- Album.set_dataset(:albums___a)
1975
- Tag.set_dataset(:tags___t)
1976
+ Artist.set_dataset(Sequel[:artists].as(:ar))
1977
+ Album.set_dataset(Sequel[:albums].as(:a))
1978
+ Tag.set_dataset(Sequel[:tags].as(:t))
1976
1979
  Artist.one_to_many :balbums, :class=>Album, :key=>:artist_id, :reciprocal=>nil
1977
1980
  Album.many_to_many :btags, :class=>Tag, :join_table=>:albums_tags, :right_key=>:tag_id
1978
1981
  Album.many_to_one :bartist, :class=>Artist, :key=>:artist_id
@@ -2069,17 +2072,17 @@ describe "Sequel::Model Simple Associations" do
2069
2072
  end
2070
2073
 
2071
2074
  it "should handle dataset associations with :dataset_associations_join options" do
2072
- Album.many_to_many :tags, :right_key=>:tag_id, :select=>[Sequel.expr(:tags).*, :albums_tags__tag_id___atid], :dataset_associations_join=>true
2073
- Artist.many_through_many :tags, [[:albums, :artist_id, :id], [:albums_tags, :album_id, :tag_id]], :select=>[Sequel.expr(:tags).*, :albums_tags__tag_id___atid, :albums__artist_id___aid], :dataset_associations_join=>true
2075
+ Album.many_to_many :tags, :right_key=>:tag_id, :select=>[Sequel.expr(:tags).*, Sequel[:albums_tags][:tag_id].as(:atid)], :dataset_associations_join=>true
2076
+ Artist.many_through_many :tags, [[:albums, :artist_id, :id], [:albums_tags, :album_id, :tag_id]], :select=>[Sequel.expr(:tags).*, Sequel[:albums_tags][:tag_id].as(:atid), Sequel[:albums][:artist_id].as(:aid)], :dataset_associations_join=>true
2074
2077
 
2075
- Album.tags.order(:tags__name).first.must_equal nil
2076
- Artist.tags.order(:tags__name).first.must_equal nil
2078
+ Album.tags.order(Sequel[:tags][:name]).first.must_equal nil
2079
+ Artist.tags.order(Sequel[:tags][:name]).first.must_equal nil
2077
2080
 
2078
2081
  @album.add_tag(@tag)
2079
2082
  @artist.add_album(@album)
2080
2083
 
2081
- Album.tags.order(:tags__name).first.must_equal Tag.load(:id=>@tag.id, :name=>"T", :atid=>@tag.id)
2082
- Artist.tags.order(:tags__name).first.must_equal Tag.load(:id=>@tag.id, :name=>"T", :atid=>@tag.id, :aid=>@artist.id)
2084
+ Album.tags.order(Sequel[:tags][:name]).first.must_equal Tag.load(:id=>@tag.id, :name=>"T", :atid=>@tag.id)
2085
+ Artist.tags.order(Sequel[:tags][:name]).first.must_equal Tag.load(:id=>@tag.id, :name=>"T", :atid=>@tag.id, :aid=>@artist.id)
2083
2086
  end
2084
2087
  end
2085
2088
 
@@ -2135,15 +2138,15 @@ describe "Sequel::Model Composite Key Associations" do
2135
2138
  one_to_one :first_a_album, :clone=>:a_albums
2136
2139
  plugin :many_through_many
2137
2140
  many_through_many :tags, [[:albums, [:artist_id1, :artist_id2], [:id1, :id2]], [:albums_tags, [:album_id1, :album_id2], [:tag_id1, :tag_id2]]]
2138
- many_through_many :first_two_tags, :clone=>:tags, :order=>:tags__name, :limit=>2, :graph_order=>:name
2139
- many_through_many :second_two_tags, :clone=>:tags, :order=>:tags__name, :limit=>[2, 1], :graph_order=>:name
2140
- many_through_many :not_first_tags, :clone=>:tags, :order=>:tags__name, :limit=>[nil, 1], :graph_order=>:name
2141
- many_through_many :last_two_tags, :clone=>:tags, :order=>Sequel.desc(:tags__name), :limit=>2, :graph_order=>Sequel.desc(:name)
2142
- many_through_many :t_tags, :clone=>:tags do |ds| ds.where(:tags__name=>'T') end
2143
- one_through_many :first_tag, [[:albums, [:artist_id1, :artist_id2], [:id1, :id2]], [:albums_tags, [:album_id1, :album_id2], [:tag_id1, :tag_id2]]], :order=>:tags__name, :graph_order=>:name, :class=>:Tag
2141
+ many_through_many :first_two_tags, :clone=>:tags, :order=>Sequel[:tags][:name], :limit=>2, :graph_order=>:name
2142
+ many_through_many :second_two_tags, :clone=>:tags, :order=>Sequel[:tags][:name], :limit=>[2, 1], :graph_order=>:name
2143
+ many_through_many :not_first_tags, :clone=>:tags, :order=>Sequel[:tags][:name], :limit=>[nil, 1], :graph_order=>:name
2144
+ many_through_many :last_two_tags, :clone=>:tags, :order=>Sequel.desc(Sequel[:tags][:name]), :limit=>2, :graph_order=>Sequel.desc(:name)
2145
+ many_through_many :t_tags, :clone=>:tags do |ds| ds.where(Sequel[:tags][:name]=>'T') end
2146
+ one_through_many :first_tag, [[:albums, [:artist_id1, :artist_id2], [:id1, :id2]], [:albums_tags, [:album_id1, :album_id2], [:tag_id1, :tag_id2]]], :order=>Sequel[:tags][:name], :graph_order=>:name, :class=>:Tag
2144
2147
  one_through_many :second_tag, :clone=>:first_tag, :limit=>[nil, 1]
2145
- one_through_many :last_tag, :clone=>:first_tag, :order=>Sequel.desc(:tags__name), :graph_order=>Sequel.desc(:name)
2146
- one_through_many :t_tag, :clone=>:first_tag do |ds| ds.where(:tags__name=>'T') end
2148
+ one_through_many :last_tag, :clone=>:first_tag, :order=>Sequel.desc(Sequel[:tags][:name]), :graph_order=>Sequel.desc(:name)
2149
+ one_through_many :t_tag, :clone=>:first_tag do |ds| ds.where(Sequel[:tags][:name]=>'T') end
2147
2150
  end
2148
2151
  class ::Album < Sequel::Model(@db)
2149
2152
  plugin :dataset_associations
@@ -2152,13 +2155,15 @@ describe "Sequel::Model Composite Key Associations" do
2152
2155
  many_to_one :artist, :key=>[:artist_id1, :artist_id2], :reciprocal=>nil
2153
2156
  many_to_one(:a_artist, :clone=>:artist){|ds| ds.where(:name=>'Ar')}
2154
2157
  many_to_many :tags, :left_key=>[:album_id1, :album_id2], :right_key=>[:tag_id1, :tag_id2]
2155
- many_to_many :alias_tags, :clone=>:tags, :join_table=>:albums_tags___at
2158
+ plugin :many_through_many
2159
+ many_through_many :mthm_tags, [[:albums_tags, [:album_id1, :album_id2], [:tag_id1, :tag_id2]]], :class=>:Tag
2160
+ many_to_many :alias_tags, :clone=>:tags, :join_table=>Sequel[:albums_tags].as(:at)
2156
2161
  many_to_many :first_two_tags, :clone=>:tags, :order=>:name, :limit=>2
2157
2162
  many_to_many :second_two_tags, :clone=>:tags, :order=>:name, :limit=>[2, 1]
2158
2163
  many_to_many :not_first_tags, :clone=>:tags, :order=>:name, :limit=>[nil, 1]
2159
2164
  many_to_many :last_two_tags, :clone=>:tags, :order=>Sequel.desc(:name), :limit=>2
2160
2165
  many_to_many :t_tags, :clone=>:tags do |ds| ds.where(:name=>'T') end
2161
- many_to_many :alias_t_tags, :clone=>:t_tags, :join_table=>:albums_tags___at
2166
+ many_to_many :alias_t_tags, :clone=>:t_tags, :join_table=>Sequel[:albums_tags].as(:at)
2162
2167
  one_through_one :first_tag, :clone=>:tags, :order=>:name
2163
2168
  one_through_one :second_tag, :clone=>:first_tag, :limit=>[nil, 1]
2164
2169
  one_through_one :last_tag, :clone=>:tags, :order=>Sequel.desc(:name)
@@ -2283,7 +2288,7 @@ describe "Sequel::Model pg_array_to_many" do
2283
2288
  pg_array_to_many :second_two_tags, :clone=>:tags, :order=>:name, :limit=>[2, 1]
2284
2289
  pg_array_to_many :not_first_tags, :clone=>:tags, :order=>:name, :limit=>[nil, 1]
2285
2290
  pg_array_to_many :last_two_tags, :clone=>:tags, :order=>Sequel.desc(:name), :limit=>2
2286
- pg_array_to_many :t_tags, :clone=>:tags do |ds| ds.where(:tags__name=>'T') end
2291
+ pg_array_to_many :t_tags, :clone=>:tags do |ds| ds.where(Sequel[:tags][:name]=>'T') end
2287
2292
  pg_array_to_many :alias_t_tags, :clone=>:t_tags
2288
2293
  end
2289
2294
  class ::Tag < Sequel::Model(@db)
@@ -2364,7 +2369,7 @@ describe "Sequel::Model many_to_pg_array" do
2364
2369
  many_to_pg_array :second_two_tags, :clone=>:tags, :order=>:name, :limit=>[2, 1]
2365
2370
  many_to_pg_array :not_first_tags, :clone=>:tags, :order=>:name, :limit=>[nil, 1]
2366
2371
  many_to_pg_array :last_two_tags, :clone=>:tags, :order=>Sequel.desc(:name), :limit=>2
2367
- many_to_pg_array :t_tags, :clone=>:tags do |ds| ds.where(:tags__name=>'T') end
2372
+ many_to_pg_array :t_tags, :clone=>:tags do |ds| ds.where(Sequel[:tags][:name]=>'T') end
2368
2373
  many_to_pg_array :alias_t_tags, :clone=>:t_tags
2369
2374
  end
2370
2375
  class ::Tag < Sequel::Model(@db)
@@ -56,29 +56,29 @@ describe "Simple Dataset operations" do
56
56
  end
57
57
 
58
58
  it "should join correctly" do
59
- @ds.join(:items___b, :id=>:id).select_all(:items).all.must_equal [{:id=>1, :number=>10}]
59
+ @ds.join(Sequel[:items].as(:b), :id=>:id).select_all(:items).all.must_equal [{:id=>1, :number=>10}]
60
60
  end
61
61
 
62
62
  it "should handle LATERAL subqueries correctly" do
63
63
  @ds << {:number=>20}
64
- @ds.from(:items___i, @ds.where(:items__number=>:i__number).lateral).select_order_map([:i__number___n, :t1__number]).must_equal [[10, 10], [20, 20]]
65
- @ds.from(:items___i).cross_join(@ds.where(:items__number=>:i__number).lateral).select_order_map([:i__number___n, :t1__number]).must_equal [[10, 10], [20, 20]]
66
- @ds.from(:items___i).join(@ds.where(:items__number=>:i__number).lateral, 1=>1).select_order_map([:i__number___n, :t1__number]).must_equal [[10, 10], [20, 20]]
67
- @ds.from(:items___i).join(@ds.where(:items__number=>:i__number).lateral, 1=>0).select_order_map([:i__number___n, :t1__number]).must_equal []
68
- @ds.from(:items___i).left_join(@ds.from(:items___i2).where(:i2__number=>:i__number).lateral, 1=>1).select_order_map([:i__number___n, :t1__number]).must_equal [[10, 10], [20, 20]]
69
- @ds.from(:items___i).left_join(@ds.from(:items___i2).where(:i2__number=>:i__number).lateral, 1=>0).select_order_map([:i__number___n, :t1__number]).must_equal [[10, nil], [20, nil]]
64
+ @ds.from(Sequel[:items].as(:i), @ds.where(Sequel[:items][:number]=>Sequel[:i][:number]).lateral).select_order_map([Sequel[:i][:number].as(:n), Sequel[:t1][:number]]).must_equal [[10, 10], [20, 20]]
65
+ @ds.from(Sequel[:items].as(:i)).cross_join(@ds.where(Sequel[:items][:number]=>Sequel[:i][:number]).lateral).select_order_map([Sequel[:i][:number].as(:n), Sequel[:t1][:number]]).must_equal [[10, 10], [20, 20]]
66
+ @ds.from(Sequel[:items].as(:i)).join(@ds.where(Sequel[:items][:number]=>Sequel[:i][:number]).lateral, 1=>1).select_order_map([Sequel[:i][:number].as(:n), Sequel[:t1][:number]]).must_equal [[10, 10], [20, 20]]
67
+ @ds.from(Sequel[:items].as(:i)).join(@ds.where(Sequel[:items][:number]=>Sequel[:i][:number]).lateral, 1=>0).select_order_map([Sequel[:i][:number].as(:n), Sequel[:t1][:number]]).must_equal []
68
+ @ds.from(Sequel[:items].as(:i)).left_join(@ds.from(Sequel[:items].as(:i2)).where(Sequel[:i2][:number]=>Sequel[:i][:number]).lateral, 1=>1).select_order_map([Sequel[:i][:number].as(:n), Sequel[:t1][:number]]).must_equal [[10, 10], [20, 20]]
69
+ @ds.from(Sequel[:items].as(:i)).left_join(@ds.from(Sequel[:items].as(:i2)).where(Sequel[:i2][:number]=>Sequel[:i][:number]).lateral, 1=>0).select_order_map([Sequel[:i][:number].as(:n), Sequel[:t1][:number]]).must_equal [[10, nil], [20, nil]]
70
70
  end if DB.dataset.supports_lateral_subqueries?
71
71
 
72
72
  it "should correctly deal with qualified columns and subselects" do
73
- @ds.from_self(:alias=>:a).select(:a__id, Sequel.qualify(:a, :number)).all.must_equal [{:id=>1, :number=>10}]
74
- @ds.join(@ds.as(:a), :id=>:id).select(:a__id, Sequel.qualify(:a, :number)).all.must_equal [{:id=>1, :number=>10}]
73
+ @ds.from_self(:alias=>:a).select(Sequel[:a][:id], Sequel.qualify(:a, :number)).all.must_equal [{:id=>1, :number=>10}]
74
+ @ds.join(@ds.as(:a), :id=>:id).select(Sequel[:a][:id], Sequel.qualify(:a, :number)).all.must_equal [{:id=>1, :number=>10}]
75
75
  end
76
76
 
77
77
  it "should graph correctly" do
78
78
  a = [{:items=>{:id=>1, :number=>10}, :b=>{:id=>1, :number=>10}}]
79
79
  pr = proc{|t| @ds.graph(t, {:id=>:id}, :table_alias=>:b).extension(:graph_each).all.must_equal a}
80
80
  pr[:items]
81
- pr[:items___foo]
81
+ pr[Sequel[:items].as(:foo)]
82
82
  pr[Sequel.identifier(:items)]
83
83
  pr[Sequel.identifier('items')]
84
84
  pr[Sequel.as(:items, :foo)]
@@ -260,25 +260,25 @@ describe "Simple Dataset operations" do
260
260
  @db.create_table!(:items2){primary_key :id2; Integer :number2}
261
261
  @db[:items2].insert(:number2=>10)
262
262
  @ds.from(:items, :items2).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10}]
263
- @ds.from(:items___i, :items2___i2).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10}]
263
+ @ds.from(Sequel[:items].as(:i), Sequel[:items2].as(:i2)).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10}]
264
264
  @ds.cross_join(:items2).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10}]
265
- @ds.from(:items___i).cross_join(:items2___i2).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10}]
266
- @ds.cross_join(:items2___i).cross_join(@db[:items2].select(:id2___id3, :number2___number3)).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10, :id3=>1, :number3=>10}]
265
+ @ds.from(Sequel[:items].as(:i)).cross_join(Sequel[:items2].as(:i2)).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10}]
266
+ @ds.cross_join(Sequel[:items2].as(:i)).cross_join(@db[:items2].select(Sequel[:id2].as(:id3), Sequel[:number2].as(:number3))).order(:id).limit(2, 0).all.must_equal [{:id=>1, :number=>10, :id2=>1, :number2=>10, :id3=>1, :number3=>10}]
267
267
 
268
268
  @ds.from(:items, :items2).order(:id).limit(2, 1).all.must_equal []
269
- @ds.from(:items___i, :items2___i2).order(:id).limit(2, 1).all.must_equal []
269
+ @ds.from(Sequel[:items].as(:i), Sequel[:items2].as(:i2)).order(:id).limit(2, 1).all.must_equal []
270
270
  @ds.cross_join(:items2).order(:id).limit(2, 1).all.must_equal []
271
- @ds.from(:items___i).cross_join(:items2___i2).order(:id).limit(2, 1).all.must_equal []
272
- @ds.cross_join(:items2___i).cross_join(@db[:items2].select(:id2___id3, :number2___number3)).order(:id).limit(2, 1).all.must_equal []
271
+ @ds.from(Sequel[:items].as(:i)).cross_join(Sequel[:items2].as(:i2)).order(:id).limit(2, 1).all.must_equal []
272
+ @ds.cross_join(Sequel[:items2].as(:i)).cross_join(@db[:items2].select(Sequel[:id2].as(:id3), Sequel[:number2].as(:number3))).order(:id).limit(2, 1).all.must_equal []
273
273
  @db.drop_table(:items2)
274
274
  end
275
275
 
276
276
  it "should fetch correctly with a limit and offset without an order" do
277
277
  @ds.limit(2, 1).all.must_equal []
278
- @ds.join(:items___i, :id=>:id).select(:items__id___s, :i__id___id2).limit(2, 1).all.must_equal []
279
- @ds.join(:items___i, :id=>:id).select(:items__id).limit(2, 1).all.must_equal []
280
- @ds.join(:items___i, :id=>:id).select(Sequel.qualify(:items, :id)).limit(2, 1).all.must_equal []
281
- @ds.join(:items___i, :id=>:id).select(Sequel.qualify(:items, :id).as(:s)).limit(2, 1).all.must_equal []
278
+ @ds.join(Sequel[:items].as(:i), :id=>:id).select(Sequel[:items][:id].as(:s), Sequel[:i][:id].as(:id2)).limit(2, 1).all.must_equal []
279
+ @ds.join(Sequel[:items].as(:i), :id=>:id).select(Sequel[:items][:id]).limit(2, 1).all.must_equal []
280
+ @ds.join(Sequel[:items].as(:i), :id=>:id).select(Sequel.qualify(:items, :id)).limit(2, 1).all.must_equal []
281
+ @ds.join(Sequel[:items].as(:i), :id=>:id).select(Sequel.qualify(:items, :id).as(:s)).limit(2, 1).all.must_equal []
282
282
  end
283
283
 
284
284
  it "should be orderable by column number" do
@@ -330,7 +330,7 @@ describe "Simple Dataset operations" do
330
330
  end
331
331
 
332
332
  it "should alias columns correctly" do
333
- @ds.select(:id___x, :number___n).first.must_equal(:x=>1, :n=>10)
333
+ @ds.select(Sequel[:id].as(:x), Sequel[:number].as(:n)).first.must_equal(:x=>1, :n=>10)
334
334
  end
335
335
 
336
336
  it "should support table aliases with column aliases" do
@@ -700,17 +700,17 @@ if DB.dataset.supports_cte?
700
700
  end
701
701
 
702
702
  cspecify "should give correct results for recursive WITH", :db2 do
703
- ds = @db[:t].select(:i___id, :pi___parent_id).with_recursive(:t, @ds.filter(:parent_id=>nil), @ds.join(:t, :i=>:parent_id).select(:i1__id, :i1__parent_id), :args=>[:i, :pi]).order(:id)
703
+ ds = @db[:t].select(Sequel[:i].as(:id), Sequel[:pi].as(:parent_id)).with_recursive(:t, @ds.filter(:parent_id=>nil), @ds.join(:t, :i=>:parent_id).select(Sequel[:i1][:id], Sequel[:i1][:parent_id]), :args=>[:i, :pi]).order(:id)
704
704
  ds.all.must_equal [{:parent_id=>nil, :id=>1}, {:parent_id=>nil, :id=>2}, {:parent_id=>1, :id=>3}, {:parent_id=>1, :id=>4}, {:parent_id=>3, :id=>5}, {:parent_id=>5, :id=>6}]
705
- ps = @db[:t].select(:i___id, :pi___parent_id).with_recursive(:t, @ds.filter(:parent_id=>:$n), @ds.join(:t, :i=>:parent_id).filter(:t__i=>:parent_id).select(:i1__id, :i1__parent_id), :args=>[:i, :pi]).order(:id).prepare(:select, :cte_sel)
705
+ ps = @db[:t].select(Sequel[:i].as(:id), Sequel[:pi].as(:parent_id)).with_recursive(:t, @ds.filter(:parent_id=>:$n), @ds.join(:t, :i=>:parent_id).filter(Sequel[:t][:i]=>:parent_id).select(Sequel[:i1][:id], Sequel[:i1][:parent_id]), :args=>[:i, :pi]).order(:id).prepare(:select, :cte_sel)
706
706
  ps.call(:n=>1).must_equal [{:id=>3, :parent_id=>1}, {:id=>4, :parent_id=>1}, {:id=>5, :parent_id=>3}, {:id=>6, :parent_id=>5}]
707
707
  ps.call(:n=>3).must_equal [{:id=>5, :parent_id=>3}, {:id=>6, :parent_id=>5}]
708
708
  ps.call(:n=>5).must_equal [{:id=>6, :parent_id=>5}]
709
709
  end
710
710
 
711
711
  it "should support joining a dataset with a CTE" do
712
- @ds.inner_join(@db[:t].with(:t, @ds.filter(:parent_id=>nil)), :id => :id).select(:i1__id).order(:i1__id).map(:id).must_equal [1,2]
713
- @db[:t].with(:t, @ds).inner_join(@db[:s].with(:s, @ds.filter(:parent_id=>nil)), :id => :id).select(:t__id).order(:t__id).map(:id).must_equal [1,2]
712
+ @ds.inner_join(@db[:t].with(:t, @ds.filter(:parent_id=>nil)), :id => :id).select(Sequel[:i1][:id]).order(Sequel[:i1][:id]).map(:id).must_equal [1,2]
713
+ @db[:t].with(:t, @ds).inner_join(@db[:s].with(:s, @ds.filter(:parent_id=>nil)), :id => :id).select(Sequel[:t][:id]).order(Sequel[:t][:id]).map(:id).must_equal [1,2]
714
714
  end
715
715
 
716
716
  it "should support a subselect in the FROM clause with a CTE" do
@@ -777,7 +777,7 @@ if DB.dataset.supports_returning?(:insert)
777
777
  h.must_equal(:id=>3)
778
778
  @ds.returning.insert(5, 6){|r| h = r}
779
779
  h.must_equal(:id=>5, :foo=>6)
780
- @ds.returning(:id___foo, :foo___id).insert(7, 8){|r| h = r}
780
+ @ds.returning(Sequel[:id].as(:foo), Sequel[:foo].as(:id)).insert(7, 8){|r| h = r}
781
781
  h.must_equal(:id=>8, :foo=>7)
782
782
  end
783
783
  end
@@ -806,7 +806,7 @@ if DB.dataset.supports_returning?(:update) # Assume DELETE support as well
806
806
  @ds.returning.update(:id=>Sequel.+(:id, 1), :foo=>Sequel.*(:foo, 2)){|r| h << r}
807
807
  h.must_equal [{:id=>4, :foo=>16}]
808
808
  h.clear
809
- @ds.returning(:id___foo, :foo___id).update(:id=>Sequel.+(:id, 1), :foo=>Sequel.*(:foo, 2)){|r| h << r}
809
+ @ds.returning(Sequel[:id].as(:foo), Sequel[:foo].as(:id)).update(:id=>Sequel.+(:id, 1), :foo=>Sequel.*(:foo, 2)){|r| h << r}
810
810
  h.must_equal [{:id=>32, :foo=>5}]
811
811
  h.clear
812
812
 
@@ -1072,13 +1072,13 @@ describe "Sequel::Dataset convenience methods" do
1072
1072
  end
1073
1073
 
1074
1074
  it "#group_and_count should support column aliases" do
1075
- @ds.group_and_count(:a___c).order{count(:a)}.all.must_equal []
1075
+ @ds.group_and_count(Sequel[:a].as(:c)).order{count(:a)}.all.must_equal []
1076
1076
  @ds.insert(20, 10)
1077
- @ds.group_and_count(:a___c).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.must_equal [{:c=>20, :count=>1}]
1077
+ @ds.group_and_count(Sequel[:a].as(:c)).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.must_equal [{:c=>20, :count=>1}]
1078
1078
  @ds.insert(20, 30)
1079
- @ds.group_and_count(:a___c).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.must_equal [{:c=>20, :count=>2}]
1079
+ @ds.group_and_count(Sequel[:a].as(:c)).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.must_equal [{:c=>20, :count=>2}]
1080
1080
  @ds.insert(30, 30)
1081
- @ds.group_and_count(:a___c).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.must_equal [{:c=>30, :count=>1}, {:c=>20, :count=>2}]
1081
+ @ds.group_and_count(Sequel[:a].as(:c)).order{count(:a)}.all.each{|h| h[:count] = h[:count].to_i}.must_equal [{:c=>30, :count=>1}, {:c=>20, :count=>2}]
1082
1082
  end
1083
1083
 
1084
1084
  it "#range should return the range between the maximum and minimum values" do
@@ -1112,10 +1112,10 @@ describe "Sequel::Dataset main SQL methods" do
1112
1112
  end
1113
1113
 
1114
1114
  it "#exists should return a usable exists clause" do
1115
- @ds.filter(@db[:d___c].filter(:c__a=>:d__b).exists).all.must_equal []
1115
+ @ds.filter(@db[Sequel[:d].as(:c)].filter(Sequel[:c][:a]=>Sequel[:d][:b]).exists).all.must_equal []
1116
1116
  @ds.insert(20, 30)
1117
1117
  @ds.insert(10, 20)
1118
- @ds.filter(@db[:d___c].filter(:c__a=>:d__b).exists).all.must_equal [{:a=>10, :b=>20}]
1118
+ @ds.filter(@db[Sequel[:d].as(:c)].filter(Sequel[:c][:a]=>Sequel[:d][:b]).exists).all.must_equal [{:a=>10, :b=>20}]
1119
1119
  end
1120
1120
 
1121
1121
  it "#filter and #exclude should work with placeholder strings" do
@@ -1147,7 +1147,7 @@ describe "Sequel::Dataset main SQL methods" do
1147
1147
  it "#select_group should work correctly when aliasing" do
1148
1148
  @ds.unordered!
1149
1149
  @ds.insert(20, 30)
1150
- @ds.select_group(:b___c).all.must_equal [{:c=>30}]
1150
+ @ds.select_group(Sequel[:b].as(:c)).all.must_equal [{:c=>30}]
1151
1151
  end
1152
1152
 
1153
1153
  it "#having should work correctly" do
@@ -1224,36 +1224,36 @@ describe "Sequel::Dataset convenience methods" do
1224
1224
  @ds.select_map([:a]).must_equal [[1], [5]]
1225
1225
  @ds.select_map([:a, :b]).must_equal [[1, 2], [5, 6]]
1226
1226
 
1227
- @ds.select_map(:a___e).must_equal [1, 5]
1228
- @ds.select_map(:b___e).must_equal [2, 6]
1229
- @ds.select_map([:a___e, :b___f]).must_equal [[1, 2], [5, 6]]
1230
- @ds.select_map([:a__a___e, :a__b___f]).must_equal [[1, 2], [5, 6]]
1231
- @ds.select_map([Sequel.expr(:a__a).as(:e), Sequel.expr(:a__b).as(:f)]).must_equal [[1, 2], [5, 6]]
1227
+ @ds.select_map(Sequel[:a].as(:e)).must_equal [1, 5]
1228
+ @ds.select_map(Sequel[:b].as(:e)).must_equal [2, 6]
1229
+ @ds.select_map([Sequel[:a].as(:e), Sequel[:b].as(:f)]).must_equal [[1, 2], [5, 6]]
1230
+ @ds.select_map([Sequel[:a][:a].as(:e), Sequel[:a][:b].as(:f)]).must_equal [[1, 2], [5, 6]]
1231
+ @ds.select_map([Sequel.expr(Sequel[:a][:a]).as(:e), Sequel.expr(Sequel[:a][:b]).as(:f)]).must_equal [[1, 2], [5, 6]]
1232
1232
  @ds.select_map([Sequel.qualify(:a, :a).as(:e), Sequel.qualify(:a, :b).as(:f)]).must_equal [[1, 2], [5, 6]]
1233
1233
  @ds.select_map([Sequel.identifier(:a).qualify(:a).as(:e), Sequel.qualify(:a, :b).as(:f)]).must_equal [[1, 2], [5, 6]]
1234
1234
  end
1235
1235
 
1236
1236
  it "should have working #select_order_map" do
1237
1237
  @ds.select_order_map(:a).must_equal [1, 5]
1238
- @ds.select_order_map(Sequel.desc(:a__b)).must_equal [6, 2]
1239
- @ds.select_order_map(Sequel.desc(:a__b___e)).must_equal [6, 2]
1238
+ @ds.select_order_map(Sequel.desc(Sequel[:a][:b])).must_equal [6, 2]
1239
+ @ds.select_order_map(Sequel.desc(Sequel[:a][:b].as(:e))).must_equal [6, 2]
1240
1240
  @ds.select_order_map(Sequel.qualify(:a, :b).as(:e)).must_equal [2, 6]
1241
1241
  @ds.select_order_map([:a]).must_equal [[1], [5]]
1242
1242
  @ds.select_order_map([Sequel.desc(:a), :b]).must_equal [[5, 6], [1, 2]]
1243
1243
 
1244
- @ds.select_order_map(:a___e).must_equal [1, 5]
1245
- @ds.select_order_map(:b___e).must_equal [2, 6]
1246
- @ds.select_order_map([Sequel.desc(:a___e), :b___f]).must_equal [[5, 6], [1, 2]]
1247
- @ds.select_order_map([Sequel.desc(:a__a___e), :a__b___f]).must_equal [[5, 6], [1, 2]]
1248
- @ds.select_order_map([Sequel.desc(:a__a), Sequel.expr(:a__b).as(:f)]).must_equal [[5, 6], [1, 2]]
1244
+ @ds.select_order_map(Sequel[:a].as(:e)).must_equal [1, 5]
1245
+ @ds.select_order_map(Sequel[:b].as(:e)).must_equal [2, 6]
1246
+ @ds.select_order_map([Sequel.desc(Sequel[:a].as(:e)), Sequel[:b].as(:f)]).must_equal [[5, 6], [1, 2]]
1247
+ @ds.select_order_map([Sequel.desc(Sequel[:a][:a].as(:e)), Sequel[:a][:b].as(:f)]).must_equal [[5, 6], [1, 2]]
1248
+ @ds.select_order_map([Sequel.desc(Sequel[:a][:a]), Sequel.expr(Sequel[:a][:b]).as(:f)]).must_equal [[5, 6], [1, 2]]
1249
1249
  @ds.select_order_map([Sequel.qualify(:a, :a).desc, Sequel.qualify(:a, :b).as(:f)]).must_equal [[5, 6], [1, 2]]
1250
1250
  @ds.select_order_map([Sequel.identifier(:a).qualify(:a).desc, Sequel.qualify(:a, :b).as(:f)]).must_equal [[5, 6], [1, 2]]
1251
1251
  end
1252
1252
 
1253
1253
  it "should have working #select_hash" do
1254
1254
  @ds.select_hash(:a, :b).must_equal(1=>2, 5=>6)
1255
- @ds.select_hash(:a__a___e, :b).must_equal(1=>2, 5=>6)
1256
- @ds.select_hash(Sequel.expr(:a__a).as(:e), :b).must_equal(1=>2, 5=>6)
1255
+ @ds.select_hash(Sequel[:a][:a].as(:e), :b).must_equal(1=>2, 5=>6)
1256
+ @ds.select_hash(Sequel.expr(Sequel[:a][:a]).as(:e), :b).must_equal(1=>2, 5=>6)
1257
1257
  @ds.select_hash(Sequel.qualify(:a, :a).as(:e), :b).must_equal(1=>2, 5=>6)
1258
1258
  @ds.select_hash(Sequel.identifier(:a).qualify(:a).as(:e), :b).must_equal(1=>2, 5=>6)
1259
1259
  @ds.select_hash([:a, :c], :b).must_equal([1, 3]=>2, [5, 7]=>6)
@@ -1266,8 +1266,8 @@ describe "Sequel::Dataset convenience methods" do
1266
1266
  ds = @ds.order(*@ds.columns)
1267
1267
  ds.insert(1, 2, 3, 9)
1268
1268
  ds.select_hash_groups(:a, :d).must_equal(1=>[4, 9], 5=>[8])
1269
- ds.select_hash_groups(:a__a___e, :d).must_equal(1=>[4, 9], 5=>[8])
1270
- ds.select_hash_groups(Sequel.expr(:a__a).as(:e), :d).must_equal(1=>[4, 9], 5=>[8])
1269
+ ds.select_hash_groups(Sequel[:a][:a].as(:e), :d).must_equal(1=>[4, 9], 5=>[8])
1270
+ ds.select_hash_groups(Sequel.expr(Sequel[:a][:a]).as(:e), :d).must_equal(1=>[4, 9], 5=>[8])
1271
1271
  ds.select_hash_groups(Sequel.qualify(:a, :a).as(:e), :d).must_equal(1=>[4, 9], 5=>[8])
1272
1272
  ds.select_hash_groups(Sequel.identifier(:a).qualify(:a).as(:e), :d).must_equal(1=>[4, 9], 5=>[8])
1273
1273
  ds.select_hash_groups([:a, :c], :d).must_equal([1, 3]=>[4, 9], [5, 7]=>[8])
@@ -1371,15 +1371,15 @@ describe "Sequel::Dataset DSL support" do
1371
1371
 
1372
1372
  it "should work with qualifying" do
1373
1373
  @ds.insert(10, 20)
1374
- @ds.get(:a__b).must_equal 20
1375
- @ds.get{a__b}.must_equal 20
1374
+ @ds.get(Sequel[:a][:b]).must_equal 20
1375
+ @ds.get{a[:b]}.must_equal 20
1376
1376
  @ds.get(Sequel.qualify(:a, :b)).must_equal 20
1377
1377
  end
1378
1378
 
1379
1379
  it "should work with aliasing" do
1380
1380
  @ds.insert(10, 20)
1381
- @ds.get(:a__b___c).must_equal 20
1382
- @ds.get{a__b.as(c)}.must_equal 20
1381
+ @ds.get(Sequel[:a][:b].as(:c)).must_equal 20
1382
+ @ds.get{a[:b].as(c)}.must_equal 20
1383
1383
  @ds.get(Sequel.qualify(:a, :b).as(:c)).must_equal 20
1384
1384
  @ds.get(Sequel.as(:b, :c)).must_equal 20
1385
1385
  end