1. 16 7月, 2013 1 次提交
  2. 04 7月, 2013 3 次提交
  3. 01 7月, 2013 1 次提交
  4. 13 6月, 2013 1 次提交
    • J
      Moving add_column_options! up to SchemaCreation · ea72430b
      jeran 提交于
      removed two instances of add_column_options! from abstract_mysql_adapter
      
      reworked rename_column_sql to remove add_column_options from schema_statements
      
      changed to use new hash syntax.
      ea72430b
  5. 29 4月, 2013 1 次提交
  6. 31 3月, 2013 1 次提交
  7. 29 3月, 2013 1 次提交
  8. 26 3月, 2013 1 次提交
  9. 24 3月, 2013 1 次提交
  10. 23 3月, 2013 6 次提交
  11. 08 3月, 2013 1 次提交
  12. 25 2月, 2013 1 次提交
  13. 16 2月, 2013 3 次提交
    • X
      copy-edits RDoc in fba496f2 · 69d08eb2
      Xavier Noria 提交于
      This revision makes the terminology uniform with the rest of the file.
      In general we describe these methods in terms of the adapter, rather
      than the database. (As a side note, if we wanted to refer to the
      database we would write "PostgreSQL".)
      69d08eb2
    • J
      Remove valid_type? method · 7d93d91a
      Jon Leighton 提交于
      It was supposed to be removed by the preceding two reversions but I did
      them in the wrong order.
      7d93d91a
    • J
      Revert "Make valid_type? public" · 520a16ca
      Jon Leighton 提交于
      This reverts commit 5d528f83.
      
      Relates to f8c8ad56 which is also getting reverted due to failing test.
      520a16ca
  14. 14 2月, 2013 1 次提交
  15. 12 2月, 2013 1 次提交
  16. 07 2月, 2013 2 次提交
  17. 29 1月, 2013 1 次提交
  18. 07 1月, 2013 1 次提交
  19. 30 10月, 2012 1 次提交
  20. 29 10月, 2012 1 次提交
  21. 21 9月, 2012 1 次提交
    • J
      Support for specifying transaction isolation level · 392eeecc
      Jon Leighton 提交于
      If your database supports setting the isolation level for a transaction,
      you can set it like so:
      
        Post.transaction(isolation: :serializable) do
          # ...
        end
      
      Valid isolation levels are:
      
      * `:read_uncommitted`
      * `:read_committed`
      * `:repeatable_read`
      * `:serializable`
      
      You should consult the documentation for your database to understand the
      semantics of these different levels:
      
      * http://www.postgresql.org/docs/9.1/static/transaction-iso.html
      * https://dev.mysql.com/doc/refman/5.0/en/set-transaction.html
      
      An `ActiveRecord::TransactionIsolationError` will be raised if:
      
      * The adapter does not support setting the isolation level
      * You are joining an existing open transaction
      * You are creating a nested (savepoint) transaction
      
      The mysql, mysql2 and postgresql adapters support setting the
      transaction isolation level. However, support is disabled for mysql
      versions below 5, because they are affected by a bug
      (http://bugs.mysql.com/bug.php?id=39170) which means the isolation level
      gets persisted outside the transaction.
      392eeecc
  22. 15 9月, 2012 6 次提交
    • J
      02f56554
    • J
      28058758
    • J
      Alter the naming structure a bit · a6fbddb7
      Jon Leighton 提交于
      a6fbddb7
    • J
      Store the transaction number in the transaction object · 9296e693
      Jon Leighton 提交于
      This avoids us having to manually increment and decrement it.
      9296e693
    • J
      02f25a22
    • J
      Revert "create a transaction object and point AR objects at that object during a" · b89ffe7f
      Jon Leighton 提交于
      This reverts commit c24c8852.
      
      Here's the explanation I just sent to @tenderlove:
      
      Hey,
      
      I've been thinking about about the transaction memory leak thing that we
      were discussing.
      
      Example code:
      
      post = nil
      Post.transaction do
        N.times { post = Post.create }
      end
      
      Post.transaction is going to create a real transaction and there will
      also be a (savepoint) transaction inside each Post.create.
      
      In an idea world, we'd like all but the last Post instance to be GC'd,
      and for the last Post instance to receive its after_commit callback when
      Post.transaction returns.
      
      I can't see how this can work using your solution where the Post itself
      holds a reference to the transaction it is in; when Post.transaction
      returns, control does not switch to any of Post's instance methods, so
      it can't trigger the callbacks itself.
      
      What we really want is for the transaction itself to hold weak
      references to the objects within the transaction. So those objects can
      be GC'd, but if they are not GC'd then the transaction can iterate them
      and execute their callbacks.
      
      I've looked into WeakRef implementations that are available. On 1.9.3,
      the stdlib weakref library is broken and we shouldn't use it.
      
      There is a better implementation here:
      
      https://github.com/bdurand/ref/blob/master/lib/ref/weak_reference/pure_ruby.rb
      
      We could use that, either by pulling in the gem or just copying the code
      in, but it still suffers from the limitation that it uses ObjectSpace
      finalizers.
      
      In my testing, this finalizers make GC quite expensive:
      https://gist.github.com/3722432
      
      Ruby 2.0 will have a native WeakRef implementation (via
      ObjectSpace::WeakMap), hence won't be reliant on finalizers:
      http://bugs.ruby-lang.org/issues/4168
      
      So the ultimate solution will be for everyone to use Ruby 2.0, and for
      us to just use ObjectSpace::WeakMap.
      
      In the meantime, we have basically 3 options:
      
      The first is to leave it as it is.
      
      The second is to use a finalizer-based weakref implementation and take
      the GC perf hit.
      
      The final option is to store object ids rather than the actual objects.
      Then use ObjectSpace._id2ref to deference the objects at the end of the
      transaction, if they exist. This won't stop memory use growing within
      the transaction, but it'll grow more slowly.
      
      I benchmarked the performance of _id2ref this if the object does or does
      not exist: https://gist.github.com/3722550
      
      If it does exist it seems decent, but it's hugely more expensive if it
      doesn't, probably because we have to do the rescue nil.
      
      Probably most of the time the objects will exist. However the point of
      doing this optimisation is to allow people to create a large number of
      objects inside a transaction and have them be GC'd. So for that use
      case, we'd be replacing one problem with another. I'm not sure which of
      the two problems is worse.
      
      My feeling is that we should just leave this for now and come back to it
      when Ruby 2.0 is out.
      
      I'm going to revert your commit because I can't see how it solves this.
      Hope you don't mind... if I've misunderstood then let me know!
      
      Jon
      b89ffe7f
  23. 14 9月, 2012 1 次提交
    • D
      Moves column dump specific code to a module included in AbstractAdapter · 4544d2bc
      Dan McClain 提交于
      Having column related schema dumper code in the AbstractAdapter. The
      code remains the same, but by placing it in the AbstractAdapter, we can
      then overwrite it with Adapter specific methods that will help with
      Adapter specific data types.
      
      The goal of moving this code here is to create a new migration key for
      PostgreSQL's array type. Since any datatype can be an array, the goal is
      to have ':array => true' as a migration option, turning the datatype
      into an array. I've implemented this in postgres_ext, the syntax is
      shown here: https://github.com/dockyard/postgres_ext#arrays
      
      Adds array migration support
      
      Adds array_test.rb outlining the test cases for array data type
      Adds pg_array_parser to Gemfile for testing
      Adds pg_array_parser to postgresql_adapter (unused in this commit)
      
      Adds schema dump support for arrays
      
      Adds postgres array type casting support
      
      Updates changelog, adds note for inet and cidr support, which I forgot to add before
      
      Removing debugger, Adds pg_array_parser to JRuby platform
      
      Removes pg_array_parser requirement, creates ArrayParser module used by
      PostgreSQLAdapter
      4544d2bc
  24. 08 9月, 2012 1 次提交
  25. 03 8月, 2012 1 次提交