sequel_core 1.5.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +116 -0
 - data/COPYING +19 -19
 - data/README +83 -32
 - data/Rakefile +9 -20
 - data/bin/sequel +43 -112
 - data/doc/cheat_sheet.rdoc +225 -0
 - data/doc/dataset_filtering.rdoc +257 -0
 - data/lib/sequel_core/adapters/adapter_skeleton.rb +4 -2
 - data/lib/sequel_core/adapters/ado.rb +3 -1
 - data/lib/sequel_core/adapters/db2.rb +4 -2
 - data/lib/sequel_core/adapters/dbi.rb +127 -113
 - data/lib/sequel_core/adapters/informix.rb +4 -2
 - data/lib/sequel_core/adapters/jdbc.rb +5 -3
 - data/lib/sequel_core/adapters/mysql.rb +112 -46
 - data/lib/sequel_core/adapters/odbc.rb +5 -7
 - data/lib/sequel_core/adapters/odbc_mssql.rb +12 -3
 - data/lib/sequel_core/adapters/openbase.rb +3 -1
 - data/lib/sequel_core/adapters/oracle.rb +11 -9
 - data/lib/sequel_core/adapters/postgres.rb +261 -262
 - data/lib/sequel_core/adapters/sqlite.rb +72 -22
 - data/lib/sequel_core/connection_pool.rb +140 -73
 - data/lib/sequel_core/core_ext.rb +201 -66
 - data/lib/sequel_core/core_sql.rb +123 -153
 - data/lib/sequel_core/database/schema.rb +156 -0
 - data/lib/sequel_core/database.rb +321 -338
 - data/lib/sequel_core/dataset/callback.rb +11 -12
 - data/lib/sequel_core/dataset/convenience.rb +213 -240
 - data/lib/sequel_core/dataset/pagination.rb +58 -43
 - data/lib/sequel_core/dataset/parse_tree_sequelizer.rb +331 -0
 - data/lib/sequel_core/dataset/query.rb +41 -0
 - data/lib/sequel_core/dataset/schema.rb +15 -0
 - data/lib/sequel_core/dataset/sequelizer.rb +41 -373
 - data/lib/sequel_core/dataset/sql.rb +741 -632
 - data/lib/sequel_core/dataset.rb +183 -168
 - data/lib/sequel_core/deprecated.rb +1 -169
 - data/lib/sequel_core/exceptions.rb +24 -19
 - data/lib/sequel_core/migration.rb +44 -52
 - data/lib/sequel_core/object_graph.rb +43 -42
 - data/lib/sequel_core/pretty_table.rb +71 -76
 - data/lib/sequel_core/schema/generator.rb +163 -105
 - data/lib/sequel_core/schema/sql.rb +250 -93
 - data/lib/sequel_core/schema.rb +2 -8
 - data/lib/sequel_core/sql.rb +394 -0
 - data/lib/sequel_core/worker.rb +37 -27
 - data/lib/sequel_core.rb +99 -45
 - data/spec/adapters/informix_spec.rb +0 -1
 - data/spec/adapters/mysql_spec.rb +177 -124
 - data/spec/adapters/oracle_spec.rb +0 -1
 - data/spec/adapters/postgres_spec.rb +98 -58
 - data/spec/adapters/sqlite_spec.rb +45 -4
 - data/spec/blockless_filters_spec.rb +269 -0
 - data/spec/connection_pool_spec.rb +21 -18
 - data/spec/core_ext_spec.rb +169 -19
 - data/spec/core_sql_spec.rb +56 -49
 - data/spec/database_spec.rb +78 -17
 - data/spec/dataset_spec.rb +300 -428
 - data/spec/migration_spec.rb +1 -1
 - data/spec/object_graph_spec.rb +5 -11
 - data/spec/rcov.opts +1 -1
 - data/spec/schema_generator_spec.rb +16 -4
 - data/spec/schema_spec.rb +89 -10
 - data/spec/sequelizer_spec.rb +56 -56
 - data/spec/spec.opts +0 -5
 - data/spec/spec_config.rb +7 -0
 - data/spec/spec_config.rb.example +5 -5
 - data/spec/spec_helper.rb +6 -0
 - data/spec/worker_spec.rb +1 -1
 - metadata +78 -63
 
    
        data/spec/migration_spec.rb
    CHANGED
    
    
    
        data/spec/object_graph_spec.rb
    CHANGED
    
    | 
         @@ -62,21 +62,15 @@ describe Sequel::Dataset, " graphing" do 
     | 
|
| 
       62 
62 
     | 
    
         
             
              end
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
              it "#graph should pass all join_conditions to join_table" do
         
     | 
| 
       65 
     | 
    
         
            -
                ds = @ds1.graph(@ds2, :x 
     | 
| 
       66 
     | 
    
         
            -
                 
     | 
| 
       67 
     | 
    
         
            -
                'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON (lines.y = points.id) AND (lines.x = points.id)'
         
     | 
| 
       68 
     | 
    
         
            -
                ].should(include(ds.sql))
         
     | 
| 
      
 65 
     | 
    
         
            +
                ds = @ds1.graph(@ds2, [[:x, :id], [:y, :id]])
         
     | 
| 
      
 66 
     | 
    
         
            +
                ds.sql.should == 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON ((lines.x = points.id) AND (lines.y = points.id))'
         
     | 
| 
       69 
67 
     | 
    
         
             
              end
         
     | 
| 
       70 
68 
     | 
    
         | 
| 
       71 
69 
     | 
    
         
             
              it "#graph should not add columns if graph is called after set_graph_aliases" do
         
     | 
| 
       72 
     | 
    
         
            -
                ds = @ds1.set_graph_aliases(:x 
     | 
| 
       73 
     | 
    
         
            -
                 
     | 
| 
       74 
     | 
    
         
            -
                'SELECT lines.y, points.x FROM points'
         
     | 
| 
       75 
     | 
    
         
            -
                ].should(include(ds.sql))
         
     | 
| 
      
 70 
     | 
    
         
            +
                ds = @ds1.set_graph_aliases([[:x,[:points, :x]], [:y,[:lines, :y]]])
         
     | 
| 
      
 71 
     | 
    
         
            +
                ds.sql.should == 'SELECT points.x, lines.y FROM points'
         
     | 
| 
       76 
72 
     | 
    
         
             
                ds = ds.graph(:lines, :x=>:id)
         
     | 
| 
       77 
     | 
    
         
            -
                 
     | 
| 
       78 
     | 
    
         
            -
                'SELECT lines.y, points.x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
         
     | 
| 
       79 
     | 
    
         
            -
                ].should(include(ds.sql))
         
     | 
| 
      
 73 
     | 
    
         
            +
                ds.sql.should == 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
         
     | 
| 
       80 
74 
     | 
    
         
             
              end
         
     | 
| 
       81 
75 
     | 
    
         | 
| 
       82 
76 
     | 
    
         
             
              it "#graph should allow graphing of multiple datasets" do
         
     | 
    
        data/spec/rcov.opts
    CHANGED
    
    
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require File.join(File.dirname(__FILE__), 'spec_helper')
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe Sequel::Schema::Generator do
         
     | 
| 
       4 
     | 
    
         
            -
              before  
     | 
| 
      
 4 
     | 
    
         
            +
              before do
         
     | 
| 
       5 
5 
     | 
    
         
             
                @generator = Sequel::Schema::Generator.new(SchemaDummyDatabase.new) do
         
     | 
| 
       6 
6 
     | 
    
         
             
                  string :title
         
     | 
| 
       7 
7 
     | 
    
         
             
                  column :body, :text
         
     | 
| 
         @@ -11,6 +11,7 @@ describe Sequel::Schema::Generator do 
     | 
|
| 
       11 
11 
     | 
    
         
             
                  constraint(:xxx) {:yyy == :zzz}
         
     | 
| 
       12 
12 
     | 
    
         
             
                  index :title
         
     | 
| 
       13 
13 
     | 
    
         
             
                  index [:title, :body]
         
     | 
| 
      
 14 
     | 
    
         
            +
                  foreign_key :node_id, :nodes
         
     | 
| 
       14 
15 
     | 
    
         
             
                end
         
     | 
| 
       15 
16 
     | 
    
         
             
                @columns, @indexes = @generator.create_info
         
     | 
| 
       16 
17 
     | 
    
         
             
              end
         
     | 
| 
         @@ -22,7 +23,7 @@ describe Sequel::Schema::Generator do 
     | 
|
| 
       22 
23 
     | 
    
         
             
              end
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
              it "counts primary key, column and constraint definitions as columns" do
         
     | 
| 
       25 
     | 
    
         
            -
                @columns.size.should ==  
     | 
| 
      
 26 
     | 
    
         
            +
                @columns.size.should == 7
         
     | 
| 
       26 
27 
     | 
    
         
             
              end
         
     | 
| 
       27 
28 
     | 
    
         | 
| 
       28 
29 
     | 
    
         
             
              it "places primary key first" do
         
     | 
| 
         @@ -45,6 +46,13 @@ describe Sequel::Schema::Generator do 
     | 
|
| 
       45 
46 
     | 
    
         
             
              it "creates foreign key column" do
         
     | 
| 
       46 
47 
     | 
    
         
             
                @columns[3][:name].should == :parent_id
         
     | 
| 
       47 
48 
     | 
    
         
             
                @columns[3][:type].should == :integer
         
     | 
| 
      
 49 
     | 
    
         
            +
                @columns[6][:name].should == :node_id
         
     | 
| 
      
 50 
     | 
    
         
            +
                @columns[6][:type].should == :integer
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
              
         
     | 
| 
      
 53 
     | 
    
         
            +
              it "uses table for foreign key columns, if specified" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                @columns[6][:table].should == :nodes
         
     | 
| 
      
 55 
     | 
    
         
            +
                @columns[3][:table].should == nil
         
     | 
| 
       48 
56 
     | 
    
         
             
              end
         
     | 
| 
       49 
57 
     | 
    
         | 
| 
       50 
58 
     | 
    
         
             
              it "finds columns" do
         
     | 
| 
         @@ -72,7 +80,7 @@ describe Sequel::Schema::Generator do 
     | 
|
| 
       72 
80 
     | 
    
         
             
            end
         
     | 
| 
       73 
81 
     | 
    
         | 
| 
       74 
82 
     | 
    
         
             
            describe Sequel::Schema::AlterTableGenerator do
         
     | 
| 
       75 
     | 
    
         
            -
              before  
     | 
| 
      
 83 
     | 
    
         
            +
              before do
         
     | 
| 
       76 
84 
     | 
    
         
             
                @generator = Sequel::Schema::AlterTableGenerator.new(SchemaDummyDatabase.new) do
         
     | 
| 
       77 
85 
     | 
    
         
             
                  add_column :aaa, :text
         
     | 
| 
       78 
86 
     | 
    
         
             
                  drop_column :bbb
         
     | 
| 
         @@ -87,6 +95,8 @@ describe Sequel::Schema::AlterTableGenerator do 
     | 
|
| 
       87 
95 
     | 
    
         
             
                  add_index :blah, :where => {:something => true}
         
     | 
| 
       88 
96 
     | 
    
         
             
                  add_constraint :con1, ':fred > 100'
         
     | 
| 
       89 
97 
     | 
    
         
             
                  drop_constraint :con2
         
     | 
| 
      
 98 
     | 
    
         
            +
                  add_primary_key :id
         
     | 
| 
      
 99 
     | 
    
         
            +
                  add_foreign_key :node_id, :nodes
         
     | 
| 
       90 
100 
     | 
    
         
             
                end
         
     | 
| 
       91 
101 
     | 
    
         
             
              end
         
     | 
| 
       92 
102 
     | 
    
         | 
| 
         @@ -104,7 +114,9 @@ describe Sequel::Schema::AlterTableGenerator do 
     | 
|
| 
       104 
114 
     | 
    
         
             
                  {:op => :add_index, :columns => [:blah], :type => :hash},
         
     | 
| 
       105 
115 
     | 
    
         
             
                  {:op => :add_index, :columns => [:blah], :where => {:something => true}},
         
     | 
| 
       106 
116 
     | 
    
         
             
                  {:op => :add_constraint, :type => :check, :name => :con1, :check => [':fred > 100']},
         
     | 
| 
       107 
     | 
    
         
            -
                  {:op => :drop_constraint, :name => :con2}
         
     | 
| 
      
 117 
     | 
    
         
            +
                  {:op => :drop_constraint, :name => :con2},
         
     | 
| 
      
 118 
     | 
    
         
            +
                  {:op => :add_column, :name => :id, :type => :integer, :primary_key=>true, :auto_increment=>true},
         
     | 
| 
      
 119 
     | 
    
         
            +
                  {:op => :add_column, :name => :node_id, :type => :integer, :table=>:nodes}
         
     | 
| 
       108 
120 
     | 
    
         
             
                ]
         
     | 
| 
       109 
121 
     | 
    
         
             
              end
         
     | 
| 
       110 
122 
     | 
    
         
             
            end
         
     | 
    
        data/spec/schema_spec.rb
    CHANGED
    
    | 
         @@ -110,12 +110,26 @@ context "DB#create_table" do 
     | 
|
| 
       110 
110 
     | 
    
         
             
                @db.sqls.should == ["CREATE TABLE cats (name varchar(102))"]
         
     | 
| 
       111 
111 
     | 
    
         
             
              end
         
     | 
| 
       112 
112 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
              specify "should accept foreign keys" do
         
     | 
| 
      
 113 
     | 
    
         
            +
              specify "should accept foreign keys without options" do
         
     | 
| 
      
 114 
     | 
    
         
            +
                @db.create_table(:cats) do
         
     | 
| 
      
 115 
     | 
    
         
            +
                  foreign_key :project_id
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
                @db.sqls.should == ["CREATE TABLE cats (project_id integer)"]
         
     | 
| 
      
 118 
     | 
    
         
            +
              end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
              specify "should accept foreign keys with options" do
         
     | 
| 
       114 
121 
     | 
    
         
             
                @db.create_table(:cats) do
         
     | 
| 
       115 
122 
     | 
    
         
             
                  foreign_key :project_id, :table => :projects
         
     | 
| 
       116 
123 
     | 
    
         
             
                end
         
     | 
| 
       117 
124 
     | 
    
         
             
                @db.sqls.should == ["CREATE TABLE cats (project_id integer REFERENCES projects)"]
         
     | 
| 
       118 
125 
     | 
    
         
             
              end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
              specify "should accept foreign keys with separate table argument" do
         
     | 
| 
      
 128 
     | 
    
         
            +
                @db.create_table(:cats) do
         
     | 
| 
      
 129 
     | 
    
         
            +
                  foreign_key :project_id, :projects, :default=>3
         
     | 
| 
      
 130 
     | 
    
         
            +
                end
         
     | 
| 
      
 131 
     | 
    
         
            +
                @db.sqls.should == ["CREATE TABLE cats (project_id integer DEFAULT 3 REFERENCES projects)"]
         
     | 
| 
      
 132 
     | 
    
         
            +
              end
         
     | 
| 
       119 
133 
     | 
    
         | 
| 
       120 
134 
     | 
    
         
             
              specify "should accept foreign keys with arbitrary keys" do
         
     | 
| 
       121 
135 
     | 
    
         
             
                @db.create_table(:cats) do
         
     | 
| 
         @@ -264,14 +278,15 @@ context "DB#create_table" do 
     | 
|
| 
       264 
278 
     | 
    
         
             
                @db.sqls.should == ["CREATE TABLE cats (id integer)", "CREATE UNIQUE INDEX cats_id_name_index ON cats (id, name)"]
         
     | 
| 
       265 
279 
     | 
    
         
             
              end
         
     | 
| 
       266 
280 
     | 
    
         | 
| 
       267 
     | 
    
         
            -
               
     | 
| 
      
 281 
     | 
    
         
            +
              pt_specify "should accept unnamed constraint definitions with blocks" do
         
     | 
| 
       268 
282 
     | 
    
         
             
                @db.create_table(:cats) do
         
     | 
| 
       269 
283 
     | 
    
         
             
                  integer :score
         
     | 
| 
       270 
284 
     | 
    
         
             
                  check {:x > 0 && :y < 1}
         
     | 
| 
       271 
285 
     | 
    
         
             
                end
         
     | 
| 
       272 
     | 
    
         
            -
                @db.sqls.should == ["CREATE TABLE cats (score integer, CHECK (( 
     | 
| 
       273 
     | 
    
         
            -
             
     | 
| 
      
 286 
     | 
    
         
            +
                @db.sqls.should == ["CREATE TABLE cats (score integer, CHECK ((x > 0) AND (y < 1)))"]
         
     | 
| 
      
 287 
     | 
    
         
            +
              end
         
     | 
| 
       274 
288 
     | 
    
         | 
| 
      
 289 
     | 
    
         
            +
              specify "should accept unnamed constraint definitions" do
         
     | 
| 
       275 
290 
     | 
    
         
             
                @db.create_table(:cats) do
         
     | 
| 
       276 
291 
     | 
    
         
             
                  check 'price < ?', 100
         
     | 
| 
       277 
292 
     | 
    
         
             
                end
         
     | 
| 
         @@ -284,12 +299,13 @@ context "DB#create_table" do 
     | 
|
| 
       284 
299 
     | 
    
         
             
                  constraint :valid_score, 'score <= 100'
         
     | 
| 
       285 
300 
     | 
    
         
             
                end
         
     | 
| 
       286 
301 
     | 
    
         
             
                @db.sqls.should == ["CREATE TABLE cats (score integer, CONSTRAINT valid_score CHECK (score <= 100))"]
         
     | 
| 
       287 
     | 
    
         
            -
             
     | 
| 
      
 302 
     | 
    
         
            +
              end
         
     | 
| 
       288 
303 
     | 
    
         | 
| 
      
 304 
     | 
    
         
            +
              pt_specify "should accept named constraint definitions with block" do
         
     | 
| 
       289 
305 
     | 
    
         
             
                @db.create_table(:cats) do
         
     | 
| 
       290 
306 
     | 
    
         
             
                  constraint(:blah_blah) {:x > 0 && :y < 1}
         
     | 
| 
       291 
307 
     | 
    
         
             
                end
         
     | 
| 
       292 
     | 
    
         
            -
                @db.sqls.should == ["CREATE TABLE cats (CONSTRAINT blah_blah CHECK (( 
     | 
| 
      
 308 
     | 
    
         
            +
                @db.sqls.should == ["CREATE TABLE cats (CONSTRAINT blah_blah CHECK ((x > 0) AND (y < 1)))"]
         
     | 
| 
       293 
309 
     | 
    
         
             
              end
         
     | 
| 
       294 
310 
     | 
    
         
             
            end
         
     | 
| 
       295 
311 
     | 
    
         | 
| 
         @@ -320,24 +336,87 @@ context "DB#alter_table" do 
     | 
|
| 
       320 
336 
     | 
    
         
             
                @db = SchemaDummyDatabase.new
         
     | 
| 
       321 
337 
     | 
    
         
             
              end
         
     | 
| 
       322 
338 
     | 
    
         | 
| 
       323 
     | 
    
         
            -
              specify "should  
     | 
| 
      
 339 
     | 
    
         
            +
              specify "should support add_column" do
         
     | 
| 
      
 340 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 341 
     | 
    
         
            +
                  add_column :score, :integer
         
     | 
| 
      
 342 
     | 
    
         
            +
                end
         
     | 
| 
      
 343 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats ADD COLUMN score integer"]
         
     | 
| 
      
 344 
     | 
    
         
            +
              end
         
     | 
| 
      
 345 
     | 
    
         
            +
             
     | 
| 
      
 346 
     | 
    
         
            +
              specify "should support add_constraint" do
         
     | 
| 
       324 
347 
     | 
    
         
             
                @db.alter_table(:cats) do
         
     | 
| 
       325 
348 
     | 
    
         
             
                  add_constraint :valid_score, 'score <= 100'
         
     | 
| 
       326 
349 
     | 
    
         
             
                end
         
     | 
| 
       327 
350 
     | 
    
         
             
                @db.sqls.should == ["ALTER TABLE cats ADD CONSTRAINT valid_score CHECK (score <= 100)"]
         
     | 
| 
       328 
     | 
    
         
            -
             
     | 
| 
      
 351 
     | 
    
         
            +
              end
         
     | 
| 
       329 
352 
     | 
    
         | 
| 
      
 353 
     | 
    
         
            +
              pt_specify "should support add_constraint with block" do
         
     | 
| 
       330 
354 
     | 
    
         
             
                @db.alter_table(:cats) do
         
     | 
| 
       331 
355 
     | 
    
         
             
                  add_constraint(:blah_blah) {:x > 0 && :y < 1}
         
     | 
| 
       332 
356 
     | 
    
         
             
                end
         
     | 
| 
       333 
     | 
    
         
            -
                @db.sqls.should == ["ALTER TABLE cats ADD CONSTRAINT blah_blah CHECK (( 
     | 
| 
      
 357 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats ADD CONSTRAINT blah_blah CHECK ((x > 0) AND (y < 1))"]
         
     | 
| 
       334 
358 
     | 
    
         
             
              end
         
     | 
| 
       335 
359 
     | 
    
         | 
| 
       336 
     | 
    
         
            -
              specify "should  
     | 
| 
      
 360 
     | 
    
         
            +
              specify "should support add_foreign_key" do
         
     | 
| 
      
 361 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 362 
     | 
    
         
            +
                  add_foreign_key :node_id, :nodes
         
     | 
| 
      
 363 
     | 
    
         
            +
                end
         
     | 
| 
      
 364 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats ADD COLUMN node_id integer REFERENCES nodes"]
         
     | 
| 
      
 365 
     | 
    
         
            +
              end
         
     | 
| 
      
 366 
     | 
    
         
            +
             
     | 
| 
      
 367 
     | 
    
         
            +
              specify "should support add_index" do
         
     | 
| 
      
 368 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 369 
     | 
    
         
            +
                  add_index :name
         
     | 
| 
      
 370 
     | 
    
         
            +
                end
         
     | 
| 
      
 371 
     | 
    
         
            +
                @db.sqls.should == ["CREATE INDEX cats_name_index ON cats (name)"]
         
     | 
| 
      
 372 
     | 
    
         
            +
              end
         
     | 
| 
      
 373 
     | 
    
         
            +
             
     | 
| 
      
 374 
     | 
    
         
            +
              specify "should support add_primary_key" do
         
     | 
| 
      
 375 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 376 
     | 
    
         
            +
                  add_primary_key :id
         
     | 
| 
      
 377 
     | 
    
         
            +
                end
         
     | 
| 
      
 378 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats ADD COLUMN id integer PRIMARY KEY AUTOINCREMENT"]
         
     | 
| 
      
 379 
     | 
    
         
            +
              end
         
     | 
| 
      
 380 
     | 
    
         
            +
             
     | 
| 
      
 381 
     | 
    
         
            +
              specify "should support drop_column" do
         
     | 
| 
      
 382 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 383 
     | 
    
         
            +
                  drop_column :score
         
     | 
| 
      
 384 
     | 
    
         
            +
                end
         
     | 
| 
      
 385 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats DROP COLUMN score"]
         
     | 
| 
      
 386 
     | 
    
         
            +
              end
         
     | 
| 
      
 387 
     | 
    
         
            +
             
     | 
| 
      
 388 
     | 
    
         
            +
              specify "should support drop_constraint" do
         
     | 
| 
       337 
389 
     | 
    
         
             
                @db.alter_table(:cats) do
         
     | 
| 
       338 
390 
     | 
    
         
             
                  drop_constraint :valid_score
         
     | 
| 
       339 
391 
     | 
    
         
             
                end
         
     | 
| 
       340 
392 
     | 
    
         
             
                @db.sqls.should == ["ALTER TABLE cats DROP CONSTRAINT valid_score"]
         
     | 
| 
       341 
393 
     | 
    
         
             
              end
         
     | 
| 
       342 
394 
     | 
    
         | 
| 
      
 395 
     | 
    
         
            +
              specify "should support drop_index" do
         
     | 
| 
      
 396 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 397 
     | 
    
         
            +
                  drop_index :name
         
     | 
| 
      
 398 
     | 
    
         
            +
                end
         
     | 
| 
      
 399 
     | 
    
         
            +
                @db.sqls.should == ["DROP INDEX cats_name_index"]
         
     | 
| 
      
 400 
     | 
    
         
            +
              end
         
     | 
| 
      
 401 
     | 
    
         
            +
             
     | 
| 
      
 402 
     | 
    
         
            +
              specify "should support rename_column" do
         
     | 
| 
      
 403 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 404 
     | 
    
         
            +
                  rename_column :name, :old_name
         
     | 
| 
      
 405 
     | 
    
         
            +
                end
         
     | 
| 
      
 406 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats RENAME COLUMN name TO old_name"]
         
     | 
| 
      
 407 
     | 
    
         
            +
              end
         
     | 
| 
      
 408 
     | 
    
         
            +
             
     | 
| 
      
 409 
     | 
    
         
            +
              specify "should support set_column_default" do
         
     | 
| 
      
 410 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 411 
     | 
    
         
            +
                  set_column_default :score, 3
         
     | 
| 
      
 412 
     | 
    
         
            +
                end
         
     | 
| 
      
 413 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats ALTER COLUMN score SET DEFAULT 3"]
         
     | 
| 
      
 414 
     | 
    
         
            +
              end
         
     | 
| 
      
 415 
     | 
    
         
            +
             
     | 
| 
      
 416 
     | 
    
         
            +
              specify "should support set_column_type" do
         
     | 
| 
      
 417 
     | 
    
         
            +
                @db.alter_table(:cats) do
         
     | 
| 
      
 418 
     | 
    
         
            +
                  set_column_type :score, :real
         
     | 
| 
      
 419 
     | 
    
         
            +
                end
         
     | 
| 
      
 420 
     | 
    
         
            +
                @db.sqls.should == ["ALTER TABLE cats ALTER COLUMN score TYPE real"]
         
     | 
| 
      
 421 
     | 
    
         
            +
              end
         
     | 
| 
       343 
422 
     | 
    
         
             
            end
         
     | 
    
        data/spec/sequelizer_spec.rb
    CHANGED
    
    | 
         @@ -53,7 +53,7 @@ context "Sequelizer without Ruby2Ruby" do 
     | 
|
| 
       53 
53 
     | 
    
         
             
                $VERBOSE = old_verbose
         
     | 
| 
       54 
54 
     | 
    
         
             
              end
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
               
     | 
| 
      
 56 
     | 
    
         
            +
              pt_specify "should raise error only when using external expressions" do
         
     | 
| 
       57 
57 
     | 
    
         
             
                proc {proc {:x > 1}.to_sql(@ds)}.should_not raise_error(Sequel::Error)
         
     | 
| 
       58 
58 
     | 
    
         
             
                proc {proc {1 + 1}.to_sql(@ds)}.should raise_error(Sequel::Error)
         
     | 
| 
       59 
59 
     | 
    
         
             
              end
         
     | 
| 
         @@ -84,7 +84,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       84 
84 
     | 
    
         
             
                end
         
     | 
| 
       85 
85 
     | 
    
         
             
              end
         
     | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
               
     | 
| 
      
 87 
     | 
    
         
            +
              pt_specify "should support <sym> <op> <lit>" do
         
     | 
| 
       88 
88 
     | 
    
         
             
                proc {:x > 100}.sql.should == '(x > 100)'
         
     | 
| 
       89 
89 
     | 
    
         
             
                proc {:x < 100}.sql.should == '(x < 100)'
         
     | 
| 
       90 
90 
     | 
    
         
             
                proc {:x >= 100}.sql.should == '(x >= 100)'
         
     | 
| 
         @@ -92,27 +92,27 @@ context "Proc#to_sql" do 
     | 
|
| 
       92 
92 
     | 
    
         
             
                proc {:x == 100}.sql.should == '(x = 100)'
         
     | 
| 
       93 
93 
     | 
    
         
             
              end
         
     | 
| 
       94 
94 
     | 
    
         | 
| 
       95 
     | 
    
         
            -
               
     | 
| 
      
 95 
     | 
    
         
            +
              pt_specify "should support number literals" do
         
     | 
| 
       96 
96 
     | 
    
         
             
                proc {:x > 123.45}.sql.should == '(x > 123.45)'
         
     | 
| 
       97 
97 
     | 
    
         
             
                proc {:x > -30_000}.sql.should == '(x > -30000)'
         
     | 
| 
       98 
98 
     | 
    
         
             
              end
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
               
     | 
| 
      
 100 
     | 
    
         
            +
              pt_specify "should support string literals" do
         
     | 
| 
       101 
101 
     | 
    
         
             
                proc {:x == 'abc'}.sql.should == "(x = 'abc')"
         
     | 
| 
       102 
102 
     | 
    
         
             
                proc {:y == "ab'cd"}.sql.should == "(y = 'ab''cd')"
         
     | 
| 
       103 
103 
     | 
    
         
             
              end
         
     | 
| 
       104 
104 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
               
     | 
| 
      
 105 
     | 
    
         
            +
              pt_specify "should support boolean literals" do
         
     | 
| 
       106 
106 
     | 
    
         
             
                proc {:x == false}.sql.should == "(x = 'f')"
         
     | 
| 
       107 
107 
     | 
    
         
             
                proc {:x == true}.sql.should == "(x = 't')"
         
     | 
| 
       108 
108 
     | 
    
         
             
              end
         
     | 
| 
       109 
109 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
               
     | 
| 
      
 110 
     | 
    
         
            +
              pt_specify "should support nil literal and nil?" do
         
     | 
| 
       111 
111 
     | 
    
         
             
                proc {:x == nil}.sql.should == "(x IS NULL)"
         
     | 
| 
       112 
112 
     | 
    
         
             
                proc {:x.nil?}.sql.should == "(x IS NULL)"
         
     | 
| 
       113 
113 
     | 
    
         
             
              end
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
       115 
     | 
    
         
            -
               
     | 
| 
      
 115 
     | 
    
         
            +
              pt_specify "should support local vars or method references" do
         
     | 
| 
       116 
116 
     | 
    
         
             
                proc {proc {:x == a}.sql}.should raise_error(NameError)
         
     | 
| 
       117 
117 
     | 
    
         
             
                b = 123
         
     | 
| 
       118 
118 
     | 
    
         
             
                proc {:x == b}.sql.should == "(x = 123)"
         
     | 
| 
         @@ -127,13 +127,13 @@ context "Proc#to_sql" do 
     | 
|
| 
       127 
127 
     | 
    
         
             
                proc {:x == y2}.sql.should == "(x = 111)"
         
     | 
| 
       128 
128 
     | 
    
         
             
              end
         
     | 
| 
       129 
129 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
               
     | 
| 
      
 130 
     | 
    
         
            +
              pt_specify "sould support subscript access on symbols" do
         
     | 
| 
       131 
131 
     | 
    
         
             
                proc {:x|1 > 0}.sql.should == "(x[1] > 0)"
         
     | 
| 
       132 
132 
     | 
    
         
             
                proc {:x|2|3 > 0}.sql.should == "(x[2, 3] > 0)"
         
     | 
| 
       133 
133 
     | 
    
         
             
                proc {:x|[4, 5] > 0}.sql.should == "(x[4, 5] > 0)"
         
     | 
| 
       134 
134 
     | 
    
         
             
              end
         
     | 
| 
       135 
135 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
               
     | 
| 
      
 136 
     | 
    
         
            +
              pt_specify "should support constants" do
         
     | 
| 
       137 
137 
     | 
    
         
             
                ZZZ = 444
         
     | 
| 
       138 
138 
     | 
    
         
             
                proc {:x == ZZZ}.sql.should == "(x = 444)"
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
         @@ -142,33 +142,33 @@ context "Proc#to_sql" do 
     | 
|
| 
       142 
142 
     | 
    
         
             
                proc {:x == CCCD::DDD}.sql.should == "(x = 'hi')"
         
     | 
| 
       143 
143 
     | 
    
         
             
              end
         
     | 
| 
       144 
144 
     | 
    
         | 
| 
       145 
     | 
    
         
            -
               
     | 
| 
      
 145 
     | 
    
         
            +
              pt_specify "should support instance attributes" do
         
     | 
| 
       146 
146 
     | 
    
         
             
                @abc = 123
         
     | 
| 
       147 
147 
     | 
    
         
             
                proc {:x == @abc}.sql.should == "(x = 123)"
         
     | 
| 
       148 
148 
     | 
    
         
             
              end
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
               
     | 
| 
      
 150 
     | 
    
         
            +
              pt_specify "should support class attributes" do
         
     | 
| 
       151 
151 
     | 
    
         
             
                @@abc = 321
         
     | 
| 
       152 
152 
     | 
    
         
             
                proc {:x == @@abc}.sql.should == "(x = 321)"
         
     | 
| 
       153 
153 
     | 
    
         
             
              end
         
     | 
| 
       154 
154 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
               
     | 
| 
      
 155 
     | 
    
         
            +
              pt_specify "should support like? pattern" do
         
     | 
| 
       156 
156 
     | 
    
         
             
                proc {:x.like? '%abc'}.sql.should == "(x LIKE '%abc')"
         
     | 
| 
       157 
157 
     | 
    
         
             
              end
         
     | 
| 
       158 
158 
     | 
    
         | 
| 
       159 
     | 
    
         
            -
               
     | 
| 
      
 159 
     | 
    
         
            +
              pt_specify "should support like? pattern with multiple choices" do
         
     | 
| 
       160 
160 
     | 
    
         
             
                proc {:x.like? ['%abc', '%def', '%ghi']}.sql.should == \
         
     | 
| 
       161 
161 
     | 
    
         
             
                  "((x LIKE '%abc') OR (x LIKE '%def') OR (x LIKE '%ghi'))"
         
     | 
| 
       162 
162 
     | 
    
         
             
              end
         
     | 
| 
       163 
163 
     | 
    
         | 
| 
       164 
     | 
    
         
            -
               
     | 
| 
      
 164 
     | 
    
         
            +
              pt_specify "should support =~ operator" do
         
     | 
| 
       165 
165 
     | 
    
         
             
                # stock SQL version does not know about regexps
         
     | 
| 
       166 
166 
     | 
    
         
             
                proc {:x =~ '123'}.sql.should == "(x LIKE '123')"
         
     | 
| 
       167 
167 
     | 
    
         | 
| 
       168 
168 
     | 
    
         
             
                proc {:x =~ /^123/}.sql.should == "(x ~ '^123')"
         
     | 
| 
       169 
169 
     | 
    
         
             
              end
         
     | 
| 
       170 
170 
     | 
    
         | 
| 
       171 
     | 
    
         
            -
               
     | 
| 
      
 171 
     | 
    
         
            +
              pt_specify "should support =~ operator with multiple choices" do
         
     | 
| 
       172 
172 
     | 
    
         
             
                # stock SQL version does not know about regexps
         
     | 
| 
       173 
173 
     | 
    
         
             
                proc {:x =~ ['123', '456', '789']}.sql.should == "((x LIKE '123') OR (x LIKE '456') OR (x LIKE '789'))"
         
     | 
| 
       174 
174 
     | 
    
         | 
| 
         @@ -177,101 +177,101 @@ context "Proc#to_sql" do 
     | 
|
| 
       177 
177 
     | 
    
         
             
                proc {:x =~ [/^123/, '456%', /^789/]}.sql.should == "((x ~ '^123') OR (x LIKE '456%') OR (x ~ '^789'))"
         
     | 
| 
       178 
178 
     | 
    
         
             
              end
         
     | 
| 
       179 
179 
     | 
    
         | 
| 
       180 
     | 
    
         
            -
               
     | 
| 
      
 180 
     | 
    
         
            +
              pt_specify "should raise on =~ operator for unsupported types" do
         
     | 
| 
       181 
181 
     | 
    
         
             
                proc {proc {:x =~ 123}.sql}.should raise_error(Sequel::Error)
         
     | 
| 
       182 
182 
     | 
    
         
             
              end
         
     | 
| 
       183 
183 
     | 
    
         | 
| 
       184 
     | 
    
         
            -
               
     | 
| 
      
 184 
     | 
    
         
            +
              pt_specify "should support != operator" do
         
     | 
| 
       185 
185 
     | 
    
         
             
                proc {:x != 100}.sql.should == "(NOT (x = 100))"
         
     | 
| 
       186 
186 
     | 
    
         
             
              end
         
     | 
| 
       187 
187 
     | 
    
         | 
| 
       188 
     | 
    
         
            -
               
     | 
| 
      
 188 
     | 
    
         
            +
              pt_specify "should support != operator with multiple choices" do
         
     | 
| 
       189 
189 
     | 
    
         
             
                proc {:x != [100, 200, 300]}.sql.should == "(NOT (x IN (100, 200, 300)))"
         
     | 
| 
       190 
190 
     | 
    
         
             
              end
         
     | 
| 
       191 
191 
     | 
    
         | 
| 
       192 
     | 
    
         
            -
               
     | 
| 
      
 192 
     | 
    
         
            +
              pt_specify "should support !~ operator" do
         
     | 
| 
       193 
193 
     | 
    
         
             
                proc {:x !~ '123'}.sql.should == "(NOT (x LIKE '123'))"
         
     | 
| 
       194 
194 
     | 
    
         
             
              end
         
     | 
| 
       195 
195 
     | 
    
         | 
| 
       196 
     | 
    
         
            -
               
     | 
| 
      
 196 
     | 
    
         
            +
              pt_specify "should support !~ operator with multiple choices" do
         
     | 
| 
       197 
197 
     | 
    
         
             
                proc {:x !~ ['123', '456']}.sql.should == "(NOT ((x LIKE '123') OR (x LIKE '456')))"
         
     | 
| 
       198 
198 
     | 
    
         
             
              end
         
     | 
| 
       199 
199 
     | 
    
         | 
| 
       200 
     | 
    
         
            -
               
     | 
| 
      
 200 
     | 
    
         
            +
              pt_specify "should support ! operator" do
         
     | 
| 
       201 
201 
     | 
    
         
             
                proc {!:x}.sql.should == "(x = 'f')"
         
     | 
| 
       202 
202 
     | 
    
         
             
                proc {!(:x > 100)}.sql.should == "(NOT (x > 100))"
         
     | 
| 
       203 
203 
     | 
    
         
             
              end
         
     | 
| 
       204 
204 
     | 
    
         | 
| 
       205 
     | 
    
         
            -
               
     | 
| 
      
 205 
     | 
    
         
            +
              pt_specify "should support && operator" do
         
     | 
| 
       206 
206 
     | 
    
         
             
                proc {1 && 2}.sql.should == "(1 AND 2)"
         
     | 
| 
       207 
207 
     | 
    
         
             
                proc {:x > 100 && :y < 100}.sql.should == "((x > 100) AND (y < 100))"
         
     | 
| 
       208 
208 
     | 
    
         
             
                proc {:x && :y && :z}.sql.should == "(x AND (y AND z))"
         
     | 
| 
       209 
209 
     | 
    
         
             
              end
         
     | 
| 
       210 
210 
     | 
    
         | 
| 
       211 
     | 
    
         
            -
               
     | 
| 
      
 211 
     | 
    
         
            +
              pt_specify "should support << operator for assignment" do
         
     | 
| 
       212 
212 
     | 
    
         
             
                proc {:x << 1}.sql.should == "x = 1"
         
     | 
| 
       213 
213 
     | 
    
         
             
              end
         
     | 
| 
       214 
214 
     | 
    
         | 
| 
       215 
     | 
    
         
            -
               
     | 
| 
      
 215 
     | 
    
         
            +
              pt_specify "should concatenate separate statements using AND" do
         
     | 
| 
       216 
216 
     | 
    
         
             
                proc {:x == 20; :y == 30}.sql.should == "((x = 20) AND (y = 30))"
         
     | 
| 
       217 
217 
     | 
    
         
             
                proc {:x != 1; :y != 2; :z != 3}.sql.should == \
         
     | 
| 
       218 
218 
     | 
    
         
             
                  "((NOT (x = 1)) AND (NOT (y = 2)) AND (NOT (z = 3)))"
         
     | 
| 
       219 
219 
     | 
    
         
             
              end
         
     | 
| 
       220 
220 
     | 
    
         | 
| 
       221 
     | 
    
         
            -
               
     | 
| 
      
 221 
     | 
    
         
            +
              pt_specify "should concatenate separate statements using custom join argument" do
         
     | 
| 
       222 
222 
     | 
    
         
             
                proc {:x << 20; :y << 30}.sql_comma_separated.should == "x = 20, y = 30"
         
     | 
| 
       223 
223 
     | 
    
         
             
                z = 333
         
     | 
| 
       224 
224 
     | 
    
         
             
                proc {:x << :x + 1; :y << z}.sql_comma_separated.should == "x = (x + 1), y = 333"
         
     | 
| 
       225 
225 
     | 
    
         
             
              end
         
     | 
| 
       226 
226 
     | 
    
         | 
| 
       227 
     | 
    
         
            -
               
     | 
| 
      
 227 
     | 
    
         
            +
              pt_specify "should support || operator" do
         
     | 
| 
       228 
228 
     | 
    
         
             
                proc {1 || 2}.sql.should == "(1 OR 2)"
         
     | 
| 
       229 
229 
     | 
    
         
             
                proc {:x > 100 || :y < 100}.sql.should == "((x > 100) OR (y < 100))"
         
     | 
| 
       230 
230 
     | 
    
         
             
                proc {:x || :y || :z}.sql.should == "(x OR (y OR z))"
         
     | 
| 
       231 
231 
     | 
    
         
             
              end
         
     | 
| 
       232 
232 
     | 
    
         | 
| 
       233 
     | 
    
         
            -
               
     | 
| 
      
 233 
     | 
    
         
            +
              pt_specify "should support operator combinations" do
         
     | 
| 
       234 
234 
     | 
    
         
             
                proc {(:x > 1 || :y > 2) && (:z > 3)}.sql.should == "(((x > 1) OR (y > 2)) AND (z > 3))"
         
     | 
| 
       235 
235 
     | 
    
         
             
                proc {(1 && 2) || (3 || 4)}.sql.should == "((1 AND 2) OR (3 OR 4))"
         
     | 
| 
       236 
236 
     | 
    
         
             
                proc {(:x != 2) || (:y == 3) || !(:z == 4)}.sql.should == \
         
     | 
| 
       237 
237 
     | 
    
         
             
                  "((NOT (x = 2)) OR ((y = 3) OR (NOT (z = 4))))"
         
     | 
| 
       238 
238 
     | 
    
         
             
              end
         
     | 
| 
       239 
239 
     | 
    
         | 
| 
       240 
     | 
    
         
            -
               
     | 
| 
      
 240 
     | 
    
         
            +
              pt_specify "should support late bound column references" do
         
     | 
| 
       241 
241 
     | 
    
         
             
                def abc; :tttt; end
         
     | 
| 
       242 
242 
     | 
    
         
             
                proc {abc > 2}.sql.should == "(tttt > 2)"
         
     | 
| 
       243 
243 
     | 
    
         
             
              end
         
     | 
| 
       244 
244 
     | 
    
         | 
| 
       245 
     | 
    
         
            -
               
     | 
| 
      
 245 
     | 
    
         
            +
              pt_specify "should support qualified column references" do
         
     | 
| 
       246 
246 
     | 
    
         
             
                proc {:x__y > 3}.sql.should == "(x.y > 3)"
         
     | 
| 
       247 
247 
     | 
    
         
             
              end
         
     | 
| 
       248 
248 
     | 
    
         | 
| 
       249 
     | 
    
         
            -
               
     | 
| 
      
 249 
     | 
    
         
            +
              pt_specify "should support functions on columns" do
         
     | 
| 
       250 
250 
     | 
    
         
             
                proc {:max[:x] > 100}.sql.should == "(max(x) > 100)"
         
     | 
| 
       251 
251 
     | 
    
         
             
                proc {:count[:x] > 100}.sql.should == "(count(x) > 100)"
         
     | 
| 
       252 
252 
     | 
    
         
             
              end
         
     | 
| 
       253 
253 
     | 
    
         | 
| 
       254 
     | 
    
         
            -
               
     | 
| 
      
 254 
     | 
    
         
            +
              pt_specify "should support SQL functions" do
         
     | 
| 
       255 
255 
     | 
    
         
             
                proc {:MAX[:x] > 100}.sql.should == "(MAX(x) > 100)"
         
     | 
| 
       256 
256 
     | 
    
         | 
| 
       257 
257 
     | 
    
         
             
                proc {:MAX[:x__y] > 100}.sql.should == "(MAX(x.y) > 100)"
         
     | 
| 
       258 
258 
     | 
    
         
             
              end
         
     | 
| 
       259 
259 
     | 
    
         | 
| 
       260 
     | 
    
         
            -
               
     | 
| 
      
 260 
     | 
    
         
            +
              pt_specify "should support SQL functions with multiple arguments" do
         
     | 
| 
       261 
261 
     | 
    
         
             
                proc {:sum[1, 2, 3] > 100}.sql.should == "(sum(1, 2, 3) > 100)"
         
     | 
| 
       262 
262 
     | 
    
         | 
| 
       263 
263 
     | 
    
         
             
                proc {:x[1, DB[:y].select(:z), "a'b"] > 100}.sql.should == \
         
     | 
| 
       264 
264 
     | 
    
         
             
                  "(x(1, (SELECT z FROM y), 'a''b') > 100)"
         
     | 
| 
       265 
265 
     | 
    
         
             
              end
         
     | 
| 
       266 
266 
     | 
    
         | 
| 
       267 
     | 
    
         
            -
               
     | 
| 
      
 267 
     | 
    
         
            +
              pt_specify "should support SQL functions without arguments" do
         
     | 
| 
       268 
268 
     | 
    
         
             
                proc {:abc[] > 100}.sql.should == "(abc() > 100)"
         
     | 
| 
       269 
269 
     | 
    
         | 
| 
       270 
270 
     | 
    
         
             
                proc {:now[] - :last_stamp > 100}.sql.should == \
         
     | 
| 
       271 
271 
     | 
    
         
             
                  "((now() - last_stamp) > 100)"
         
     | 
| 
       272 
272 
     | 
    
         
             
              end
         
     | 
| 
       273 
273 
     | 
    
         | 
| 
       274 
     | 
    
         
            -
               
     | 
| 
      
 274 
     | 
    
         
            +
              pt_specify "should do stuff like..." do
         
     | 
| 
       275 
275 
     | 
    
         
             
                proc {:price < 100 || :category != 'ruby'}.sql.should == \
         
     | 
| 
       276 
276 
     | 
    
         
             
                  "((price < 100) OR (NOT (category = 'ruby')))"
         
     | 
| 
       277 
277 
     | 
    
         
             
                t = Time.now
         
     | 
| 
         @@ -281,13 +281,13 @@ context "Proc#to_sql" do 
     | 
|
| 
       281 
281 
     | 
    
         
             
                proc {1 < :x}.sql.should == "(1 < x)"
         
     | 
| 
       282 
282 
     | 
    
         
             
              end
         
     | 
| 
       283 
283 
     | 
    
         | 
| 
       284 
     | 
    
         
            -
               
     | 
| 
      
 284 
     | 
    
         
            +
              pt_specify "should complain if someone is crazy" do
         
     | 
| 
       285 
285 
     | 
    
         
             
                proc {proc {def x; 1; end}.sql}.should raise_error(Sequel::Error::InvalidExpression)
         
     | 
| 
       286 
286 
     | 
    
         
             
                a = 1
         
     | 
| 
       287 
287 
     | 
    
         
             
                proc {proc {a = 1}.sql}.should raise_error(Sequel::Error::InvalidExpression)
         
     | 
| 
       288 
288 
     | 
    
         
             
              end
         
     | 
| 
       289 
289 
     | 
    
         | 
| 
       290 
     | 
    
         
            -
               
     | 
| 
      
 290 
     | 
    
         
            +
              pt_specify "should support comparison to Range objects" do
         
     | 
| 
       291 
291 
     | 
    
         
             
                proc {:x == (1..10)}.sql.should == \
         
     | 
| 
       292 
292 
     | 
    
         
             
                  "(x >= 1 AND x <= 10)"
         
     | 
| 
       293 
293 
     | 
    
         | 
| 
         @@ -308,7 +308,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       308 
308 
     | 
    
         
             
                  "(stamp >= #{DS.literal(t1)} AND stamp <= #{DS.literal(t2)})"
         
     | 
| 
       309 
309 
     | 
    
         
             
              end
         
     | 
| 
       310 
310 
     | 
    
         | 
| 
       311 
     | 
    
         
            -
               
     | 
| 
      
 311 
     | 
    
         
            +
              pt_specify "should support comparison to sub-queries" do
         
     | 
| 
       312 
312 
     | 
    
         
             
                @ds2 = DB[:test].select(:node_id)
         
     | 
| 
       313 
313 
     | 
    
         | 
| 
       314 
314 
     | 
    
         
             
                proc {:id == @ds2}.sql.should == \
         
     | 
| 
         @@ -324,17 +324,17 @@ context "Proc#to_sql" do 
     | 
|
| 
       324 
324 
     | 
    
         
             
                  "(price >= (SELECT price FROM items))"
         
     | 
| 
       325 
325 
     | 
    
         
             
              end
         
     | 
| 
       326 
326 
     | 
    
         | 
| 
       327 
     | 
    
         
            -
               
     | 
| 
      
 327 
     | 
    
         
            +
              pt_specify "should support comparison to arrays" do
         
     | 
| 
       328 
328 
     | 
    
         
             
                proc {:id == [1, 3, 7, 15]}.sql.should == \
         
     | 
| 
       329 
329 
     | 
    
         
             
                  "(id IN (1, 3, 7, 15))"
         
     | 
| 
       330 
330 
     | 
    
         
             
              end
         
     | 
| 
       331 
331 
     | 
    
         | 
| 
       332 
     | 
    
         
            -
               
     | 
| 
      
 332 
     | 
    
         
            +
              pt_specify "should not literalize String#expr and String#lit" do
         
     | 
| 
       333 
333 
     | 
    
         
             
                proc {'x'.lit == 1}.sql.should == "(x = 1)"
         
     | 
| 
       334 
334 
     | 
    
         
             
                proc {'x.y'.expr == 1}.sql.should == "(x.y = 1)"
         
     | 
| 
       335 
335 
     | 
    
         
             
              end
         
     | 
| 
       336 
336 
     | 
    
         | 
| 
       337 
     | 
    
         
            -
               
     | 
| 
      
 337 
     | 
    
         
            +
              pt_specify "should support in/in? operator" do
         
     | 
| 
       338 
338 
     | 
    
         
             
                proc {:x.in [3, 4, 5]}.sql.should == "(x IN (3, 4, 5))"
         
     | 
| 
       339 
339 
     | 
    
         
             
                proc {:x.in?(3, 4, 5)}.sql.should == "(x IN (3, 4, 5))"
         
     | 
| 
       340 
340 
     | 
    
         | 
| 
         @@ -345,7 +345,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       345 
345 
     | 
    
         
             
                proc {:x.in @ds2}.sql.should == "(x IN (SELECT node_id FROM test))"
         
     | 
| 
       346 
346 
     | 
    
         
             
              end
         
     | 
| 
       347 
347 
     | 
    
         | 
| 
       348 
     | 
    
         
            -
               
     | 
| 
      
 348 
     | 
    
         
            +
              pt_specify "should support nested procs" do
         
     | 
| 
       349 
349 
     | 
    
         
             
                proc {:x > 10 || proc{:y > 20}}.sql.should == \
         
     | 
| 
       350 
350 
     | 
    
         
             
                  "((x > 10) OR (y > 20))"
         
     | 
| 
       351 
351 
     | 
    
         | 
| 
         @@ -357,7 +357,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       357 
357 
     | 
    
         
             
                  "((x > 10) OR (y > 20))"
         
     | 
| 
       358 
358 
     | 
    
         
             
              end
         
     | 
| 
       359 
359 
     | 
    
         | 
| 
       360 
     | 
    
         
            -
               
     | 
| 
      
 360 
     | 
    
         
            +
              pt_specify "should support unfolding of calls to #each" do
         
     | 
| 
       361 
361 
     | 
    
         
             
                # from http://groups.google.com/group/sequel-talk/browse_thread/thread/54a660568515fbb7
         
     | 
| 
       362 
362 
     | 
    
         
             
                periods = [:day, :week, :month, :year, :alltime]
         
     | 
| 
       363 
363 
     | 
    
         
             
                idx = 1
         
     | 
| 
         @@ -371,7 +371,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       371 
371 
     | 
    
         
             
                  "day[1] = (day[1] + 2), week[1] = (week[1] + 2), month[1] = (month[1] + 2), year[1] = (year[1] + 2), alltime[1] = (alltime[1] + 2)"
         
     | 
| 
       372 
372 
     | 
    
         
             
              end
         
     | 
| 
       373 
373 
     | 
    
         | 
| 
       374 
     | 
    
         
            -
               
     | 
| 
      
 374 
     | 
    
         
            +
              pt_specify "should support unfolding of calls to Hash#each" do
         
     | 
| 
       375 
375 
     | 
    
         
             
                periods = {:month => 3}
         
     | 
| 
       376 
376 
     | 
    
         
             
                idx = 1
         
     | 
| 
       377 
377 
     | 
    
         
             
                pr = proc do
         
     | 
| 
         @@ -382,14 +382,14 @@ context "Proc#to_sql" do 
     | 
|
| 
       382 
382 
     | 
    
         
             
                pr.sql_comma_separated.should == "month = (month + 3)"
         
     | 
| 
       383 
383 
     | 
    
         
             
              end
         
     | 
| 
       384 
384 
     | 
    
         | 
| 
       385 
     | 
    
         
            -
               
     | 
| 
      
 385 
     | 
    
         
            +
              pt_specify "should support local arguments" do
         
     | 
| 
       386 
386 
     | 
    
         
             
                def t(x)
         
     | 
| 
       387 
387 
     | 
    
         
             
                  proc {x > 10}.sql
         
     | 
| 
       388 
388 
     | 
    
         
             
                end
         
     | 
| 
       389 
389 
     | 
    
         
             
                t(:y).should == "(y > 10)"
         
     | 
| 
       390 
390 
     | 
    
         
             
              end
         
     | 
| 
       391 
391 
     | 
    
         | 
| 
       392 
     | 
    
         
            -
               
     | 
| 
      
 392 
     | 
    
         
            +
              pt_specify "should support binary operators on local context" do
         
     | 
| 
       393 
393 
     | 
    
         
             
                XXX = 1
         
     | 
| 
       394 
394 
     | 
    
         
             
                YYY = 2
         
     | 
| 
       395 
395 
     | 
    
         
             
                proc {XXX || YYY}.sql.should == "(1 OR 2)"
         
     | 
| 
         @@ -399,7 +399,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       399 
399 
     | 
    
         
             
                proc {xxx && yyy}.sql.should == "(1 AND 2)"
         
     | 
| 
       400 
400 
     | 
    
         
             
              end
         
     | 
| 
       401 
401 
     | 
    
         | 
| 
       402 
     | 
    
         
            -
               
     | 
| 
      
 402 
     | 
    
         
            +
              pt_specify "should support arithmetics" do
         
     | 
| 
       403 
403 
     | 
    
         
             
                zzz = 300
         
     | 
| 
       404 
404 
     | 
    
         
             
                proc {(:x + 100) > zzz}.sql.should == "((x + 100) > 300)"
         
     | 
| 
       405 
405 
     | 
    
         | 
| 
         @@ -408,22 +408,22 @@ context "Proc#to_sql" do 
     | 
|
| 
       408 
408 
     | 
    
         
             
                proc {:units * :price}.sql.should == "(units * price)"
         
     | 
| 
       409 
409 
     | 
    
         
             
              end
         
     | 
| 
       410 
410 
     | 
    
         | 
| 
       411 
     | 
    
         
            -
               
     | 
| 
      
 411 
     | 
    
         
            +
              pt_specify "should support | operator" do
         
     | 
| 
       412 
412 
     | 
    
         
             
                proc {(:x | 1) > 0}.sql.should == "(x[1] > 0)"
         
     | 
| 
       413 
413 
     | 
    
         
             
                proc {10 | 1}.sql.should == 11
         
     | 
| 
       414 
414 
     | 
    
         
             
              end
         
     | 
| 
       415 
415 
     | 
    
         | 
| 
       416 
     | 
    
         
            -
               
     | 
| 
      
 416 
     | 
    
         
            +
              pt_specify "should support globals" do
         
     | 
| 
       417 
417 
     | 
    
         
             
                $aaaa_zzzz = 400
         
     | 
| 
       418 
418 
     | 
    
         
             
                proc {:x > $aaaa_zzzz}.sql.should == "(x > 400)"
         
     | 
| 
       419 
419 
     | 
    
         
             
              end
         
     | 
| 
       420 
420 
     | 
    
         | 
| 
       421 
     | 
    
         
            -
               
     | 
| 
      
 421 
     | 
    
         
            +
              pt_specify "should support Regexp macros" do
         
     | 
| 
       422 
422 
     | 
    
         
             
                "abc" =~ /(ab)/
         
     | 
| 
       423 
423 
     | 
    
         
             
                proc {:x == $1}.sql.should == "(x = 'ab')"
         
     | 
| 
       424 
424 
     | 
    
         
             
              end
         
     | 
| 
       425 
425 
     | 
    
         | 
| 
       426 
     | 
    
         
            -
               
     | 
| 
      
 426 
     | 
    
         
            +
              pt_specify "should evaluate expression not referring to symbols or literal strings." do
         
     | 
| 
       427 
427 
     | 
    
         
             
                proc {:x > 2 * 3}.sql.should == "(x > 6)"
         
     | 
| 
       428 
428 
     | 
    
         
             
                y = 3
         
     | 
| 
       429 
429 
     | 
    
         
             
                proc {:x > y * 4}.sql.should == "(x > 12)"
         
     | 
| 
         @@ -435,14 +435,14 @@ context "Proc#to_sql" do 
     | 
|
| 
       435 
435 
     | 
    
         
             
                proc {:y == (1 > 2)}.sql.should == "(y = 'f')"
         
     | 
| 
       436 
436 
     | 
    
         
             
              end
         
     | 
| 
       437 
437 
     | 
    
         | 
| 
       438 
     | 
    
         
            -
               
     | 
| 
      
 438 
     | 
    
         
            +
              pt_specify "should support ternary operator" do
         
     | 
| 
       439 
439 
     | 
    
         
             
                y = true
         
     | 
| 
       440 
440 
     | 
    
         
             
                proc {:x > (y ? 1 : 2)}.sql.should == "(x > 1)"
         
     | 
| 
       441 
441 
     | 
    
         | 
| 
       442 
442 
     | 
    
         
             
                proc {((1 > 2) ? :x : :y) > 3}.sql.should == "(y > 3)"
         
     | 
| 
       443 
443 
     | 
    
         
             
              end
         
     | 
| 
       444 
444 
     | 
    
         | 
| 
       445 
     | 
    
         
            -
               
     | 
| 
      
 445 
     | 
    
         
            +
              pt_specify "should support strings with embedded Ruby code in them and literalize them" do
         
     | 
| 
       446 
446 
     | 
    
         
             
                proc {:n == "#{1+2}"}.sql.should == "(n = '3')"
         
     | 
| 
       447 
447 
     | 
    
         | 
| 
       448 
448 
     | 
    
         
             
                y = "12'34"
         
     | 
| 
         @@ -450,14 +450,14 @@ context "Proc#to_sql" do 
     | 
|
| 
       450 
450 
     | 
    
         
             
                proc {:x > "#{y}"}.sql.should == "(x > '12''34')"
         
     | 
| 
       451 
451 
     | 
    
         
             
              end
         
     | 
| 
       452 
452 
     | 
    
         | 
| 
       453 
     | 
    
         
            -
               
     | 
| 
      
 453 
     | 
    
         
            +
              pt_specify "should support format strings and literalize the result" do
         
     | 
| 
       454 
454 
     | 
    
         
             
                prod = 1
         
     | 
| 
       455 
455 
     | 
    
         
             
                proc {:x == "abc%d" % prod}.sql.should == "(x = 'abc1')"
         
     | 
| 
       456 
456 
     | 
    
         | 
| 
       457 
457 
     | 
    
         
             
                proc {:x == ("%d" % prod).lit}.sql.should == "(x = 1)"
         
     | 
| 
       458 
458 
     | 
    
         
             
              end
         
     | 
| 
       459 
459 
     | 
    
         | 
| 
       460 
     | 
    
         
            -
               
     | 
| 
      
 460 
     | 
    
         
            +
              pt_specify "should support conditional filters" do
         
     | 
| 
       461 
461 
     | 
    
         
             
                @criteria = nil
         
     | 
| 
       462 
462 
     | 
    
         
             
                proc {if @criteria; :x.like @criteria; end}.sql.should == nil
         
     | 
| 
       463 
463 
     | 
    
         | 
| 
         @@ -468,7 +468,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       468 
468 
     | 
    
         
             
                proc {if @criteria; :x.like @criteria; else; :x.like 'ddd'; end}.sql.should == "(x LIKE 'ddd')"
         
     | 
| 
       469 
469 
     | 
    
         
             
              end
         
     | 
| 
       470 
470 
     | 
    
         | 
| 
       471 
     | 
    
         
            -
               
     | 
| 
      
 471 
     | 
    
         
            +
              pt_specify "should support more complex conditional filters" do
         
     | 
| 
       472 
472 
     | 
    
         
             
                x, y = true, false
         
     | 
| 
       473 
473 
     | 
    
         
             
                proc {
         
     | 
| 
       474 
474 
     | 
    
         
             
                  if x || y
         
     | 
| 
         @@ -502,7 +502,7 @@ context "Proc#to_sql" do 
     | 
|
| 
       502 
502 
     | 
    
         
             
            end
         
     | 
| 
       503 
503 
     | 
    
         | 
| 
       504 
504 
     | 
    
         
             
            context "Proc#to_sql stock" do
         
     | 
| 
       505 
     | 
    
         
            -
               
     | 
| 
      
 505 
     | 
    
         
            +
              pt_specify "should not support regexps" do
         
     | 
| 
       506 
506 
     | 
    
         
             
                db = Sequel::Database.new
         
     | 
| 
       507 
507 
     | 
    
         
             
                ds = db[:items]
         
     | 
| 
       508 
508 
     | 
    
         |