Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #1751: named_sequences_for_oracle.diff

File named_sequences_for_oracle.diff, 6.6 kB (added by crutan@gmail.com, 3 years ago)

Patch diff for named sequence implementation.

  • test/fixtures/db_definitions/oci.sql

    old new  
    216216  id integer not null primary key, 
    217217  fk_id integer not null references fk_test_has_fk initially deferred disable 
    218218); 
     219 
     220create table widgets ( 
     221  widget_id integer not null primary_key, 
     222  widget_name varchar(255) no null, 
     223); 
     224create sequence widget_sq minvalue 10; 
  • lib/active_record/connection_adapters/sqlite_adapter.rb

    old new  
    119119        @connection.changes 
    120120      end 
    121121 
    122       def insert(sql, name = nil, pk = nil, id_value = nil
     122      def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil
    123123        execute(sql, name = nil) 
    124124        id_value || @connection.last_insert_row_id 
    125125      end 
  • lib/active_record/connection_adapters/abstract_adapter.rb

    old new  
    279279      def columns(table_name, name = nil) end 
    280280 
    281281      # Returns the last auto-generated ID from the affected table. 
    282       def insert(sql, name = nil, pk = nil, id_value = nil) end 
     282      def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) end 
    283283 
    284284      # Executes the update statement and returns the number of rows affected. 
    285285      def update(sql, name = nil) end 
  • lib/active_record/connection_adapters/postgresql_adapter.rb

    old new  
    9595        end 
    9696      end 
    9797 
    98       def insert(sql, name = nil, pk = nil, id_value = nil
     98      def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil
    9999        execute(sql, name) 
    100100        table = sql.split(" ", 4)[2] 
    101101        return id_value || last_insert_id(table, pk) 
  • lib/active_record/connection_adapters/mysql_adapter.rb

    old new  
    109109        columns 
    110110      end 
    111111 
    112       def insert(sql, name = nil, pk = nil, id_value = nil
     112      def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil
    113113        execute(sql, name = nil) 
    114114        id_value || @connection.insert_id 
    115115      end 
  • lib/active_record/connection_adapters/sqlserver_adapter.rb

    old new  
    204204        columns 
    205205      end 
    206206 
    207       def insert(sql, name = nil, pk = nil, id_value = nil
     207      def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil
    208208        begin 
    209209          table_name = get_table_name(sql) 
    210210          col = get_identity_column(table_name) 
  • lib/active_record/connection_adapters/db2_adapter.rb

    old new  
    4444          select(sql, name).first 
    4545        end 
    4646 
    47         def insert(sql, name = nil, pk = nil, id_value = nil
     47        def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil
    4848          execute(sql, name = nil) 
    4949          id_value || last_insert_id 
    5050        end 
  • lib/active_record/connection_adapters/oci_adapter.rb

    old new  
    163163          cols 
    164164        end 
    165165 
    166         def insert(sql, name = nil, pk = nil, id_value = nil
     166        def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil
    167167          if pk.nil? # Who called us? What does the sql look like? No idea! 
    168168            execute sql, name 
    169169          elsif id_value # Pre-assigned id 
    170170            log(sql, name) { @connection.exec sql } 
     171                  elsif sequence_name 
     172                    id_value = select_one("select #{sequence_name}.nextval id from dual")['id'] 
     173                        log(sql,name) { @connection.exec sql, id_value } 
    171174          else # Assume the sql contains a bind-variable for the id 
    172175            id_value = select_one("select rails_sequence.nextval id from dual")['id'] 
    173176            log(sql, name) { @connection.exec sql, id_value } 
  • lib/active_record/base.rb

    old new  
    548548        "#{table_name_prefix}#{undecorated_table_name(class_name_of_active_record_descendant(self))}#{table_name_suffix}" 
    549549      end 
    550550 
     551          # sequence name placeholder 
     552          def sequence_name 
     553            nil 
     554          end 
     555 
    551556      # Defines the primary key field -- can be overridden in subclasses. Overwriting will negate any effect of the 
    552557      # primary_key_prefix_type setting, though. 
    553558      def primary_key 
     
    609614      end 
    610615      alias :inheritance_column= :set_inheritance_column 
    611616 
     617          # Sets the name of the sequence to be used for this class 
     618          # no effect if not set, will treat as an auto-increment table  
     619          # or use 'rails_sequence' (for oci) 
     620 
     621          def set_sequence_name( value=nil, &block ) 
     622            define_attr_method :sequence_name, value, &block 
     623          end 
     624          alias :sequence_name= :set_sequence_name 
     625 
    612626      # Turns the +table_name+ back into a class name following the reverse rules of +table_name+. 
    613627      def class_name(table_name = table_name) # :nodoc: 
    614628        # remove any prefix and/or suffix from the table name 
     
    11571171          "(#{quoted_column_names.join(', ')}) " + 
    11581172          "VALUES(#{attributes_with_quotes.values.join(', ')})", 
    11591173          "#{self.class.name} Create", 
    1160           self.class.primary_key, self.id 
     1174          self.class.primary_key, self.id, self.class.sequence_name 
    11611175        ) 
    11621176 
    11631177        @new_record = false