aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #30919 from seanlinsley/17622-before_save_strict_argumentsRyuta Kamizono2018-07-231-0/+27
|\ | | | | | | Add strict argument checking to ActiveRecord callbacks
| * add strict argument checking to ActiveRecord callbacksSean Linsley2018-07-221-0/+23
|/ | | | This ends up adding it to all save-related callbacks defined in `ActiveRecord::DefineCallbacks`, including e.g. `after_create`. Which should be fine: they didn't support `:on` in the first place.
* Merge pull request #33415 from orhantoy/feature/docs-consistent-hash-syntaxGeorge Claghorn2018-07-221-8/+8
|\ | | | | [ci skip] Use consistent hash syntax in AR docs
| * [ci skip] Use consistent hash syntax in AR docsOrhan Toy2018-07-221-8/+8
| | | | | | | | | | The examples with `.where` uses hash w/ symbol keys so it would be more consistent to also do this with `.new`. Also from my experience the hash w/ symbol keys is more widely used with `where/new/create` etc. in ActiveRecord.
* | [ci skip] Tidy up formatting of examplesOrhan Toy2018-07-221-12/+3
|/ | | | The consecutive verbatim blocks were being merged making the output look weird.
* Replace permissive Mocha expectationsutilum2018-07-222-32/+86
| | | | | | | | | | | | | | | | | | | | | | | | | Step 6 in #33162 When using Mocha like this: `ActiveRecord::Base.expects(:establish_connection).with(some_args)`, the expectations created look something like this: ``` @expectations= [#<Expectation:0x561350d968e0 expected exactly once, not yet invoked: ActiveRecord::Base.establish_connection("adapter" => "mysql2", "database" => nil) >, #<Expectation:0x561350dab8f8 allowed any number of times, not yet invoked: ActiveRecord::Base.establish_connection(any_parameters) >, #<Expectation:0x561350dc30c0 allowed any number of times, not yet invoked: ActiveRecord::Base.connection(any_parameters) >] ``` Minitest mocking (and the way we use it in `MethodCallAssertions`) expressly refuses to facilitate such permissiive expectations, insisting that all calls be specified in the actual expected order. This patch replaces such calls to `Mocha#expects` with `ActiveSupport::Testing::MethodCallAssertions` and specifies all expected calls in the epxected order.
* Replace Mocha#stubs with assert_called_withutilum2018-07-221-6/+11
| | | | A correct, but not obvious use of `ActiveSupport::Testing::MethodCallAssertions`, which might also have been part of #33337 or #33391.
* Fix Mocha replacement that slipped out of #33337utilum2018-07-221-11/+15
|
* CHANGELOG entryBrian Christian2018-07-191-0/+6
|
* don't impose primary key order if limit() is definedBrian Christian2018-07-191-1/+1
|
* tests for use of primary_key with limitBrian Christian2018-07-191-0/+15
|
* Merge pull request #33394 from kamipo/avoid_extra_scopingEileen M. Uchitelle2018-07-193-2/+8
|\ | | | | Avoid extra scoping in delegating to klass methods in the `scope` block
| * Avoid extra scoping in delegating to klass methods in the `scope` blockRyuta Kamizono2018-07-193-2/+8
| | | | | | | | | | | | | | | | | | | | Since #29301, delegating to klass methods in the `scope` block would cause extra scoping by the receiver itself. The extra scoping would always override intermediate scoping like `unscoped` and caused the regression #33387. To keep the original scoping behavior, should avoid the extra scoping in the `scope` block. Fixes #33387.
* | Merge pull request #33391 from utilum/method_call_assertions_instead_of_mochaRyuta Kamizono2018-07-195-98/+154
|\ \ | |/ |/| Use MethodCallAssertions instead of Mocha#expects
| * Use MethodCallAssertions instead of Mocha#expectsutilum2018-07-195-98/+154
| | | | | | | | | | | | | | | | | | | | Many calls to `Mocha#expects` preceded the introduction of `ActiveSupport::Testing::MethodCallAssertions` in 53f64c0fb, and many are simple to replace with `MethodCallAssertions`. This patch makes all these simple replacements. Step 5 in #33162
* | Fix `insert_fixtures_set` to be restored original connection flagsRyuta Kamizono2018-07-193-34/+116
|/ | | | | | #33363 has two regressions. First one is that `insert_fixtures_set` is failed if flags is an array. Second one is that connection flags are not restored if `set_server_option` is not supported.
* Revert "Short circuit the scoping delegation for `relation.all`"Ryuta Kamizono2018-07-191-1/+0
| | | | | | | This reverts commit eb807384c81a6e086b17a576755e992e6c4c685e. If the current scope is affected by the `unscoped` block, `all` won't be the same with `spawn`.
* Merge pull request #33363 from ahorek/transaction_bugRafael França2018-07-182-5/+38
|\ | | | | use set_server_option if possible
| * use set_server_option if possiblepavel2018-07-152-5/+38
| |
* | Merge pull request #33358 from azbshiri/summer-timeRafael França2018-07-182-2/+25
|\ \ | | | | | | Normalize the date component to 2000-01-01 automatically
| * | Test DST both in local and utc timezoneAlireza Bashiri2018-07-171-2/+24
| | | | | | | | | | | | | | | Also? Updated failing test.
| * | Implement change() to convert to "2001-01-01" firstSean Prashad2018-07-171-0/+1
| | | | | | | | | | | | (cherry picked from commit da34d4766c33a042aeb92778a492fa810ec23001)
* | | Replace some more Mocha#stub calls with Minitestutilum2018-07-173-25/+46
| | | | | | | | | | | | Missed these in preparing #33337
* | | Remove unnecessary Mocha stubutilum2018-07-171-1/+0
|/ / | | | | | | Should have been removed in #33309.
* | Clarify test casesbogdanvlviv2018-07-153-15/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | Remove extra stub of `ActiveRecord::Base::connection` in `activerecord/test/cases/tasks/mysql_rake_test.rb`. Remove extra stub of `File::exist?` in `activerecord/test/cases/tasks/sqlite_rake_test.rb`. `ActiveRecord::Base::establish_connection` shouldn't return `true` in test cases. Related to https://github.com/rails/rails/pull/33337.
* | Stub with Minitest instead of Mochautilum2018-07-156-461/+699
|/ | | | Step 4 in #33162
* Merge pull request #33350 from kamipo/address_blank_lines_automaticallyRafael França2018-07-129-21/+0
|\ | | | | Enable `Layout/EmptyLinesAroundBlockBody` to reduce review cost in the future
| * Enable `Layout/EmptyLinesAroundBlockBody` to reduce review cost in the futureRyuta Kamizono2018-07-129-21/+0
| | | | | | | | | | | | | | We sometimes ask "✂️ extra blank lines" to a contributor in reviews like https://github.com/rails/rails/pull/33337#discussion_r201509738. It is preferable to deal automatically without depending on manpower.
* | Merge pull request #28327 from rngtng/add-seed-dependencyRafael França2018-07-112-1/+6
|\ \ | |/ |/| Add missing env & config dependency to `rake db:seed`
| * Add missing load config dependency to `rake db:seed`Tobias Bielohlawek2018-07-102-1/+6
| |
* | Fix stubbed methods in test casesbogdanvlviv2018-07-102-3/+3
| | | | | | | | | | | | | | | | | | | | Remove returning of `false` value for stubbed `lock_thread=` methods since there aren't any needs in it. Remove unnecessary returning of `true` for stubbed `drop_database` method. Follow up #33309. Related to #33162, #33326.
* | Replace shallow mocks with Ruby classesutilum2018-07-105-18/+47
| | | | | | | | | | | | | | While preparing this I realised that some stubbed returns values serve no purpose, so this patch drops those as well. Step 3 in #33162
* | Avoid unneeded expanded column aliases array cachingRyuta Kamizono2018-07-102-8/+5
|/
* Reduce mocking by testing value instead of method callutilum2018-07-093-18/+24
| | | | Step 2 in #33162
* Merge pull request #33309 from utilum/remove_unnecessary_mocha_stubsRafael França2018-07-095-48/+18
|\ | | | | Remove unnecessary Mocha stubs
| * Remove unnecessary Mocha stubsutilum2018-07-075-48/+18
| | | | | | | | | | | | Step 1 in #33162 [utilum + bogdanvlviv]
* | SQLite: Don't leak internal schema objectsRyuta Kamizono2018-07-093-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Related #31201. If creating custom primary key (like a string) in SQLite, it would also create an internal index implicitly which named begin with "sqlite_". It need to be hidden since the internal object names are reserved and prohibited for public use. See https://www.sqlite.org/fileformat2.html#intschema Fixes #33320.
* | Subsecond precision is not supported until MySQL 5.6.4Ryuta Kamizono2018-07-092-19/+19
| |
* | Merge pull request #33280 from nkondratyev/fix/mysql-time-default-valuesRyuta Kamizono2018-07-094-4/+20
|\ \ | |/ |/| | | Fix default value for mysql time types with specified precision
| * Fix default value for mysql time types with specified precisionNikolay Kondratyev2018-07-044-4/+20
|/ | | | | | | | | | | | | | | | The TIME, DATETIME, and TIMESTAMP types [have supported](https://mariadb.com/kb/en/library/microseconds-in-mariadb/) a fractional seconds precision from 0 to 6. Default values from time columns with specified precision is read as `current_timestamp(n)` from information schema. rake `db:schema:dump` produces `schema.rb` **without** default values for time columns with the specified precision: t.datetime "last_message_at", precision: 6, null: false rake `db:schema:dump` produces `schema.rb` **with** default values for time columns with the specified precision: t.datetime "last_message_at", precision: 6, default: -> { "current_timestamp(6)" }, null: false
* Use `construct_join_dependency` in all placesRyuta Kamizono2018-07-033-13/+6
|
* Don't extract `readonly_value` each timeRyuta Kamizono2018-07-032-5/+7
|
* Don't share seen object cache between different join nodes in eager loadingRyuta Kamizono2018-07-032-2/+20
| | | | | | | | | | | Currently, the seen object cache is shared if join nodes have the same target class. But it is a wrong assumption, we can't share the seen object cache between different join nodes (e.g. `:readonly_account` and `:accounts` have the same target class `Account`, but the instances have the different state `readonly`). Fixes #26805. Closes #27737.
* Merge pull request #33242 from brasic/sqlite-readonlyRyuta Kamizono2018-07-032-1/+36
|\ | | | | | | Support readonly option in SQLite3Adapter
| * Support readonly option in SQLite3AdapterCarl Brasic2018-07-022-1/+36
|/ | | | | | | | | | | | | | | | | Readonly sqlite database files are very useful as a data format for storing configuration/lookup data that is too complicated for YAML files. But since such files would typically be committed to a source control repository, it's important to ensure that they are truly safe from being inadvertently modified. Unfortunately using unix permissions isn't enough, as sqlite will "helpfully" add the write bit to a database file whenever it's written to. sqlite3-ruby has supported a `:readonly` option since version 1.3.2 (see https://github.com/sparklemotion/sqlite3-ruby/commit/c20c9f5dd2990042) This simply passes that option through to the adapter if present in the config hash. I think this is best considered an adapter-specific option since no other supported database has an identical concept.
* Fix documentation based on feedbackAaron Patterson2018-06-262-3/+7
|
* define attribute methods in `init_from_db`Aaron Patterson2018-06-261-0/+2
| | | | | Now that `allocate` is removed, we need to define attribute methods in all "init" methods.
* Merge branch 'master' into homogeneous-allocationAaron Patterson2018-06-264-20/+7
|\ | | | | | | | | | | | | | | * master: Call initialize after allocate Remove `ActiveSupport::Concern` from `ActiveRecord::Aggregations` Add example for no_touching? in active_record/no_touching for api docs [ci skip] Generate a new key for each service test
| * Call initialize after allocateAaron Patterson2018-06-262-18/+0
| | | | | | | | | | | | | | | | If someone calls allocate on the object, they'd better also call an initialization routine too (you can't expect allocate to do any initialization work). Before this commit, AR objects that are instantiated from the database would call `define_attribute_methods` twice.
| * Remove `ActiveSupport::Concern` from `ActiveRecord::Aggregations`Ryuta Kamizono2018-06-261-2/+0
| | | | | | | | | | `include Aggregations` no longer needs to invoke `extend Aggregations::ClassMethods` since 657060b.