sequel 4.39.0 → 4.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.
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