aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | | | Preparing for 5.2.0.beta1 releaseRafael Mendonça França2017-11-271-1/+1
| | | | | | |
* | | | | | | Add new error class `QueryCanceled` which will be raised when canceling ↵Ryuta Kamizono2017-11-273-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | statement due to user request (#31235) This changes `StatementTimeout` to `QueryCanceled` for PostgreSQL. In MySQL, errno 1317 (`ER_QUERY_INTERRUPTED`) is only used when the query is manually cancelled. But in PostgreSQL, `QUERY_CANCELED` error code (57014) which is used `StatementTimeout` is also used when the both case. And, we can not tell which reason happened. So I decided to introduce new error class `QueryCanceled` closer to the error code name.
* | | | | | | Rename `TransactionTimeout` to more descriptive `LockWaitTimeout` (#31223)Ryuta Kamizono2017-11-273-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since #31129, new error class `StatementTimeout` has been added. `TransactionTimeout` is caused by the timeout shorter than `StatementTimeout`, but its name is too generic. I think that it should be a name that understands the difference with `StatementTimeout`.
* | | | | | | Revert "Merge pull request #31006 from ↵eileencodes2017-11-261-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rails/kamipo/ordinal_methods_should_respect_loaded_records" This reverts commit 0f79ab91150b4cdb6c018530978a3395962c7a02, reversing changes made to d575f7f2e737739302a0e8210d01c10f5d4e2c35. This PR philosophically conflicts with #30800 and Matthew thinks we should hold off merging this until we find concensus. Reverting since we're about to cut a release for 5.2.
* | | | | | | Merge pull request #31221 from matthewd/flush-idle-connectionsMatthew Draper2017-11-264-17/+76
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Flush idle database connections
| * | | | | | | Flush idle database connectionsMatthew Draper2017-11-264-17/+76
| |/ / / / / /
* | / / / / / Let rubygems handle our objection to mysql2 0.4.3Matthew Draper2017-11-261-2/+1
| |/ / / / / |/| | | | |
* | | | | | Merge pull request #31184 from TheSmartnik/fix_record_not_found_on_reloadRafael França2017-11-252-6/+16
|\ \ \ \ \ \ | | | | | | | | | | | | | | Provide arguments to RecordNotFound
| * | | | | | Provide arguments to RecordNotFoundNikita Misharin2017-11-252-6/+16
| | | | | | |
* | | | | | | Merge pull request #30510 from yhirano55/add_nodoc_to_activerecordEileen M. Uchitelle2017-11-253-7/+7
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Add :nodoc: to activerecord [ci skip]
| * | | | | | | Add :nodoc: to activerecord [ci skip]Yoshiyuki Hirano2017-09-033-7/+7
| | | | | | | |
* | | | | | | | Merge pull request #31006 from ↵Eileen M. Uchitelle2017-11-251-0/+1
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rails/kamipo/ordinal_methods_should_respect_loaded_records Ordinal methods should respect loaded records
| * | | | | | | | Ordinal methods should respect loaded recordsRyuta Kamizono2017-10-281-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We should reset partially loaded `@offsets` cache when latest records has loaded because the cache has been staled and it may not be consistent with latest records.
* | | | | | | | | Merge pull request #31173 from matthewd/connection-fork-safetyMatthew Draper2017-11-254-0/+58
|\ \ \ \ \ \ \ \ \ | |_|_|_|/ / / / / |/| | | | | | | | Improve AR connection fork safety
| * | | | | | | | Improve AR connection fork safetyMatthew Draper2017-11-184-0/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use whatever adapter-provided means we have available to ensure forked children don't send quit/shutdown/goodbye messages to the server on connections that belonged to their parent.
* | | | | | | | | Update incorrect backtick usage in RDoc to teletypeT.J. Schuck2017-11-221-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip]
* | | | | | | | | Prevent extra `spawn` to make `klass.all` faster (#29009)Ryuta Kamizono2017-11-202-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These extra `spawn` are called via `klass.all` and `klass.all` is called everywhere in the internal. Avoiding the extra `spawn` makes` klass.all` 30% faster for STI classes. https://gist.github.com/kamipo/684d03817a8115848cec8e8b079560b7 ``` Warming up -------------------------------------- fast relation 4.410k i/100ms slow relation 3.334k i/100ms Calculating ------------------------------------- fast relation 47.373k (± 5.2%) i/s - 238.140k in 5.041836s slow relation 35.757k (±15.9%) i/s - 176.702k in 5.104625s Comparison: fast relation: 47373.2 i/s slow relation: 35756.7 i/s - 1.32x slower ```
* | | | | | | | | Merge pull request #31035 from BrentWheeldon/bmw-db-load-deadlockMatthew Draper2017-11-181-1/+2
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Prevent deadlocks with load interlock and DB lock.
| * | | | | | | | | Prevent deadlocks with load interlock and DB lock.Brent Wheeldon2017-11-091-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes an issue where competing threads deadlock each other. - Thread A holds the load interlock but is blocked on getting the DB lock - Thread B holds the DB lock but is blocked on getting the load interlock (for example when there is a `Model.transaction` block that needs to autoload) This solution allows for dependency loading in other threads while a thread is waiting to acquire the DB lock. Fixes #31019
* | | | | | | | | | Merge pull request #28742 from quixoten/stack_conn_poolMatthew Draper2017-11-171-6/+3
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Switch to LIFO for the connection pool
| * | | | | | | | | | Fix typosDevin Christensen2017-04-131-1/+1
| | | | | | | | | | |
| * | | | | | | | | | Improve documentation and add testDevin Christensen2017-04-131-7/+4
| | | | | | | | | | |
| * | | | | | | | | | Switch to LIFO for the connection poolDevin Christensen2017-04-121-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using a FIFO for the connection pool can lead to issues when there are upstream components (pgbouncer, haproxy, etc.) that terminate connections that are idle after a period of time. Switching to a LIFO reduces the probability that a thread will checkout a connection that is about to be closed by an idle timeout in an upstream component.
* | | | | | | | | | | Merge pull request #28869 from eugeneius/query_cache_all_poolsMatthew Draper2017-11-171-6/+9
|\ \ \ \ \ \ \ \ \ \ \ | |_|_|/ / / / / / / / |/| | | | | | | | | | Enable query cache on all connection pools
| * | | | | | | | | | Enable query cache on all connection poolsEugene Kenny2017-04-241-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the query cache no longer eagerly checks out a connection, we can enable it on all connection pools at the start of every request, and it will only take effect for requests that actually use those pools.
* | | | | | | | | | | Avoid creating extra `relation` and `build_arel` in `_create_record` and ↵Ryuta Kamizono2017-11-172-63/+41
| |_|_|_|_|/ / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `_update_record` (#29999) Currently `_create_record` and `_update_record` in `Persistence` are creating extra `unscoped` and calling `build_arel` in the relation. But `compile_insert` and `compile_update` can be done without those expensive operation for `SelectManager` creation. So I moved the implementation to `Persistence` to avoid creating extra relation and refactored to avoid calling `build_arel`. https://gist.github.com/kamipo/8ed73d760112cfa5f6263c9413633419 Before: ``` Warming up -------------------------------------- _update_record 150.000 i/100ms Calculating ------------------------------------- _update_record 1.548k (±12.3%) i/s - 7.650k in 5.042603s ``` After: ``` Warming up -------------------------------------- _update_record 201.000 i/100ms Calculating ------------------------------------- _update_record 2.002k (±12.8%) i/s - 9.849k in 5.027681s ``` 30% faster for STI classes.
* | | | | | | | | | Fix migration version in doc of #up_onlybogdanvlviv2017-11-141-1/+1
| | | | | | | | | |
* | | | | | | | | | Add a #populate method to migrations (#31082)Rich2017-11-141-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add a #populate method to migrations * Address rubocop issues * Rename to #up_only and use #execute in the examples intead of the model * Update CHANGELOG [Rich Daley & Rafael Mendonça França]
* | | | | | | | | | Update `exists?` documentationNikolai B2017-11-141-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make it clear that `exists?` can be chained onto a relation
* | | | | | | | | | Merge pull request #27947 from mastahyeti/unsafe_raw_sqlMatthew Draper2017-11-146-2/+98
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Disallow raw SQL in dangerous AR methods
| * | | | | | | | | | push order arg checks down to allow for bindsBen Toews2017-11-092-28/+11
| | | | | | | | | | |
| * | | | | | | | | | deal with Array arguments to #orderBen Toews2017-11-092-1/+19
| | | | | | | | | | |
| * | | | | | | | | | convert order arg to string before checking if we can reverse itBen Toews2017-11-091-0/+4
| | | | | | | | | | |
| * | | | | | | | | | use << instead of #concat in #reverse_sql_order because we might be working ↵Ben Toews2017-11-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | with Arel SQL literator which overrides #concat
| * | | | | | | | | | try using regexesBen Toews2017-11-093-60/+21
| | | | | | | | | | |
| * | | | | | | | | | allow table name and direction in string order argBen Toews2017-11-092-25/+32
| | | | | | | | | | |
| * | | | | | | | | | always allow Arel::Attributes::Attribute alsoBen Toews2017-11-091-1/+3
| | | | | | | | | | |
| * | | | | | | | | | call enforce_raw_sql_whitelist on @klass so it works with FakeKlassBen Toews2017-11-091-2/+2
| | | | | | | | | | |
| * | | | | | | | | | work with actual string when reversing orderBen Toews2017-11-091-0/+3
| | | | | | | | | | |
| * | | | | | | | | | remove :enabled optionBen Toews2017-11-092-5/+2
| | | | | | | | | | |
| * | | | | | | | | | beef up deprecation warningBen Toews2017-11-091-3/+7
| | | | | | | | | | |
| * | | | | | | | | | allow Arel.sql() for pluckBen Toews2017-11-095-68/+90
| | | | | | | | | | |
| * | | | | | | | | | add config to check arguments to unsafe AR methodsBen Toews2017-11-095-21/+116
| | |_|/ / / / / / / | |/| | | | | | | |
* | | | | | | | | | Add `environment` as dependency of `load_config` (#31135)Yuji Yaginuma2017-11-141-24/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the environment is not loaded in some db tasks. Therefore, if use encrypted secrets values in `database.yml`, `read_encrypted_secrets` will not be true, so the value can not be used correctly. To fix this, added `environment` as dependency of `load_config`. It also removes explicit `environment` dependencies that are no longer needed. Fixes #30717
* | | | | | | | | | Properly cast input in `update_all`Sean Griffin2017-11-131-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation claims that given values go through "normal AR type casting and serialization", which to me implies `serialize(cast(value))`, not just serialization. The docs were changed to use this wording in #22492. The tests I cited in that PR (which is the same test modified in this commit), is worded in a way that implies it should be using `cast` as well. It's possible that I originally meant "normal type casting" to imply just the call to `serialize`, but given that `update_all(archived: params['archived'])` seems to be pretty common, I'm inclined to make this change as long as no tests are broken from it.
* | | | | | | | | | Merge pull request #30980 from sobrinho/sobrinho/arel-star-ignored-columnsRafael França2017-11-131-0/+2
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Do not use `Arel.star` when `ignored_columns`
| * | | | | | | | | | Do not use `Arel.star` when `ignored_columns`Jon Moss2017-11-131-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If there are any ignored columns, we will now list out all columns we want to be returned from the database. Includes a regression test.
* | | | | | | | | | | Use .tt extension to all the template filesRafael Mendonça França2017-11-135-0/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make clear that the files are not to be run for interpreters. Fixes #23847. Fixes #30690. Closes #23878.
* | | | | | | | | | | Add new error class `StatementTimeout` which will be raised when statement ↵Ryuta Kamizono2017-11-133-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | timeout exceeded (#31129) We are sometimes using The MAX_EXECUTION_TIME hint for MySQL depending on the situation. It will prevent catastrophic performance down by wrong performing queries. The new error class `StatementTimeout` will make to be easier to handle that case. https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-hints-execution-time
* | | | | | | | | | | Merge pull request #30773 from y-yagi/fix_30765Eileen M. Uchitelle2017-11-121-1/+2
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Make automatically synchronize test schema work inside engine