1. 09 6月, 2016 3 次提交
  2. 04 6月, 2016 2 次提交
  3. 02 6月, 2016 3 次提交
    • S
      Ensure that records with unselected fields can be updated · c587b636
      Sean Griffin 提交于
      As part of refactoring mutation detection to be more performant, we
      introduced the concept of `original_value` to `Attribute`. This was not
      overridden in `Attribute::Uninitialized` however, so assigning ot an
      uninitialized value and calling `.changed?` would raise
      `NotImplementedError`.
      
      We are using a sentinel value rather than checking the result of
      `original_attribute.initialized?` in `changed?` because `original_value`
      might go through more than one node in the tree.
      
      Fixes #25228
      c587b636
    • S
      Fix failing tests · 1b8a7b82
      Sean Griffin 提交于
      Currently CI is broken due to 56a61e0c and c4cb6862. This occurred because
      the failures are not present on SQLite which is what I normally run
      locally before pushing.
      
      The optimizations to our YAML size were dropping mutations, as
      `with_type` didn't set the previous value if it'd already been read
      (that method was never really designed to be used with values on
      individual objects, it was previously only used for defaults). I'm
      questioning whether there's a better place to be handling the exclusion
      of the type, but this will fix the failing build.
      
      Additionally, there was a bug in `remove_foreign_key` if you passed it
      an options hash containing `to_table`. This now occurs whenever removing
      a reference, as we always normalize to a hash.
      
      [Sean Griffin & Ryuta Kamizono]
      1b8a7b82
    • S
      Add i18n_validation_test · 3bd30d98
      sukesan1984 提交于
      add active record uniqueness validation test for { on: [:create, :update] } condition.
      3bd30d98
  4. 01 6月, 2016 2 次提交
    • S
      Make Active Record emit significantly smaller YAML · c4cb6862
      Sean Griffin 提交于
      This reduces the size of a YAML encoded Active Record object by ~80%
      depending on the number of columns. There were a number of wasteful
      things that occurred when we encoded the objects before that have
      resulted in numerous wins
      
      - We were emitting the result of `attributes_before_type_cast` as a hack
        to work around some laziness issues
      - The name of an attribute was emitted multiple times, since the
        attribute objects were in a hash keyed by the name. We now store them
        in an array instead, and reconstruct the hash using the name
      - The types were included for every attribute. This would use backrefs
        if multiple objects were encoded, but really we don't need to include
        it at all unless it differs from the type at the class level. (The
        only time that will occur is if the field is the result of a custom
        select clause)
      - `original_attribute:` was included over and over and over again since
        the ivar is almost always `nil`. We've added a custom implementation
        of `encode_with` on the attribute objects to ensure we don't write the
        key when the field is `nil`.
      
      This isn't without a cost though. Since we're no longer including the
      types, an object can find itself in an invalid state if the type changes
      on the class after serialization. This is the same as 4.1 and earlier,
      but I think it's worth noting.
      
      I was worried that I'd introduce some new state bugs as a result of
      doing this, so I've added an additional test that asserts mutation not
      being lost as the result of YAML round tripping.
      
      Fixes #25145
      c4cb6862
    • S
      Respect options passed to `foreign_key` when reverting `add_reference` · 56a61e0c
      Sean Griffin 提交于
      The code incorrectly assumes that the option was written as
      `foreign_key: true`, but that is not always the case. This now mirrors
      the behavior of reverting `add_foreign_key`. The code was changed to use
      kwargs while I was touching it, as well.
      
      This could really use a refactoring to go through the same code paths as
      `add_refernce` in the future, so we don't duplicate default values.
      
      Fixes #25169
      56a61e0c
  5. 31 5月, 2016 4 次提交
    • S
      `ActiveRecord::Base#hash` should differ between classes · c8be4574
      Sean Griffin 提交于
      Prior to this change, we would get collisions if Active Record objects
      of different classes with the same ID were used as keys of the same
      hash. It bothers me slightly that we have to allocate inside of this
      method, but Ruby doesn't provide any way to hash multiple values without
      allocation
      c8be4574
    • R
      Do not include default column limit in schema.rb · 706f7e9c
      Ryuta Kamizono 提交于
      Follow up of #20815.
      
      ```ruby
      class CreatePeople < ActiveRecord::Migration[5.0]
        def change
          create_table :people do |t|
            t.integer :int
            t.bigint :bint
            t.text :txt
            t.binary :bin
          end
        end
      end
      ```
      
      Result.
      
      In postgresql and sqlite3 adapters:
      
      ```ruby
      ActiveRecord::Schema.define(version: 20160531141018) do
      
        create_table "people", force: :cascade do |t|
          t.integer "int"
          t.bigint  "bint"
          t.text    "txt"
          t.binary  "bin"
        end
      
      end
      ```
      
      In mysql2 adapter:
      
      ```ruby
      ActiveRecord::Schema.define(version: 20160531141018) do
      
        create_table "people", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" do |t|
          t.integer "int"
          t.bigint  "bint"
          t.text    "txt",  limit: 65535
          t.binary  "bin",  limit: 65535
        end
      
      end
      ```
      
      After this patch:
      
      ```ruby
      ActiveRecord::Schema.define(version: 20160531141018) do
      
        create_table "people", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" do |t|
          t.integer "int"
          t.bigint  "bint"
          t.text    "txt"
          t.binary  "bin"
        end
      
      end
      ```
      706f7e9c
    • S
      Ensure hashes can be passed to attributes using `composed_of` · ff4986b9
      Sean Griffin 提交于
      This behavior was broken by 36e9be85. When the value is assigned
      directly, either through mass assignment or directly assigning a hash,
      the hash gets passed through to this writer method directly. While this
      is intended to handle certain cases, when an explicit converter has been
      provided, we should continue to use that instead. The positioning of the
      added guard caused the new behavior to override that case.
      
      Fixes #25210
      ff4986b9
    • S
      Exists shouldn't error when used with `includes` · 02da8aea
      Sean Griffin 提交于
      Currently `exists?` does some hackery where it assumes that we can join
      onto anything that we passed to `eager_load` or `includes`, which
      doesn't work if we are joining onto a polymorphic association.
      
      Actually figuring out if we want to include something would require
      knowledge deep within the join dependency module, which is hard to pull
      up. The simplest solution is just to pass a flag down that says we're
      not actually going to try to eager load any of the data. It's not the
      solution I'd like, but that code really needs to be untangled before we
      can do much with it.
      
      This is another attempt at 6d5b1fdf which should address the concerns
      that led to reverting it in 4ecabed2.
      02da8aea
  6. 30 5月, 2016 1 次提交
    • R
      Tiny document fixes [ci skip] · 1afdbbeb
      Robin Dupret 提交于
      Add a missing capital letter and avoid using absolute links to the
      API because they may refer to out-dated documentation on the Edge
      site.
      1afdbbeb
  7. 28 5月, 2016 2 次提交
  8. 27 5月, 2016 2 次提交
  9. 25 5月, 2016 4 次提交
  10. 24 5月, 2016 1 次提交
  11. 21 5月, 2016 4 次提交
  12. 20 5月, 2016 1 次提交
  13. 19 5月, 2016 1 次提交
  14. 17 5月, 2016 1 次提交
    • J
      Keep state around for nested calls to #suppress · 25801cfe
      Jahfer Husain 提交于
      If a call to #suppress from the same class occurred inside another #suppress
      block, the suppression state would be set to false before the outer block
      completes.
      
      This change keeps the previous state around in memory and unwinds it
      as the blocks exit.
      25801cfe
  15. 15 5月, 2016 1 次提交
  16. 13 5月, 2016 3 次提交
  17. 12 5月, 2016 4 次提交
  18. 11 5月, 2016 1 次提交
    • A
      Set conn_spec_name after remove · 897decac
      Arthur Neves 提交于
      `remove_connection` can reset the `connection_specification_name`, so we
      need to to set it after the remove_connection call on
      `establish_connection` method.
      897decac