1. 31 12月, 2014 1 次提交
  2. 30 12月, 2014 5 次提交
  3. 28 12月, 2014 4 次提交
  4. 27 12月, 2014 13 次提交
  5. 26 12月, 2014 1 次提交
  6. 24 12月, 2014 1 次提交
  7. 23 12月, 2014 10 次提交
    • M
      Fix connection leak when a thread checks in additional connections. · 5e024070
      Matt Jones 提交于
      The code in `ConnectionPool#release` assumed that a single thread only
      ever holds a single connection, and thus that releasing a connection
      only requires the owning thread_id.
      
      There is a trivial counterexample to this assumption: code that checks
      out additional connections from the pool in the same thread. For
      instance:
      
          connection_1 = ActiveRecord::Base.connection
          connection_2 = ActiveRecord::Base.connection_pool.checkout
          ActiveRecord::Base.connection_pool.checkin(connection_2)
          connection_3 = ActiveRecord::Base.connection
      
      At this point, connection_1 has been removed from the
      `@reserved_connections` hash, causing a NEW connection to be returned as
      connection_3 and the loss of any tracking info on connection_1. As long
      as the thread in this example lives, connection_1 will be inaccessible
      and un-reapable. If this block of code runs more times than the size of
      the connection pool in a single thread, every subsequent connection
      attempt will timeout, as all of the available connections have been
      leaked.
      
      Reverts parts of 9e457a86 and
      essentially all of 4367d2f0
      5e024070
    • D
      Fixing numeric attrs when set to same negative value · 2859341c
      Daniel Fox 提交于
      This bug occurs when an attribute of an ActiveRecord model is an
      ActiveRecord::Type::Integer type or a ActiveRecord::Type::Decimal type (or any
      other type that includes the ActiveRecord::Type::Numeric module. When the value
      of the attribute is negative and is set to the same negative value, it is marked
      as changed.
      
      Take the following example of a Person model with the integer attribute age:
      
          class Person < ActiveRecord::Base
            # age          :integer(4)
          end
      
      The following will produce the error:
      
          person = Person.new(age: -1)
          person.age = -1
          person.changes
          => { "age" => [-1, -1] }
          person.age_changed?
          => true
      
      The problematic line is here:
      
          module ActiveRecord
            module Type
              module Numeric
                ...
      
                def non_numeric_string?(value)
                  # 'wibble'.to_i will give zero, we want to make sure
                  # that we aren't marking int zero to string zero as
                  # changed.
                  value.to_s !~ /\A\d+\.?\d*\z/
                end
              end
            end
          end
      
      The regex match doesn't accept numbers with a leading '-'.
      2859341c
    • G
      Don't raise on out-of-range datetimes passed by a user · d318badc
      Grey Baker 提交于
      d318badc
    • S
      Don't perform statement caching for `find` when called from a scope · fb160f6e
      Sean Griffin 提交于
      If there is a method defined such as `find_and_do_stuff(id)`, which then
      gets called on an association, we will perform statement caching and the
      parent ID will not change on subsequent calls.
      
      Fixes #18117
      fb160f6e
    • S
      Don't calculate all in-place changes to determine if attribute_changed? · 18ae0656
      Sean Griffin 提交于
      Calling `changed_attributes` will ultimately check if every mutable
      attribute has changed in place. Since this gets called whenever an
      attribute is assigned, it's extremely slow. Instead, we can avoid this
      calculation until we actually need it.
      
      Fixes #18029
      18ae0656
    • S
      Don't wrap `create_table` in a transaction for tests which run on MySQL · 84927431
      Sean Griffin 提交于
      PG will warn without it, but mysql2 errors out.
      84927431
    • S
      Add `foreign_key` as an option to `references` for `change_table` · 82afeaf2
      Sean Griffin 提交于
      This has the same comments as 9af90ffa00ba35bdee888e3e1ab775ba0bdbe72c,
      however it affects the `add_reference` method, and `t.references` in the
      context of a `change_table` block.
      
      There is a lot of duplication of code between creating and updating
      tables. We should re-evaluate the structure of this code from a high
      level so changes like this don't need to be made in two places. (Note to
      self)
      82afeaf2
    • S
      Add a `foreign_key` option to `references` while creating the table · 99a6f9e6
      Sean Griffin 提交于
      Rather than having to do:
      
          create_table :posts do |t|
            t.references :user
          end
      
          add_foreign_key :posts, :users
      
      You can instead do:
      
          create_table :posts do |t|
            t.references :user, foreign_key: true
          end
      
      Similar to the `index` option, you can also pass a hash. This will be
      passed as the options to `add_foreign_key`. e.g.:
      
          create_table :posts do |t|
            t.references :user, foreign_key: { primary_key: :other_id }
          end
      
      is equivalent to
      
          create_table :posts do |t|
            t.references :user
          end
      
          add_foreign_key :posts, :users, primary_key: :other_id
      99a6f9e6
    • S
      Add `force: true` to table created in tests · 32f30d22
      Sean Griffin 提交于
      If the test is interrupted in a way that the teardown block fails to
      run, the tests will fail to run until the table is removed manually
      without this option.
      32f30d22
    • S
      Correctly handle limit on int4 and int8 types in PG · b0f2b94d
      Sean Griffin 提交于
      PG doesn't register it's types using the `int(4)` format that others do.
      As such, if we alias `int8` to the other integer types, the range
      information is lost. This is fixed by simply registering it separately.
      
      The other option (which I specifically chose to avoid) is to pass the
      information of the original type that was being aliased as an argument.
      I'd rather avoid that, since an alias should truly be treated the same.
      If we need different behavior for a different type, we should explicitly
      register it with that, and not have a conditional based on aliasing.
      
      Fixes #18144
      
      [Sean Griffin & ysbaddaden]
      b0f2b94d
  8. 22 12月, 2014 1 次提交
  9. 19 12月, 2014 1 次提交
  10. 18 12月, 2014 1 次提交
    • G
      Relax the UUID regex · c115a84c
      Godfrey Chan 提交于
      Apparently PG does not validate against RFC 4122. The intent of the original
      patch is just to protect against PG errors (which potentially breaks txns, etc)
      because of bad user input, so we shouldn't try any harder than PG itself.
      
      Closes #17931
      c115a84c
  11. 17 12月, 2014 2 次提交
    • R
      Remove unused line · 7da314bb
      Ryuta Kamizono 提交于
      7da314bb
    • S
      `update_column` take ruby-land input, not database-land input · dd8b5fb9
      Sean Griffin 提交于
      In the case of serialized columns, we would expect the unserialized
      value as input, not the serialized value. The original issue which made
      this distinction, #14163, introduced a bug. If you passed serialized
      input to the method, it would double serialize when it was sent to the
      database. You would see the wrong input upon reloading, or get an error
      if you had a specific type on the serialized column.
      
      To put it another way, `update_column` is a special case of
      `update_all`, which would take `['a']` and not `['a'].to_yaml`, but you
      would not pass data from `params` to it.
      
      Fixes #18037
      dd8b5fb9