1. 25 4月, 2016 2 次提交
  2. 14 4月, 2016 1 次提交
    • S
      Properly serialize all JSON primitives in the AR JSON type · efaa6e4f
      Sean Griffin 提交于
      Previously we were assuming that the only valid types for encoding were
      arrays and hashes. However, any JSON primitive is an accepted value by
      both PG and MySQL.
      
      This does involve a minor breaking change in the handling of `default`
      in the schema dumper. This is easily worked around, as passing a
      hash/array literal would have worked fine in previous versions of Rails.
      However, because of this, I will not be backporting this to 4.2 or
      earlier.
      
      Fixes #24234
      efaa6e4f
  3. 12 3月, 2016 1 次提交
  4. 08 3月, 2016 2 次提交
  5. 04 3月, 2016 1 次提交
    • R
      Fix bigserial appears with limit 8 for schema dumper · a449b073
      Ryuta Kamizono 提交于
      Before:
      
      ```ruby
      create_table "postgresql_big_serials", force: :cascade do |t|
        t.bigserial "seq", limit: 8, null: false
      end
      ```
      
      After:
      
      ```ruby
      create_table "postgresql_big_serials", force: :cascade do |t|
        t.bigserial "seq", null: false
      end
      ```
      a449b073
  6. 02 3月, 2016 1 次提交
  7. 29 2月, 2016 2 次提交
  8. 22 2月, 2016 1 次提交
  9. 03 2月, 2016 1 次提交
  10. 01 2月, 2016 3 次提交
  11. 15 1月, 2016 1 次提交
  12. 14 1月, 2016 1 次提交
  13. 13 1月, 2016 1 次提交
  14. 09 1月, 2016 1 次提交
    • S
      Refactor tz aware types, add support for PG ranges · 302e9235
      Sean Griffin 提交于
      This is an alternate implementation to #22875, that generalizes a lot of
      the logic that type decorators are going to need, in order to have them
      work with arrays, ranges, etc. The types have the ability to map over a
      value, with the default implementation being to just yield that given
      value. Array and Range give more appropriate definitions.
      
      This does not automatically make ranges time zone aware, as they need to
      be added to the `time_zone_aware` types config, but we could certainly
      make that change if we feel it is appropriate. I do think this would be
      a breaking change however, and should at least have a deprecation cycle.
      
      Closes #22875.
      
      /cc @matthewd
      302e9235
  15. 01 1月, 2016 1 次提交
    • F
      Remove unnecessary enable,disable_extension on tests · 2f684561
      Fumiaki MATSUSHIMA 提交于
      uuid-ossp extension is alreadly enabled on test schema.
      And `disable_extension!('uuid-ossp', connection)` can be a cause of test failure.
      `ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR:  function uuid_generate_v1() does not exist`
      will happen depending on the execution order.
      2f684561
  16. 18 12月, 2015 2 次提交
  17. 17 12月, 2015 1 次提交
    • G
      Support passing the schema name prefix to `conenction.indexes` · d927f35b
      Grey Baker 提交于
      Support passing the schema name as a prefix to table name in
      `ConnectionAdapters::SchemaStatements#indexes`. Previously the prefix would
      be considered a full part of the index name, and only the schema in the
      current search path would be considered.
      d927f35b
  18. 16 12月, 2015 1 次提交
  19. 15 12月, 2015 2 次提交
  20. 05 12月, 2015 1 次提交
    • Y
      remove warning from postgresql geometric test · 4ab20ed5
      yuuji.yaginuma 提交于
      This removes the following warning which has been out in the case of a PostgreSQL 9.3 below.
      
      ```
      activerecord/test/cases/adapters/postgresql/geometric_test.rb:265: warning: instance variable @connection not initialized
      ```
      4ab20ed5
  21. 24 11月, 2015 2 次提交
  22. 18 11月, 2015 1 次提交
    • S
      Rename 'key' to 'lock_id' or 'lock_name' for advisory locking · 5ce21d4f
      Sam Davies 提交于
      - key was a poor choice of name. A key implies something that will
        unlock a lock. The concept is actually more like a 'lock identifier'
      - mysql documentation calls this a 'lock name'
      - postgres documentation calls it a 'lock_id'
      - Updated variable names to reflect the preferred terminology for the database in
        question
      5ce21d4f
  23. 09 11月, 2015 1 次提交
    • Y
      Deprecate `#table_exists?`, `#tables` and passing arguments to `#talbes` · 7429633b
      yui-knk 提交于
      Reported on #21509, how views is treated by `#tables` are differ
      by each adapters. To fix this different behavior, after Rails 5.0
      is released, deprecate `#tables`.
      
      And `#table_exists?` would check both tables and views.
      To make their behavior consistent with `#tables`, after Rails 5.0
      is released, deprecate `#table_exists?`.
      7429633b
  24. 31 10月, 2015 1 次提交
    • S
      Use advisory locks to prevent concurrent migrations · 2c2a8755
      Sam Davies 提交于
      - Addresses issue #22092
      - Works on Postgres and MySQL
      - Uses advisory locks because of two important properties:
        1. The can be obtained outside of the context of a transaction
        2. They are automatically released when the session ends, so if a
        migration process crashed for whatever reason the lock is not left
        open perpetually
      - Adds get_advisory_lock and release_advisory_lock methods to database
        adapters
      - Attempting to run a migration while another one is in process will
        raise a ConcurrentMigrationError instead of attempting to run in
        parallel with undefined behavior. This could be rescued and
        the migration could exit cleanly instead. Perhaps as a configuration
        option?
      
      Technical Notes
      ==============
      
      The Migrator uses generate_migrator_advisory_lock_key to build the key
      for the lock. In order to be compatible across multiple adapters there
      are some constraints on this key.
      - Postgres limits us to 64 bit signed integers
      - MySQL advisory locks are server-wide so we have to scope to the
        database
      - To fulfil these requirements we use a Migrator salt (a randomly
        chosen signed integer with max length of 31 bits) that identifies
        the Rails migration process as the owner of the lock. We multiply
        this salt with a CRC32 unsigned integer hash of the database name to
        get a signed 64 bit integer that can also be converted to a string
        to act as a lock key in MySQL databases.
      - It is important for subsequent versions of the Migrator to use the
        same salt, otherwise different versions of the Migrator will not see
        each other's locks.
      2c2a8755
  25. 21 10月, 2015 1 次提交
    • S
      Do not cache prepared statements that are unlikely to have cache hits · cbcdecd2
      Sean Griffin 提交于
      Prior to this commit, Rails makes no differentiation between whether a
      query uses bind parameters, and whether or not we cache that query as a
      prepared statement. This leads to the cache populating extremely fast in
      some cases, with the statements never being reused.
      
      In particular, the two problematic cases are `where(foo: [1, 2, 3])` and
      `where("foo = ?", 1)`. In both cases we'll end up quoting the values
      rather than using a bind param, causing a cache entry for every value
      ever used in that query.
      
      It was noted that we can probably eventually change `where("foo = ?",
      1)` to use a bind param, which would resolve that case. Additionally, on
      PG we can change our generated query to be `WHERE foo = ANY($1)`, and
      pass an array for the bind param. I hope to accomplish both in the
      future.
      
      For SQLite and MySQL, we still end up preparing the statements anyway,
      we just don't cache it. The statement will be cleaned up after it is
      executed. On postgres, we skip the prepare step entirely, as an API is
      provided to execute with bind params without preparing the statement.
      
      I'm not 100% happy on the way this ended up being structured. I was
      hoping to use a decorator on the visitor, rather than mixing a module
      into the object, but the way Arel has it's visitor pattern set up makes
      it very difficult to extend without inheritance. I'd like to remove the
      duplication from the various places that are extending it, but that'll
      require a larger restructuring of that initialization logic. I'm going
      to take another look at the structure of it soon.
      
      This changes the signature of one of the adapter's internals, and will
      require downstream changes from third party adapters. I'm not too
      worried about this, as worst case they can simply add the parameter and
      always ignore it, and just keep their previous behavior.
      
      Fixes #21992.
      cbcdecd2
  26. 23 9月, 2015 1 次提交
    • Y
      introduce `conn.data_source_exists?` and `conn.data_sources`. · 152b85f0
      Yves Senn 提交于
      These new methods are used from the Active Record model layer to
      determine which relations are viable to back a model. These new methods
      allow us to change `conn.tables` in the future to only return tables and
      no views. Same for `conn.table_exists?`.
      
      The goal is to provide the following introspection methods on the
      connection:
      
      * `tables`
      * `table_exists?`
      * `views`
      * `view_exists?`
      * `data_sources` (views + tables)
      * `data_source_exists?` (views + tables)
      152b85f0
  27. 21 9月, 2015 1 次提交
  28. 18 9月, 2015 1 次提交
  29. 08 9月, 2015 1 次提交
    • Y
      Add view tests for MySQL · bb0d7078
      yui-knk 提交于
      Basically view tests for MySQL are same with
      `test/cases/adapters/postgresql/view_test.rb`.
      
      So move `test/cases/adapters/postgresql/view_test.rb` to
      `test/cases/view_test.rb` and make them only run if
      `current_adapter` supports writable view.
      bb0d7078
  30. 06 9月, 2015 2 次提交
  31. 28 8月, 2015 1 次提交