aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | | | | | Update belongs_to.rbEhsan Yousefi2015-11-081-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | There is no need to to assign reflection name to a variable, because it's called once.
* | | | | | | | | docs, get rid of artifact in `RecordFetchWarning` docs.Yves Senn2015-11-071-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip] There was a `ActiveRecord::Relation::RecordFetchWarning::ActiveSupport` artifact caused by subscribing to AS notifications.
* | | | | | | | | docs, nodoc `EnumType`. [ci skip]Yves Senn2015-11-071-1/+1
| |_|/ / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This type is backed by a class macro. Documentation related to the type casting behavior should be added in the macro description.
* | | | | | | | docs, `ActiveRecord::JoinDependency` is not part of the public API.Yves Senn2015-11-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip] While `JoinDependency` and `JoinDependency::Aliases` were nodoced, the inner `Table` class made them appear in the API.
* | | | | | | | docs, `ActiveRecord::TypeCaster` is not part of the public API.Yves Senn2015-11-073-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip]
* | | | | | | | Fix test failuresSean Griffin2015-11-071-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous commit changes the state of the class, and while we are cleaning up the database, I forgot to clean up the class
* | | | | | | | Ensure `#reset_column_information` clears child classes as wellSean Griffin2015-11-073-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've added a redundant test for this under the attributes API as well, as that also causes this bug to manifest through public API (and demonstrates that calling `reset_column_information` on the child classes would be insufficient) Since children of a class should always share a table with their parent, just reloading the schema from the cache should be sufficient here. `reload_schema_from_cache` should probably become public and `# :nodoc:`, but I'd rather avoid the git churn here. Fixes #22057
* | | | | | | | Fix wrong `assert_equal` argument order.Kasper Timm Hansen2015-11-071-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It goes expected, then actual. Only changed this because the file was just touched (please don't submit pull requests :)).
* | | | | | | | Suppress warning (warning about assigned but unused variable)yui-knk2015-11-071-1/+1
| |_|_|/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | These warings have been appeared from https://github.com/rails/rails/commit/92bc8cdb0771bf6ffcfb31ef58dba529527b514c
* | | | | | | Avoids mutating the original response in connection management middlewareKevin Buchanan2015-11-063-4/+15
| | | | | | |
* | | | | | | Merge pull request #22187 from ↵Andrew White2015-11-051-1/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | kamipo/test_binary_data_is_not_logged_is_for_prepared_statements `test_binary_data_is_not_logged` is for prepared statements logging
| * | | | | | | `test_binary_data_is_not_logged` is for prepared statements loggingRyuta Kamizono2015-11-051-1/+1
| | | | | | | |
* | | | | | | | No need `MysqlDouble` and `MysqlDouble.reset_column_information`Ryuta Kamizono2015-11-052-24/+12
| | | | | | | |
* | | | | | | | Require the count_down_latchRafael Mendonça França2015-11-051-2/+3
| | | | | | | |
* | | | | | | | Require only necessary concurrent-ruby classes.Jerry D'Antonio2015-11-045-5/+5
| | | | | | | |
* | | | | | | | formatting pass over Active Record changelog. [ci skip]Yves Senn2015-11-041-18/+20
| | | | | | | |
* | | | | | | | Remove incorrect commentsAndrew White2015-11-041-4/+0
|/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Columns are no longer stored in an attribute since b8a533d. [ci skip]
* | / / / / / Fix spelling error [ci skip]Andrew White2015-11-041-1/+1
| |/ / / / / |/| | | | |
* | | | | | Merge pull request #18774 from ↵Jeremy Daer2015-11-0310-22/+39
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | yuki24/deprecate-original-exception-infavor-of-cause Deprecate exception#original_exception in favor of exception#cause
| * | | | | | Deprecate exception#original_exception in favor of exception#causeYuki Nishijima2015-11-0310-22/+39
| | | | | | |
* | | | | | | Add test_float_limits to mysql2yui-knk2015-11-032-12/+48
|/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This test case was definded by 51de8cee82d61541725ff4c2462b083f37e64017. `float` and `double` is registered in abstract_mysql_adapter.rb, we should test not only for mysql adapter, but mysql2 adapter.
* | | | | | Merge pull request #21841 from yui-knk/fix_migration_statusAndrew White2015-11-023-7/+58
|\ \ \ \ \ \ | | | | | | | | | | | | | | Make `db:migrate:status` to render `1_some.rb` format migrate files.
| * | | | | | Make `db:migrate:status` to render `1_some.rb` format migrate files.yui-knk2015-11-023-7/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `1_valid_people_have_last_names.rb` and `20150823202140_create_users.rb` are valid migration file name. But `1_valid_people_have_last_names.rb` is rendered as `********** NO FILE **********` when `rake db:migrate:status`. Fix to this bug, this commit includes * define some API private methdos and a Constant `match_to_migration_filename?`, `parse_migration_filename`, and `MigrationFilenameRegexp` * use these methods in `db:migrate:status` task Example: These files are in `db/migrate` * 1_valid_people_have_last_names.rb * 20150819202140_irreversible_migration.rb * 20150823202140_add_admin_flag_to_users.rb * 20150823202141_migration_tests.rb * 2_we_need_reminders.rb * 3_innocent_jointable.rb we can migrate all of them. Before ```shell $ bundle exec rake db:migrate:status ... Status Migration ID Migration Name -------------------------------------------------- up 001 ********** NO FILE ********** up 002 ********** NO FILE ********** up 003 ********** NO FILE ********** up 20150819202140 Irreversible migration up 20150823202140 Add admin flag to users up 20150823202141 Migration tests ``` After ```shell $ bundle exec rake db:migrate:status ... Status Migration ID Migration Name -------------------------------------------------- up 001 Valid people have last names up 002 We need reminders up 003 Innocent jointable up 20150819202140 Irreversible migration up 20150823202140 Add admin flag to users up 20150823202141 Migration tests ```
* | | | | | | Fix test_database_created_by_root of mysqlyui-knk2015-11-021-1/+1
|/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `DEFAULT_CHARSET` and `DEFAULT_COLLATION` in `MySQLDatabaseTasks` was changed by 322068fe85278ea26e26da6dfd7c5612dab15a72. This test case also should be changed.
* | | | | | Define `sanitize_sql_for_order` for AR and use it inside `preprocess_order_args`yui-knk2015-11-025-5/+30
| | | | | | | | | | | | | | | | | | | | | | | | This commit follows up of 6a6dbb4c51fb0c58ba1a810eaa552774167b758a.
* | | | | | Allow bigint with default nil for avoiding auto increment primary keyRyuta Kamizono2015-11-024-3/+36
| | | | | | | | | | | | | | | | | | | | | | | | Such as #10404, #18206.
* | | | | | Remove `DEFAULT_CHARSET` and `DEFAULT_COLLATION` in `MySQLDatabaseTasks`Ryuta Kamizono2015-11-023-21/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit f6ca7e4e75408bc42f515fc7206d6c6ff0dce7c6. The default collation of utf8 in MySQL is the `utf8_general_ci`, and this should not be changed. This is because, the better collation in the all locales is not exists, optimal collation in own application is not known other than themselves. The `utf8_unicode_ci` is known as Japanese killer in Japan, there are serious impacts in search of Japanese. MySQL implements the `utf8_unicode_ci` according to the Unicode Collation Algorithm (UCA) described at http://www.unicode.org/reports/tr10/, but the `utf8_unicode_ci` have only partial support for the UCA, only primary level key comparison implemented (also known as L1 (Base characters) comparison). Because L1 (Base characters) comparison does not distinguish between the presence or absence of the accent, if distinction of the accent is important there is a serious impact (e.g. Japanese). Example: ``` > SHOW CREATE TABLE `dicts`\G *************************** 1. row *************************** Table: dicts Create Table: CREATE TABLE `dicts` ( `word` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `meaning` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 1 row in set (0.00 sec) > INSERT INTO `dicts` VALUES ('ハハ', 'mother'), ('パパ', 'father'); Query OK, 2 rows affected (0.00 sec) > SELECT * FROM `dicts` WHERE `word` = 'ハハ'; +--------+---------+ | word | meaning | +--------+---------+ | ハハ | mother | | パパ | father | +--------+---------+ 2 rows in set (0.00 sec) > CREATE UNIQUE INDEX `unique_index_word` ON `dicts`(`word`); ERROR 1062 (23000): Duplicate entry 'ハハ' for key 'unique_index_word' ``` We should omit the collation entirely rather than providing a default. Then the choice is the responsibility of the server and MySQL distribution.
* | | | | | Add CHANGELOG entry for #22125 [ci skip]Takashi Kokubun2015-11-021-0/+5
| | | | | |
* | | | | | Merge pull request #22131 from yui-knk/move_test_to_inheritance_testAndrew White2015-11-022-80/+80
|\ \ \ \ \ \ | | | | | | | | | | | | | | Move some AR test cases to inheritance_test.rb
| * | | | | | Move some AR test cases to inheritance_test.rbyui-knk2015-10-312-80/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These methods are defined in inheritance.rb * `abstract_class?` * `descends_from_active_record?` * `compute_type`
* | | | | | | Update changelog for #22122Sam Davies2015-11-011-0/+5
| | | | | | |
* | | | | | | minor formatting changes [ci skip]yuuji.yaginuma2015-10-311-2/+3
| |_|/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | * add newline for display the fenced code block * add "#" in the comments section
* | | | | | Merge pull request #22125 from k0kubun/left_joinsSean Griffin2015-10-305-3/+10
|\ \ \ \ \ \ | | | | | | | | | | | | | | Alias left_joins to left_outer_joins
| * | | | | | Alias left_joins to left_outer_joinsTakashi Kokubun2015-10-315-3/+10
| | | | | | |
* | | | | | | don't sleep in testsAaron Patterson2015-10-301-10/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | we should be using a countdown latch instead of rolling our own busy-loop.
* | | | | | | Merge pull request #22122 from ↵Sean Griffin2015-10-308-23/+322
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | samphilipd/sam/manual_locking_on_schema_migrations Make migrations concurrent safe (using advisory locks)
| * | | | | | | Use advisory locks to prevent concurrent migrationsSam Davies2015-10-308-23/+322
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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.
* | | | | | | | Fix test failures caused by #12071Sean Griffin2015-10-301-10/+10
| |/ / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This assumes only one query was ever executed, but it appears to sometimes be loading schema information. We can just look at the array of queries, rather than the "first" one that was run
* | | | | | | Merge pull request #12071 from Crunch09/outer_joinsSean Griffin2015-10-306-5/+139
|\ \ \ \ \ \ \ | |_|/ / / / / |/| | | | | | | | | | | | | added ActiveRecord::Relation#outer_joins
| * | | | | | added ActiveRecord::Relation#left_outer_joinsFlorian Thomas2015-05-196-5/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Example: User.left_outer_joins(:posts) => SELECT "users".* FROM "users" LEFT OUTER JOIN "posts" ON "posts"."user_id" = "users"."id"
* | | | | | | Ensure `has_and_belongs_to_many` works with `belongs_to_required_by_default`Sean Griffin2015-10-293-2/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this commit, if `ActiveRecord::Base.belongs_to_required_by_default` is set to `true`, then creating a record through `has_and_belongs_to_many` fails with the cryptic error message `Left side must exist`. This is because `inverse_of` isn't working properly in this case, presumably since we're doing trickery with anonymous classes in the middle. Rather than following this rabbit hole to try and get `inverse_of` to work in a case that we know is not publicly supported, we can just turn off this validation to match the behavior of 4.2 and earlier.
* | | | | | | Add a changelog entry for #13008Sean Griffin2015-10-291-0/+4
| | | | | | |
* | | | | | | Merge pull request #13008 from ktheory/sanitize_orderSean Griffin2015-10-292-0/+12
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Support SQL sanitization in AR::QueryMethods#order
| * | | | | | | Support SQL sanitization in AR::QueryMethods#orderAaron Suggs2013-11-222-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add support for sanitizing arrays in SQL ORDER clauses. This is useful when using MySQL `ORDER BY FIELD()` to return records in a predetermined way. ```ruby Tag.order(['field(id, ?', [1,3,2]].to_sql # => SELECT "tags".* FROM "tags" ORDER BY field(id, 1,3,2) ``` Prior to this, developers must be careful to sanitize `#order` arguments themselves.
* | | | | | | | Merge pull request #19511 from larskanis/replace_const_conn_paramsSean Griffin2015-10-291-7/+2
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | PostgreSQL, Replace static connection param list by libpq's dynamic list
| * | | | | | | | PostgreSQL, Replace static connection param list by the one built into libpq.Lars Kanis2015-03-251-7/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes the connection adapter future-proof regarding to new parameters. To maintain backward compatibility, :requiressl is added by hand. It is deprecated by PostgreSQL since 2003, but still accepted by libpq.
* | | | | | | | | Don't disable errors when turning standard_conforming_strings onHarry Marr2015-10-292-12/+10
| | | | | | | | |
* | | | | | | | | Never pass `nil` to `order`Sean Griffin2015-10-295-22/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is part of a refactoring to make it easier to allow `order` to use sanitize like just about everything else on relation. The deleted test doesn't give any reasoning as to why passing `nil` to `order` needs to be supported, and it's rather nonsensical. I can almost see allowing an empty string being passed (though I'm tempted to just disallow it...)
* | | | | | | | | Merge pull request #22106 from jamis/fix_default_fixture_class_namesYves Senn2015-10-292-3/+15
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | default value for FixtureSet.fixture_class_names ought to be a Class
| * | | | | | | | | FixtureSet.fixture_class_names should have no default valueJamis Buck2015-10-292-3/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Look at `TestFixtures.set_fixture_class`. As documented, it accepts a mapping of fixture identifiers (string or symbol) to Classes (the model classes that implement the named fixture). Look now at the initialization of `TestFixtures.fixture_class_names`. It defines a Hash, which will return a string by default (where the string is the estimated class name of the given fixture identifier). Now look at TestFixtures.load_fixtures. It calls `FixtureSet.create_fixtures`, passing in the mapping of `fixture_class_names`. Following this on to `FixtureSet.create_fixtures`, this instantiates a `FixtureSet::ClassCache`, passing in the map of class names. `ClassCache`, in turn, calls `insert_class` for each value in the cache. (Recall that `set_fixture_class` puts Class objects in there, while the default proc for the mapping puts String objects.) Look finally at `insert_class`. If the value is present, it checks to see if the value is a subclass of `AR::Base`. Fair enough...but wait! What if the value is a String? You get an exception, because a String instance cannot be compared with a Class. Judging from the implementation, it seems like the expected behavior here is for `fixture_class_names` to have no default proc. Look-ups are supposed to happen via `ClassCache`, with `fixture_class_names` existing solely as a repository for explicitly-registered class mappings. That is what this change does.