sequel 3.24.1 → 3.25.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 +28 -0
 - data/doc/association_basics.rdoc +3 -3
 - data/doc/dataset_basics.rdoc +4 -4
 - data/doc/migration.rdoc +6 -5
 - data/doc/opening_databases.rdoc +8 -5
 - data/doc/release_notes/3.25.0.txt +88 -0
 - data/lib/sequel/adapters/jdbc.rb +2 -2
 - data/lib/sequel/adapters/jdbc/postgresql.rb +6 -0
 - data/lib/sequel/adapters/shared/postgres.rb +0 -5
 - data/lib/sequel/adapters/tinytds.rb +1 -2
 - data/lib/sequel/database/schema_generator.rb +6 -4
 - data/lib/sequel/database/schema_methods.rb +17 -6
 - data/lib/sequel/dataset.rb +8 -0
 - data/lib/sequel/dataset/misc.rb +0 -9
 - data/lib/sequel/dataset/query.rb +80 -21
 - data/lib/sequel/extensions/migration.rb +1 -1
 - data/lib/sequel/model/base.rb +15 -6
 - data/lib/sequel/model/errors.rb +1 -1
 - data/lib/sequel/plugins/association_pks.rb +16 -0
 - data/lib/sequel/plugins/update_primary_key.rb +1 -1
 - data/lib/sequel/version.rb +2 -2
 - data/spec/adapters/mysql_spec.rb +7 -0
 - data/spec/core/database_spec.rb +0 -295
 - data/spec/core/dataset_spec.rb +70 -1
 - data/spec/core/expression_filters_spec.rb +39 -0
 - data/spec/core/schema_spec.rb +304 -0
 - data/spec/core/spec_helper.rb +29 -0
 - data/spec/extensions/association_pks_spec.rb +31 -0
 - data/spec/extensions/schema_spec.rb +12 -20
 - data/spec/integration/dataset_test.rb +17 -0
 - data/spec/integration/prepared_statement_test.rb +15 -0
 - data/spec/model/model_spec.rb +60 -0
 - data/spec/model/plugins_spec.rb +17 -0
 - data/spec/model/validations_spec.rb +11 -0
 - metadata +7 -5
 
| 
         @@ -424,7 +424,7 @@ module Sequel 
     | 
|
| 
       424 
424 
     | 
    
         
             
                  @current = opts[:current] || current_migration_version
         
     | 
| 
       425 
425 
     | 
    
         | 
| 
       426 
426 
     | 
    
         
             
                  raise(Error, "No current version available") unless current
         
     | 
| 
       427 
     | 
    
         
            -
                  raise(Error, "No target version available") unless target
         
     | 
| 
      
 427 
     | 
    
         
            +
                  raise(Error, "No target version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target
         
     | 
| 
       428 
428 
     | 
    
         | 
| 
       429 
429 
     | 
    
         
             
                  @direction = current < target ? :up : :down
         
     | 
| 
       430 
430 
     | 
    
         
             
                  @migrations = get_migrations
         
     | 
    
        data/lib/sequel/model/base.rb
    CHANGED
    
    | 
         @@ -326,9 +326,9 @@ module Sequel 
     | 
|
| 
       326 
326 
     | 
    
         
             
                    unless @plugins.include?(m)
         
     | 
| 
       327 
327 
     | 
    
         
             
                      @plugins << m
         
     | 
| 
       328 
328 
     | 
    
         
             
                      m.apply(self, *args, &blk) if m.respond_to?(:apply)
         
     | 
| 
       329 
     | 
    
         
            -
                      include(m::InstanceMethods) if  
     | 
| 
       330 
     | 
    
         
            -
                      extend(m::ClassMethods)if  
     | 
| 
       331 
     | 
    
         
            -
                      if  
     | 
| 
      
 329 
     | 
    
         
            +
                      include(m::InstanceMethods) if plugin_module_defined?(m, :InstanceMethods)
         
     | 
| 
      
 330 
     | 
    
         
            +
                      extend(m::ClassMethods)if plugin_module_defined?(m, :ClassMethods)
         
     | 
| 
      
 331 
     | 
    
         
            +
                      if plugin_module_defined?(m, :DatasetMethods)
         
     | 
| 
       332 
332 
     | 
    
         
             
                        dataset.extend(m::DatasetMethods) if @dataset
         
     | 
| 
       333 
333 
     | 
    
         
             
                        dataset_method_modules << m::DatasetMethods
         
     | 
| 
       334 
334 
     | 
    
         
             
                        meths = m::DatasetMethods.public_instance_methods.reject{|x| NORMAL_METHOD_NAME_REGEXP !~ x.to_s}
         
     | 
| 
         @@ -337,7 +337,7 @@ module Sequel 
     | 
|
| 
       337 
337 
     | 
    
         
             
                    end
         
     | 
| 
       338 
338 
     | 
    
         
             
                    m.configure(self, *args, &blk) if m.respond_to?(:configure)
         
     | 
| 
       339 
339 
     | 
    
         
             
                  end
         
     | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
      
 340 
     | 
    
         
            +
             
     | 
| 
       341 
341 
     | 
    
         
             
                  # Returns primary key attribute hash.  If using a composite primary key
         
     | 
| 
       342 
342 
     | 
    
         
             
                  # value such be an array with values for each primary key in the correct
         
     | 
| 
       343 
343 
     | 
    
         
             
                  # order.  For a standard primary key, value should be an object with a
         
     | 
| 
         @@ -419,7 +419,7 @@ module Sequel 
     | 
|
| 
       419 
419 
     | 
    
         
             
                  def set_dataset(ds, opts={})
         
     | 
| 
       420 
420 
     | 
    
         
             
                    inherited = opts[:inherited]
         
     | 
| 
       421 
421 
     | 
    
         
             
                    @dataset = case ds
         
     | 
| 
       422 
     | 
    
         
            -
                    when Symbol
         
     | 
| 
      
 422 
     | 
    
         
            +
                    when Symbol, SQL::Identifier, SQL::QualifiedIdentifier, SQL::AliasedExpression
         
     | 
| 
       423 
423 
     | 
    
         
             
                      @simple_table = db.literal(ds)
         
     | 
| 
       424 
424 
     | 
    
         
             
                      db[ds]
         
     | 
| 
       425 
425 
     | 
    
         
             
                    when Dataset
         
     | 
| 
         @@ -427,7 +427,7 @@ module Sequel 
     | 
|
| 
       427 
427 
     | 
    
         
             
                      @db = ds.db
         
     | 
| 
       428 
428 
     | 
    
         
             
                      ds
         
     | 
| 
       429 
429 
     | 
    
         
             
                    else
         
     | 
| 
       430 
     | 
    
         
            -
                      raise(Error, "Model.set_dataset takes  
     | 
| 
      
 430 
     | 
    
         
            +
                      raise(Error, "Model.set_dataset takes one of the following classes as an argument: Symbol, SQL::Identifier, SQL::QualifiedIdentifier, SQL::AliasedExpression, Dataset")
         
     | 
| 
       431 
431 
     | 
    
         
             
                    end
         
     | 
| 
       432 
432 
     | 
    
         
             
                    @dataset.row_proc = Proc.new{|r| load(r)}
         
     | 
| 
       433 
433 
     | 
    
         
             
                    @require_modification = Sequel::Model.require_modification.nil? ? @dataset.provides_accurate_rows_matched? : Sequel::Model.require_modification
         
     | 
| 
         @@ -658,6 +658,15 @@ module Sequel 
     | 
|
| 
       658 
658 
     | 
    
         
             
                    Sequel::Plugins.const_get(module_name)
         
     | 
| 
       659 
659 
     | 
    
         
             
                  end
         
     | 
| 
       660 
660 
     | 
    
         | 
| 
      
 661 
     | 
    
         
            +
                  # Check if the plugin module +plugin+ defines the constant named by +submod+.
         
     | 
| 
      
 662 
     | 
    
         
            +
                  def plugin_module_defined?(plugin, submod)
         
     | 
| 
      
 663 
     | 
    
         
            +
                    if RUBY_VERSION >= '1.9'
         
     | 
| 
      
 664 
     | 
    
         
            +
                      plugin.const_defined?(submod, false)
         
     | 
| 
      
 665 
     | 
    
         
            +
                    else
         
     | 
| 
      
 666 
     | 
    
         
            +
                      plugin.const_defined?(submod)
         
     | 
| 
      
 667 
     | 
    
         
            +
                    end
         
     | 
| 
      
 668 
     | 
    
         
            +
                  end
         
     | 
| 
      
 669 
     | 
    
         
            +
              
         
     | 
| 
       661 
670 
     | 
    
         
             
                  # Find the row in the dataset that matches the primary key.  Uses
         
     | 
| 
       662 
671 
     | 
    
         
             
                  # a static SQL optimization if the table and primary key are simple.
         
     | 
| 
       663 
672 
     | 
    
         
             
                  def primary_key_lookup(pk)
         
     | 
    
        data/lib/sequel/model/errors.rb
    CHANGED
    
    | 
         @@ -40,7 +40,7 @@ module Sequel 
     | 
|
| 
       40 
40 
     | 
    
         
             
                  def full_messages
         
     | 
| 
       41 
41 
     | 
    
         
             
                    inject([]) do |m, kv| 
         
     | 
| 
       42 
42 
     | 
    
         
             
                      att, errors = *kv
         
     | 
| 
       43 
     | 
    
         
            -
                      errors.each {|e| m << "#{Array(att).join(ATTRIBUTE_JOINER)} #{e}"}
         
     | 
| 
      
 43 
     | 
    
         
            +
                      errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(ATTRIBUTE_JOINER)} #{e}")}
         
     | 
| 
       44 
44 
     | 
    
         
             
                      m
         
     | 
| 
       45 
45 
     | 
    
         
             
                    end
         
     | 
| 
       46 
46 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -56,6 +56,7 @@ module Sequel 
     | 
|
| 
       56 
56 
     | 
    
         
             
                        _join_table_dataset(opts).filter(opts[:left_key]=>send(opts[:left_primary_key])).select_map(opts[:right_key])
         
     | 
| 
       57 
57 
     | 
    
         
             
                      end
         
     | 
| 
       58 
58 
     | 
    
         
             
                      def_association_pks_setter(opts) do |pks|
         
     | 
| 
      
 59 
     | 
    
         
            +
                        pks = convert_pk_array(opts, pks)
         
     | 
| 
       59 
60 
     | 
    
         
             
                        checked_transaction do
         
     | 
| 
       60 
61 
     | 
    
         
             
                          ds = _join_table_dataset(opts).filter(opts[:left_key]=>send(opts[:left_primary_key]))
         
     | 
| 
       61 
62 
     | 
    
         
             
                          ds.exclude(opts[:right_key]=>pks).delete
         
     | 
| 
         @@ -74,6 +75,7 @@ module Sequel 
     | 
|
| 
       74 
75 
     | 
    
         
             
                        send(opts.dataset_method).select_map(opts.associated_class.primary_key)
         
     | 
| 
       75 
76 
     | 
    
         
             
                      end
         
     | 
| 
       76 
77 
     | 
    
         
             
                      def_association_pks_setter(opts) do |pks|
         
     | 
| 
      
 78 
     | 
    
         
            +
                        pks = convert_pk_array(opts, pks)
         
     | 
| 
       77 
79 
     | 
    
         
             
                        checked_transaction do
         
     | 
| 
       78 
80 
     | 
    
         
             
                          ds = send(opts.dataset_method)
         
     | 
| 
       79 
81 
     | 
    
         
             
                          primary_key = opts.associated_class.primary_key
         
     | 
| 
         @@ -84,6 +86,20 @@ module Sequel 
     | 
|
| 
       84 
86 
     | 
    
         
             
                      end
         
     | 
| 
       85 
87 
     | 
    
         
             
                    end
         
     | 
| 
       86 
88 
     | 
    
         
             
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                  module InstanceMethods
         
     | 
| 
      
 91 
     | 
    
         
            +
                    private
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                    # If the associated class's primary key column type is integer,
         
     | 
| 
      
 94 
     | 
    
         
            +
                    # typecast all provided values to integer before using them.
         
     | 
| 
      
 95 
     | 
    
         
            +
                    def convert_pk_array(opts, pks)
         
     | 
| 
      
 96 
     | 
    
         
            +
                      if klass = opts.associated_class and sch = klass.db_schema and col = sch[klass.primary_key] and col[:type] == :integer
         
     | 
| 
      
 97 
     | 
    
         
            +
                        pks.map{|pk| model.db.typecast_value(:integer, pk)}
         
     | 
| 
      
 98 
     | 
    
         
            +
                      else
         
     | 
| 
      
 99 
     | 
    
         
            +
                        pks
         
     | 
| 
      
 100 
     | 
    
         
            +
                      end
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
      
 102 
     | 
    
         
            +
                  end
         
     | 
| 
       87 
103 
     | 
    
         
             
                end
         
     | 
| 
       88 
104 
     | 
    
         
             
              end
         
     | 
| 
       89 
105 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Sequel
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Plugins
         
     | 
| 
       3 
     | 
    
         
            -
                # The update_primary_key plugin allows you to modify an  
     | 
| 
      
 3 
     | 
    
         
            +
                # The update_primary_key plugin allows you to modify an object's
         
     | 
| 
       4 
4 
     | 
    
         
             
                # primary key and then save the record.  Sequel does not work
         
     | 
| 
       5 
5 
     | 
    
         
             
                # correctly with primary key modifications by default.  Sequel
         
     | 
| 
       6 
6 
     | 
    
         
             
                # is designed to work with surrogate primary keys that never need to be
         
     | 
    
        data/lib/sequel/version.rb
    CHANGED
    
    | 
         @@ -3,10 +3,10 @@ module Sequel 
     | 
|
| 
       3 
3 
     | 
    
         
             
              MAJOR = 3
         
     | 
| 
       4 
4 
     | 
    
         
             
              # The minor version of Sequel.  Bumped for every non-patch level
         
     | 
| 
       5 
5 
     | 
    
         
             
              # release, generally around once a month.
         
     | 
| 
       6 
     | 
    
         
            -
              MINOR =  
     | 
| 
      
 6 
     | 
    
         
            +
              MINOR = 25
         
     | 
| 
       7 
7 
     | 
    
         
             
              # The tiny version of Sequel.  Usually 0, only bumped for bugfix
         
     | 
| 
       8 
8 
     | 
    
         
             
              # releases that fix regressions from previous versions.
         
     | 
| 
       9 
     | 
    
         
            -
              TINY  =  
     | 
| 
      
 9 
     | 
    
         
            +
              TINY  = 0
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              # The version of Sequel you are using, as a string (e.g. "2.11.0")
         
     | 
| 
       12 
12 
     | 
    
         
             
              VERSION = [MAJOR, MINOR, TINY].join('.')
         
     | 
    
        data/spec/adapters/mysql_spec.rb
    CHANGED
    
    | 
         @@ -998,6 +998,13 @@ if MYSQL_DB.adapter_scheme == :mysql or MYSQL_DB.adapter_scheme == :jdbc 
     | 
|
| 
       998 
998 
     | 
    
         
             
                  @d.row_proc = proc{|r| r.keys.each{|k| r[k] *= 2 if r[k].is_a?(Integer)}; r}
         
     | 
| 
       999 
999 
     | 
    
         
             
                  @d.call_sproc(:select, :test_sproc, 3, 4).should == [{:id=>nil, :value=>2, :b=>6, :d => 8}]
         
     | 
| 
       1000 
1000 
     | 
    
         
             
                end
         
     | 
| 
      
 1001 
     | 
    
         
            +
             
     | 
| 
      
 1002 
     | 
    
         
            +
                specify "should deal with nil values" do
         
     | 
| 
      
 1003 
     | 
    
         
            +
                  MYSQL_DB.execute_ddl('CREATE PROCEDURE test_sproc(i INTEGER, v INTEGER) BEGIN INSERT INTO items VALUES (i, v); END')
         
     | 
| 
      
 1004 
     | 
    
         
            +
                  MYSQL_DB[:items].delete
         
     | 
| 
      
 1005 
     | 
    
         
            +
                  MYSQL_DB.call_sproc(:test_sproc, :args=>[1, nil])
         
     | 
| 
      
 1006 
     | 
    
         
            +
                  MYSQL_DB[:items].all.should == [{:id=>1, :value=>nil}]
         
     | 
| 
      
 1007 
     | 
    
         
            +
                end
         
     | 
| 
       1001 
1008 
     | 
    
         
             
              end
         
     | 
| 
       1002 
1009 
     | 
    
         
             
            end
         
     | 
| 
       1003 
1010 
     | 
    
         | 
    
        data/spec/core/database_spec.rb
    CHANGED
    
    | 
         @@ -478,233 +478,6 @@ describe "Database#test_connection" do 
     | 
|
| 
       478 
478 
     | 
    
         
             
              end
         
     | 
| 
       479 
479 
     | 
    
         
             
            end
         
     | 
| 
       480 
480 
     | 
    
         | 
| 
       481 
     | 
    
         
            -
            class DummyDataset < Sequel::Dataset
         
     | 
| 
       482 
     | 
    
         
            -
              def first
         
     | 
| 
       483 
     | 
    
         
            -
                raise if @opts[:from] == [:a]
         
     | 
| 
       484 
     | 
    
         
            -
                true
         
     | 
| 
       485 
     | 
    
         
            -
              end
         
     | 
| 
       486 
     | 
    
         
            -
            end
         
     | 
| 
       487 
     | 
    
         
            -
             
     | 
| 
       488 
     | 
    
         
            -
            class DummyDatabase < Sequel::Database
         
     | 
| 
       489 
     | 
    
         
            -
              attr_reader :sqls
         
     | 
| 
       490 
     | 
    
         
            -
              
         
     | 
| 
       491 
     | 
    
         
            -
              def execute(sql, opts={})
         
     | 
| 
       492 
     | 
    
         
            -
                @sqls ||= []
         
     | 
| 
       493 
     | 
    
         
            -
                @sqls << sql
         
     | 
| 
       494 
     | 
    
         
            -
              end
         
     | 
| 
       495 
     | 
    
         
            -
              
         
     | 
| 
       496 
     | 
    
         
            -
              def transaction; yield; end
         
     | 
| 
       497 
     | 
    
         
            -
             
     | 
| 
       498 
     | 
    
         
            -
              def dataset
         
     | 
| 
       499 
     | 
    
         
            -
                DummyDataset.new(self)
         
     | 
| 
       500 
     | 
    
         
            -
              end
         
     | 
| 
       501 
     | 
    
         
            -
            end
         
     | 
| 
       502 
     | 
    
         
            -
             
     | 
| 
       503 
     | 
    
         
            -
            describe "Database#create_table" do
         
     | 
| 
       504 
     | 
    
         
            -
              before do
         
     | 
| 
       505 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       506 
     | 
    
         
            -
              end
         
     | 
| 
       507 
     | 
    
         
            -
              
         
     | 
| 
       508 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       509 
     | 
    
         
            -
                @db.create_table :test do
         
     | 
| 
       510 
     | 
    
         
            -
                  primary_key :id, :integer, :null => false
         
     | 
| 
       511 
     | 
    
         
            -
                  column :name, :text
         
     | 
| 
       512 
     | 
    
         
            -
                  index :name, :unique => true
         
     | 
| 
       513 
     | 
    
         
            -
                end
         
     | 
| 
       514 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       515 
     | 
    
         
            -
                  'CREATE TABLE test (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name text)',
         
     | 
| 
       516 
     | 
    
         
            -
                  'CREATE UNIQUE INDEX test_name_index ON test (name)'
         
     | 
| 
       517 
     | 
    
         
            -
                ]
         
     | 
| 
       518 
     | 
    
         
            -
              end
         
     | 
| 
       519 
     | 
    
         
            -
              
         
     | 
| 
       520 
     | 
    
         
            -
              specify "should create a temporary table" do
         
     | 
| 
       521 
     | 
    
         
            -
                @db.create_table :test_tmp, :temp => true do
         
     | 
| 
       522 
     | 
    
         
            -
                  primary_key :id, :integer, :null => false
         
     | 
| 
       523 
     | 
    
         
            -
                  column :name, :text
         
     | 
| 
       524 
     | 
    
         
            -
                  index :name, :unique => true
         
     | 
| 
       525 
     | 
    
         
            -
                end
         
     | 
| 
       526 
     | 
    
         
            -
                
         
     | 
| 
       527 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       528 
     | 
    
         
            -
                  'CREATE TEMPORARY TABLE test_tmp (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name text)',
         
     | 
| 
       529 
     | 
    
         
            -
                  'CREATE UNIQUE INDEX test_tmp_name_index ON test_tmp (name)'
         
     | 
| 
       530 
     | 
    
         
            -
                ]
         
     | 
| 
       531 
     | 
    
         
            -
              end
         
     | 
| 
       532 
     | 
    
         
            -
             
     | 
| 
       533 
     | 
    
         
            -
              specify "should not use default schema when creating a temporary table" do
         
     | 
| 
       534 
     | 
    
         
            -
                @db.default_schema = :foo
         
     | 
| 
       535 
     | 
    
         
            -
                @db.create_table :test_tmp, :temp => true do
         
     | 
| 
       536 
     | 
    
         
            -
                  column :name, :text
         
     | 
| 
       537 
     | 
    
         
            -
                end
         
     | 
| 
       538 
     | 
    
         
            -
                @db.sqls.should == ['CREATE TEMPORARY TABLE test_tmp (name text)']
         
     | 
| 
       539 
     | 
    
         
            -
              end
         
     | 
| 
       540 
     | 
    
         
            -
            end
         
     | 
| 
       541 
     | 
    
         
            -
             
     | 
| 
       542 
     | 
    
         
            -
            describe "Database#alter_table" do
         
     | 
| 
       543 
     | 
    
         
            -
              before do
         
     | 
| 
       544 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       545 
     | 
    
         
            -
              end
         
     | 
| 
       546 
     | 
    
         
            -
              
         
     | 
| 
       547 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       548 
     | 
    
         
            -
                @db.alter_table :xyz do
         
     | 
| 
       549 
     | 
    
         
            -
                  add_column :aaa, :text, :null => false, :unique => true
         
     | 
| 
       550 
     | 
    
         
            -
                  drop_column :bbb
         
     | 
| 
       551 
     | 
    
         
            -
                  rename_column :ccc, :ddd
         
     | 
| 
       552 
     | 
    
         
            -
                  set_column_type :eee, :integer
         
     | 
| 
       553 
     | 
    
         
            -
                  set_column_default :hhh, 'abcd'
         
     | 
| 
       554 
     | 
    
         
            -
                  
         
     | 
| 
       555 
     | 
    
         
            -
                  add_index :fff, :unique => true
         
     | 
| 
       556 
     | 
    
         
            -
                  drop_index :ggg
         
     | 
| 
       557 
     | 
    
         
            -
                end
         
     | 
| 
       558 
     | 
    
         
            -
                
         
     | 
| 
       559 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       560 
     | 
    
         
            -
                  'ALTER TABLE xyz ADD COLUMN aaa text NOT NULL UNIQUE',
         
     | 
| 
       561 
     | 
    
         
            -
                  'ALTER TABLE xyz DROP COLUMN bbb',
         
     | 
| 
       562 
     | 
    
         
            -
                  'ALTER TABLE xyz RENAME COLUMN ccc TO ddd',
         
     | 
| 
       563 
     | 
    
         
            -
                  'ALTER TABLE xyz ALTER COLUMN eee TYPE integer',
         
     | 
| 
       564 
     | 
    
         
            -
                  "ALTER TABLE xyz ALTER COLUMN hhh SET DEFAULT 'abcd'",
         
     | 
| 
       565 
     | 
    
         
            -
                  
         
     | 
| 
       566 
     | 
    
         
            -
                  'CREATE UNIQUE INDEX xyz_fff_index ON xyz (fff)',
         
     | 
| 
       567 
     | 
    
         
            -
                  'DROP INDEX xyz_ggg_index'
         
     | 
| 
       568 
     | 
    
         
            -
                ]
         
     | 
| 
       569 
     | 
    
         
            -
              end
         
     | 
| 
       570 
     | 
    
         
            -
            end
         
     | 
| 
       571 
     | 
    
         
            -
             
     | 
| 
       572 
     | 
    
         
            -
            describe "Database#add_column" do
         
     | 
| 
       573 
     | 
    
         
            -
              before do
         
     | 
| 
       574 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       575 
     | 
    
         
            -
              end
         
     | 
| 
       576 
     | 
    
         
            -
              
         
     | 
| 
       577 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       578 
     | 
    
         
            -
                @db.add_column :test, :name, :text, :unique => true
         
     | 
| 
       579 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       580 
     | 
    
         
            -
                  'ALTER TABLE test ADD COLUMN name text UNIQUE'
         
     | 
| 
       581 
     | 
    
         
            -
                ]
         
     | 
| 
       582 
     | 
    
         
            -
              end
         
     | 
| 
       583 
     | 
    
         
            -
            end
         
     | 
| 
       584 
     | 
    
         
            -
             
     | 
| 
       585 
     | 
    
         
            -
            describe "Database#drop_column" do
         
     | 
| 
       586 
     | 
    
         
            -
              before do
         
     | 
| 
       587 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       588 
     | 
    
         
            -
              end
         
     | 
| 
       589 
     | 
    
         
            -
              
         
     | 
| 
       590 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       591 
     | 
    
         
            -
                @db.drop_column :test, :name
         
     | 
| 
       592 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       593 
     | 
    
         
            -
                  'ALTER TABLE test DROP COLUMN name'
         
     | 
| 
       594 
     | 
    
         
            -
                ]
         
     | 
| 
       595 
     | 
    
         
            -
              end
         
     | 
| 
       596 
     | 
    
         
            -
            end
         
     | 
| 
       597 
     | 
    
         
            -
             
     | 
| 
       598 
     | 
    
         
            -
            describe "Database#rename_column" do
         
     | 
| 
       599 
     | 
    
         
            -
              before do
         
     | 
| 
       600 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       601 
     | 
    
         
            -
              end
         
     | 
| 
       602 
     | 
    
         
            -
              
         
     | 
| 
       603 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       604 
     | 
    
         
            -
                @db.rename_column :test, :abc, :def
         
     | 
| 
       605 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       606 
     | 
    
         
            -
                  'ALTER TABLE test RENAME COLUMN abc TO def'
         
     | 
| 
       607 
     | 
    
         
            -
                ]
         
     | 
| 
       608 
     | 
    
         
            -
              end
         
     | 
| 
       609 
     | 
    
         
            -
            end
         
     | 
| 
       610 
     | 
    
         
            -
             
     | 
| 
       611 
     | 
    
         
            -
            describe "Database#set_column_type" do
         
     | 
| 
       612 
     | 
    
         
            -
              before do
         
     | 
| 
       613 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       614 
     | 
    
         
            -
              end
         
     | 
| 
       615 
     | 
    
         
            -
              
         
     | 
| 
       616 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       617 
     | 
    
         
            -
                @db.set_column_type :test, :name, :integer
         
     | 
| 
       618 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       619 
     | 
    
         
            -
                  'ALTER TABLE test ALTER COLUMN name TYPE integer'
         
     | 
| 
       620 
     | 
    
         
            -
                ]
         
     | 
| 
       621 
     | 
    
         
            -
              end
         
     | 
| 
       622 
     | 
    
         
            -
            end
         
     | 
| 
       623 
     | 
    
         
            -
             
     | 
| 
       624 
     | 
    
         
            -
            describe "Database#set_column_default" do
         
     | 
| 
       625 
     | 
    
         
            -
              before do
         
     | 
| 
       626 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       627 
     | 
    
         
            -
              end
         
     | 
| 
       628 
     | 
    
         
            -
              
         
     | 
| 
       629 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       630 
     | 
    
         
            -
                @db.set_column_default :test, :name, 'zyx'
         
     | 
| 
       631 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       632 
     | 
    
         
            -
                  "ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"
         
     | 
| 
       633 
     | 
    
         
            -
                ]
         
     | 
| 
       634 
     | 
    
         
            -
              end
         
     | 
| 
       635 
     | 
    
         
            -
            end
         
     | 
| 
       636 
     | 
    
         
            -
             
     | 
| 
       637 
     | 
    
         
            -
            describe "Database#add_index" do
         
     | 
| 
       638 
     | 
    
         
            -
              before do
         
     | 
| 
       639 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       640 
     | 
    
         
            -
              end
         
     | 
| 
       641 
     | 
    
         
            -
              
         
     | 
| 
       642 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       643 
     | 
    
         
            -
                @db.add_index :test, :name, :unique => true
         
     | 
| 
       644 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       645 
     | 
    
         
            -
                  'CREATE UNIQUE INDEX test_name_index ON test (name)'
         
     | 
| 
       646 
     | 
    
         
            -
                ]
         
     | 
| 
       647 
     | 
    
         
            -
              end
         
     | 
| 
       648 
     | 
    
         
            -
              
         
     | 
| 
       649 
     | 
    
         
            -
              specify "should accept multiple columns" do
         
     | 
| 
       650 
     | 
    
         
            -
                @db.add_index :test, [:one, :two]
         
     | 
| 
       651 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       652 
     | 
    
         
            -
                  'CREATE INDEX test_one_two_index ON test (one, two)'
         
     | 
| 
       653 
     | 
    
         
            -
                ]
         
     | 
| 
       654 
     | 
    
         
            -
              end
         
     | 
| 
       655 
     | 
    
         
            -
            end
         
     | 
| 
       656 
     | 
    
         
            -
             
     | 
| 
       657 
     | 
    
         
            -
            describe "Database#drop_index" do
         
     | 
| 
       658 
     | 
    
         
            -
              before do
         
     | 
| 
       659 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       660 
     | 
    
         
            -
              end
         
     | 
| 
       661 
     | 
    
         
            -
              
         
     | 
| 
       662 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       663 
     | 
    
         
            -
                @db.drop_index :test, :name
         
     | 
| 
       664 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       665 
     | 
    
         
            -
                  'DROP INDEX test_name_index'
         
     | 
| 
       666 
     | 
    
         
            -
                ]
         
     | 
| 
       667 
     | 
    
         
            -
              end
         
     | 
| 
       668 
     | 
    
         
            -
              
         
     | 
| 
       669 
     | 
    
         
            -
            end
         
     | 
| 
       670 
     | 
    
         
            -
             
     | 
| 
       671 
     | 
    
         
            -
            class Dummy2Database < Sequel::Database
         
     | 
| 
       672 
     | 
    
         
            -
              attr_reader :sql
         
     | 
| 
       673 
     | 
    
         
            -
              def execute(sql); @sql = sql; end
         
     | 
| 
       674 
     | 
    
         
            -
              def transaction; yield; end
         
     | 
| 
       675 
     | 
    
         
            -
            end
         
     | 
| 
       676 
     | 
    
         
            -
             
     | 
| 
       677 
     | 
    
         
            -
            describe "Database#drop_table" do
         
     | 
| 
       678 
     | 
    
         
            -
              before do
         
     | 
| 
       679 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       680 
     | 
    
         
            -
              end
         
     | 
| 
       681 
     | 
    
         
            -
              
         
     | 
| 
       682 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       683 
     | 
    
         
            -
                @db.drop_table :test
         
     | 
| 
       684 
     | 
    
         
            -
                @db.sqls.should == ['DROP TABLE test']
         
     | 
| 
       685 
     | 
    
         
            -
              end
         
     | 
| 
       686 
     | 
    
         
            -
              
         
     | 
| 
       687 
     | 
    
         
            -
              specify "should accept multiple table names" do
         
     | 
| 
       688 
     | 
    
         
            -
                @db.drop_table :a, :bb, :ccc
         
     | 
| 
       689 
     | 
    
         
            -
                @db.sqls.should == [
         
     | 
| 
       690 
     | 
    
         
            -
                  'DROP TABLE a',
         
     | 
| 
       691 
     | 
    
         
            -
                  'DROP TABLE bb',
         
     | 
| 
       692 
     | 
    
         
            -
                  'DROP TABLE ccc'
         
     | 
| 
       693 
     | 
    
         
            -
                ]
         
     | 
| 
       694 
     | 
    
         
            -
              end
         
     | 
| 
       695 
     | 
    
         
            -
            end
         
     | 
| 
       696 
     | 
    
         
            -
             
     | 
| 
       697 
     | 
    
         
            -
            describe "Database#rename_table" do
         
     | 
| 
       698 
     | 
    
         
            -
              before do
         
     | 
| 
       699 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       700 
     | 
    
         
            -
              end
         
     | 
| 
       701 
     | 
    
         
            -
              
         
     | 
| 
       702 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       703 
     | 
    
         
            -
                @db.rename_table :abc, :xyz
         
     | 
| 
       704 
     | 
    
         
            -
                @db.sqls.should == ['ALTER TABLE abc RENAME TO xyz']
         
     | 
| 
       705 
     | 
    
         
            -
              end
         
     | 
| 
       706 
     | 
    
         
            -
            end
         
     | 
| 
       707 
     | 
    
         
            -
             
     | 
| 
       708 
481 
     | 
    
         
             
            describe "Database#table_exists?" do
         
     | 
| 
       709 
482 
     | 
    
         
             
              specify "should try to select the first record from the table's dataset" do
         
     | 
| 
       710 
483 
     | 
    
         
             
                db2 = DummyDatabase.new
         
     | 
| 
         @@ -1282,74 +1055,6 @@ describe "Database#[]" do 
     | 
|
| 
       1282 
1055 
     | 
    
         
             
              end
         
     | 
| 
       1283 
1056 
     | 
    
         
             
            end
         
     | 
| 
       1284 
1057 
     | 
    
         | 
| 
       1285 
     | 
    
         
            -
            describe "Database#create_view" do
         
     | 
| 
       1286 
     | 
    
         
            -
              before do
         
     | 
| 
       1287 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       1288 
     | 
    
         
            -
              end
         
     | 
| 
       1289 
     | 
    
         
            -
              
         
     | 
| 
       1290 
     | 
    
         
            -
              specify "should construct proper SQL with raw SQL" do
         
     | 
| 
       1291 
     | 
    
         
            -
                @db.create_view :test, "SELECT * FROM xyz"
         
     | 
| 
       1292 
     | 
    
         
            -
                @db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
         
     | 
| 
       1293 
     | 
    
         
            -
                @db.sqls.clear
         
     | 
| 
       1294 
     | 
    
         
            -
                @db.create_view :test.identifier, "SELECT * FROM xyz"
         
     | 
| 
       1295 
     | 
    
         
            -
                @db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
         
     | 
| 
       1296 
     | 
    
         
            -
              end
         
     | 
| 
       1297 
     | 
    
         
            -
              
         
     | 
| 
       1298 
     | 
    
         
            -
              specify "should construct proper SQL with dataset" do
         
     | 
| 
       1299 
     | 
    
         
            -
                @db.create_view :test, @db[:items].select(:a, :b).order(:c)
         
     | 
| 
       1300 
     | 
    
         
            -
                @db.sqls.should == ['CREATE VIEW test AS SELECT a, b FROM items ORDER BY c']
         
     | 
| 
       1301 
     | 
    
         
            -
                @db.sqls.clear
         
     | 
| 
       1302 
     | 
    
         
            -
                @db.create_view :test.qualify(:sch), @db[:items].select(:a, :b).order(:c)
         
     | 
| 
       1303 
     | 
    
         
            -
                @db.sqls.should == ['CREATE VIEW sch.test AS SELECT a, b FROM items ORDER BY c']
         
     | 
| 
       1304 
     | 
    
         
            -
              end
         
     | 
| 
       1305 
     | 
    
         
            -
            end
         
     | 
| 
       1306 
     | 
    
         
            -
             
     | 
| 
       1307 
     | 
    
         
            -
            describe "Database#create_or_replace_view" do
         
     | 
| 
       1308 
     | 
    
         
            -
              before do
         
     | 
| 
       1309 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       1310 
     | 
    
         
            -
              end
         
     | 
| 
       1311 
     | 
    
         
            -
              
         
     | 
| 
       1312 
     | 
    
         
            -
              specify "should construct proper SQL with raw SQL" do
         
     | 
| 
       1313 
     | 
    
         
            -
                @db.create_or_replace_view :test, "SELECT * FROM xyz"
         
     | 
| 
       1314 
     | 
    
         
            -
                @db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT * FROM xyz']
         
     | 
| 
       1315 
     | 
    
         
            -
                @db.sqls.clear
         
     | 
| 
       1316 
     | 
    
         
            -
                @db.create_or_replace_view :sch__test, "SELECT * FROM xyz"
         
     | 
| 
       1317 
     | 
    
         
            -
                @db.sqls.should == ['CREATE OR REPLACE VIEW sch.test AS SELECT * FROM xyz']
         
     | 
| 
       1318 
     | 
    
         
            -
              end
         
     | 
| 
       1319 
     | 
    
         
            -
             
     | 
| 
       1320 
     | 
    
         
            -
              specify "should construct proper SQL with dataset" do
         
     | 
| 
       1321 
     | 
    
         
            -
                @db.create_or_replace_view :test, @db[:items].select(:a, :b).order(:c)
         
     | 
| 
       1322 
     | 
    
         
            -
                @db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
         
     | 
| 
       1323 
     | 
    
         
            -
                @db.sqls.clear
         
     | 
| 
       1324 
     | 
    
         
            -
                @db.create_or_replace_view :test.identifier, @db[:items].select(:a, :b).order(:c)
         
     | 
| 
       1325 
     | 
    
         
            -
                @db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
         
     | 
| 
       1326 
     | 
    
         
            -
              end
         
     | 
| 
       1327 
     | 
    
         
            -
            end
         
     | 
| 
       1328 
     | 
    
         
            -
             
     | 
| 
       1329 
     | 
    
         
            -
            describe "Database#drop_view" do
         
     | 
| 
       1330 
     | 
    
         
            -
              before do
         
     | 
| 
       1331 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       1332 
     | 
    
         
            -
              end
         
     | 
| 
       1333 
     | 
    
         
            -
              
         
     | 
| 
       1334 
     | 
    
         
            -
              specify "should construct proper SQL" do
         
     | 
| 
       1335 
     | 
    
         
            -
                @db.drop_view :test
         
     | 
| 
       1336 
     | 
    
         
            -
                @db.drop_view :test.identifier
         
     | 
| 
       1337 
     | 
    
         
            -
                @db.drop_view :sch__test
         
     | 
| 
       1338 
     | 
    
         
            -
                @db.drop_view :test.qualify(:sch)
         
     | 
| 
       1339 
     | 
    
         
            -
                @db.sqls.should == ['DROP VIEW test', 'DROP VIEW test', 'DROP VIEW sch.test', 'DROP VIEW sch.test']
         
     | 
| 
       1340 
     | 
    
         
            -
              end
         
     | 
| 
       1341 
     | 
    
         
            -
            end
         
     | 
| 
       1342 
     | 
    
         
            -
             
     | 
| 
       1343 
     | 
    
         
            -
            describe "Database#alter_table_sql" do
         
     | 
| 
       1344 
     | 
    
         
            -
              before do
         
     | 
| 
       1345 
     | 
    
         
            -
                @db = DummyDatabase.new
         
     | 
| 
       1346 
     | 
    
         
            -
              end
         
     | 
| 
       1347 
     | 
    
         
            -
              
         
     | 
| 
       1348 
     | 
    
         
            -
              specify "should raise error for an invalid op" do
         
     | 
| 
       1349 
     | 
    
         
            -
                proc {@db.send(:alter_table_sql, :mau, :op => :blah)}.should raise_error(Sequel::Error)
         
     | 
| 
       1350 
     | 
    
         
            -
              end
         
     | 
| 
       1351 
     | 
    
         
            -
            end
         
     | 
| 
       1352 
     | 
    
         
            -
             
     | 
| 
       1353 
1058 
     | 
    
         
             
            describe "Database#inspect" do
         
     | 
| 
       1354 
1059 
     | 
    
         
             
              before do
         
     | 
| 
       1355 
1060 
     | 
    
         
             
                @db = DummyDatabase.new
         
     |