aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
Commit message (Collapse)AuthorAgeFilesLines
* Evaluate the default block only when necessaryRyuta Kamizono2017-03-202-3/+3
| | | | Follow up of #28453.
* Delegate `uniq` to `records`Ryuta Kamizono2017-03-181-1/+1
| | | | | | | | | | This fixes CI failure due to 48f3be8c. `Enumerable#uniq` was introduced since Ruby 2.4. We should delegate `uniq` to `records` explicitly. And since b644964b `ActiveRecord::Relation` includes `Enumerable` so delegating `map` is unneeded.
* Merge pull request #28191 from eugeneius/string_assoc_orderRafael França2017-03-171-1/+6
|\ | | | | Allow order to be given expressions as hash keys
| * Allow order to be given expressions as hash keysEugene Kenny2017-02-271-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | When `order` is given a hash, the keys are currently assumed to be attribute names and are quoted as such in the query, which makes it impossible to pass an expression instead: Post.order("LENGTH(title)" => :asc).last # SELECT `posts`.* FROM `posts` ORDER BY `posts`.`LENGTH(title)` DESC LIMIT 1 If the key is an `Arel::Nodes::SqlLiteral`, we now use it directly in the query. This provides a way to build a relation with a complex order clause that can still be reversed with `reverse_order` or `last`.
* | Merge pull request #28154 from aripollak/remove-comments-from-structure-sqlRafael Mendonça França2017-03-171-0/+20
|\ \ | | | | | | | | | Drop comments from structure.sql in postgresql
| * | Only remove comments before the first statementAri Pollak2017-02-241-4/+9
| | |
| * | Drop comments from structure.sql in postgresqlAri Pollak2017-02-241-0/+15
| | | | | | | | | | | | Fixes #28153.
* | | uniq was deprecated and removed alreadyRafael Mendonça França2017-03-171-1/+1
| | | | | | | | | | | | | | | This was causing an infinity loop since it was delegating to `all` and all delegating back to this module.
* | | Merge pull request #28318 from ↵Rafael França2017-03-171-6/+2
|\ \ \ | | | | | | | | | | | | | | | | bogdanvlviv/remove-ability-update-locking_column-value Remove ability update locking_column value
| * | | Remove ability update locking_column valuebogdanvlviv2017-03-161-6/+2
| | | |
* | | | Add :default option to belongs_to (#28453)George Claghorn2017-03-173-1/+16
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use it to specify that an association should be initialized with a particular record before validation. For example: # Before belongs_to :account before_validation -> { self.account ||= Current.account } # After belongs_to :account, default: -> { Current.account }
* | | Remove unused `@txn` variableEugene Kenny2017-03-151-1/+0
| | | | | | | | | | | | | | | | | | This was added in c24c885209ac2334dc6f798c394a821ee270bec6, removed in b89ffe7f0047eb614e42232a21201b317b880755, and then (unintentionally?) reintroduced in 2d7ae1b08ee2a10b12cbfeef3a6cc6da55b57df6.
* | | Revert "Merge pull request #28369 from ↵Matthew Draper2017-03-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | mylake/reduce-postgresql-adapter-memory-bloat" This reverts commit 192db64452d148c7b51713979459e38407380dc6, reversing changes made to 9893955363cf6358556ed3b36f4538d5b54e9d17. We can't sacrifice correctness for performance.
* | | Merge pull request #28369 from mylake/reduce-postgresql-adapter-memory-bloatRafael França2017-03-131-2/+2
|\ \ \ | | | | | | | | 500x memory reduction of 10k schemas for postgresql adapter
| * | | Use “distinct” to filter redundant types from pg_typeto reduce memory ↵mylake2017-03-101-2/+2
| | | | | | | | | | | | | | | | bloat especially in multi-schema structure database
* | | | Merge pull request #28068 from kamipo/refactor_data_sourcesRafael França2017-03-137-201/+154
|\ \ \ \ | | | | | | | | | | Extract `data_source_sql` to refactor data source statements
| * | | | Prefer `USING (column_list)` for joining information_schemaRyuta Kamizono2017-02-251-3/+1
| | | | |
| * | | | Extract `data_source_sql` to refactor data source statementsRyuta Kamizono2017-02-207-198/+153
| | | | |
* | | | | Merge pull request #28017 from mtsmfm/suppress-dep-warnMatthew Draper2017-03-133-0/+6
|\ \ \ \ \ | | | | | | | | | | | | Suppress deprecation warning `implementing to_yaml is deprecated`
| * | | | | Suppress deprecation warning `implementing to_yaml is deprecated`Fumiaki MATSUSHIMA2017-02-153-0/+6
| | | | | |
* | | | | | Merge pull request #28371 from kamipo/simplify_countAndrew White2017-03-121-7/+4
|\ \ \ \ \ \ | | | | | | | | | | | | | | Simply forward `Calculations#count` to `Enumerable#count`
| * | | | | | Simply forward `Calculations#count` to `Enumerable#count`Ryuta Kamizono2017-03-101-7/+4
| | |_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Follow up of #24203. Since b644964b `ActiveRecord::Relation` includes `Enumerable` so it is enough to call `super` simply.
* | | | | | Merge pull request #28372 from kamipo/delegate_as_jsonAndrew White2017-03-122-5/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | Simply delegate `as_json` to `records`
| * | | | | | Simply delegate `as_json` to `records`Ryuta Kamizono2017-03-102-5/+1
| |/ / / / /
* / / / / / Remove conditions parameter from `NullRelation#delete_all`Ryuta Kamizono2017-03-101-1/+1
|/ / / / / | | | | | | | | | | | | | | | Follow up of e7381d289e4f8751dcec9553dcb4d32153bd922b.
* | | | | Merge pull request #28351 from kamipo/deprecate_schema_migrations_table_nameRafael Mendonça França2017-03-091-0/+5
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | Deprecate `Migrator.schema_migrations_table_name`
| * | | | | Deprecate `Migrator.schema_migrations_table_name`Ryuta Kamizono2017-03-091-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 67fba0cf `SchemaMigration` model was extracted. Use `SchemaMigration.table_name` instead.
* | | | | | Fix select with block doesn't return newly built records in has_many associationRyuta Kamizono2017-03-091-2/+2
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `select` in `QueryMethods` is also an enumerable method. Enumerable methods with block should delegate to `records` on `CollectionProxy`, not `scope`. Fixes #28348.
* | | | | Check whether `Rails.application` defined before calling itAndrew White2017-03-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In #27674 we changed the migration generator to generate migrations at the path defined in `Rails.application.config.paths` however the code checked for the presence of the `Rails` constant but not the `Rails.application` method which caused problems when using Active Record and generators outside of the context of a Rails application. Fixes #28325.
* | | | | Merge pull request #28305 from kamipo/extract_schema_migration_all_versionsAndrew White2017-03-063-4/+8
|\ \ \ \ \ | | | | | | | | | | | | Extract `SchemaMigration.all_versions`
| * | | | | Extract `SchemaMigration.all_versions`Ryuta Kamizono2017-03-063-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use `SchemaMigration.all_versions` instead of `SchemaMigration.all.map(&:version)` to avoid to instantiate AR objects.
* | | | | | Fix `deserialize` with JSON arrayRyuta Kamizono2017-03-061-1/+1
|/ / / / / | | | | | | | | | | | | | | | Fixes #28285.
* | | | | Remove useless `Migrator.schema_migrations_table_name`Ryuta Kamizono2017-03-052-7/+3
| | | | | | | | | | | | | | | | | | | | Simply use `SchemaMigration.table_name` instead.
* | | | | Don't hide method that's been documented API since Rails 2.1Andrew White2017-03-041-3/+3
| | | | |
* | | | | Fix `rake db:schema:load` with subdirectoriesRyuta Kamizono2017-03-051-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Related #25174. `db:schema:load` doesn't work with subdirectories like previous `db:migrate:status`. `Migrator.migration_files` should be used in `assume_migrated_upto_version` to fix the issue.
* | | | | Fix `rake db:migrate:status` with subdirectoriesRyuta Kamizono2017-03-042-24/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `db:migrate` supports subdirectories and have a test. https://github.com/rails/rails/blob/v5.1.0.beta1/activerecord/test/cases/migrator_test.rb#L78-L85 But `db:migrate:status` doesn't work with subdirectories. It is due to `Dir.foreach(path)` is not the same with `Dir["#{path}/**/[0-9]*_*.rb"]`. I extracted `migration_files` and sharing it in the both to fix the issue. And added tests for `db:migrate:status`.
* | | | | Don't share `options` with a reference type columnRyuta Kamizono2017-03-041-7/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sharing `options` causes some unexpected behavior. If `limit: 2` is specified, this means that 2 bytes integer for a reference id column and 2 chars string for a reference type column. Another example, if `unsigned: true` is specified, this means that unsigned integer for a reference id column, but a invalid option for a reference type column. So `options` should not be shared with a reference type column.
* | | | | remove unused parametersAaron Patterson2017-03-031-6/+6
| | | | |
* | | | | `join_keys` no longer needs a class passed to itAaron Patterson2017-03-033-30/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reflections only use their own information to create a `join_keys` object. This means that we can call `join_keys` on a reflection object and have it be context-free.
* | | | | refactor so there is only one JoinKeys factory methodAaron Patterson2017-03-031-4/+15
| | | | |
* | | | | ask reflection for klass join reflectionAaron Patterson2017-03-032-13/+16
| | | | |
* | | | | Move join scopes on to the reflection objectAaron Patterson2017-03-032-8/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Scopes can only ever be *not* reflection objects when they are passed in to the Reflection constructor. Given this fact, we can eliminate is_a checks and an intermediate array object by just asking the reflection object for join scopes.
* | | | | Remove `node` parameter to `join_constraints`Aaron Patterson2017-03-032-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | I don't think we actually need this parameter anymore. Nobody seems to be using it.
* | | | | Merge pull request #28220 from kamipo/valid_type_accept_only_supported_typesRafael França2017-03-011-4/+0
|\ \ \ \ \ | | | | | | | | | | | | `valid_type?` should accept only supported types
| * | | | | `valid_type?` should accept only supported typesRyuta Kamizono2017-02-281-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `valid_type?` is used in schema dumper to determine if a type is supported. So if `valid_type?(:foobar)` is true, it means that schema dumper is allowed to create `t.foobar`. But it doesn't work. I think that `valid_type?` should accept only supported types. https://github.com/rails/rails/blob/v5.1.0.beta1/activerecord/lib/active_record/schema_dumper.rb#L135-L142 ```ruby columns.each do |column| raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" unless @connection.valid_type?(column.type) next if column.name == pk type, colspec = @connection.column_spec(column) tbl.print " t.#{type} #{column.name.inspect}" tbl.print ", #{format_colspec(colspec)}" if colspec.present? tbl.puts end ```
* | | | | | Merge pull request #25296 from kamipo/use_inspect_for_type_cast_for_schemaRafael França2017-02-281-0/+4
|\ \ \ \ \ \ | | | | | | | | | | | | | | Use `inspect` in `type_cast_for_schema` for date/time and decimal values
| * | | | | | Use `inspect` in `type_cast_for_schema` for date/time and decimal valuesRyuta Kamizono2016-12-111-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently dumping defaults on schema is inconsistent. Before: ```ruby create_table "defaults", force: :cascade do |t| t.string "string_with_default", default: "Hello!" t.date "date_with_default", default: '2014-06-05' t.datetime "datetime_with_default", default: '2014-06-05 07:17:04' t.time "time_with_default", default: '2000-01-01 07:17:04' t.decimal "decimal_with_default", default: 1234567890 end ``` After: ```ruby create_table "defaults", force: :cascade do |t| t.string "string_with_default", default: "Hello!" t.date "date_with_default", default: "2014-06-05" t.datetime "datetime_with_default", default: "2014-06-05 07:17:04" t.time "time_with_default", default: "2000-01-01 07:17:04" t.decimal "decimal_with_default", default: "1234567890" end ```
* | | | | | | Merge pull request #28217 from ↵Rafael França2017-02-281-7/+5
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | kamipo/create_join_table_respects_reference_key_type `create_join_table` should respect `references` column type
| * | | | | | | `create_join_table` should respect `references` column typeRyuta Kamizono2017-02-281-7/+5
| | |/ / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Follow up of #26266. The default type of `primary_key` and `references` were changed to `bigint` since #26266. But `create_join_table` column type is still `integer`. It should respect `references` column type.
* | | | | | | Merge pull request #28063 from Erol/prioritize-callback-on-action-before-ifRafael França2017-02-281-1/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Do not evaluate :if arguments when :on is not satisfied for transaction callbacks