aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
Commit message (Collapse)AuthorAgeFilesLines
* SQLite3 adapter `alter_table` method restores foreign keysYasuo Honda2018-08-111-0/+13
| | | | Related to #33520
* Fix a wrong correctionKazuhiro Sera2018-08-081-1/+1
|
* Fix the obvious typos detected by github.com/client9/misspellKazuhiro Sera2018-08-085-16/+16
|
* Call build when extend with nested attributes definedAlireza Bashiri2018-08-022-1/+19
| | | | | | | | What? From now on when `accepts_nested_attributes_for` defined and `extend` option added the overwritten `build` method being called. [Alireza Bashiri, Martins Polakovs]
* Revert "Merge pull request #24131 from brchristian/limit_and_primary_key"Ryuta Kamizono2018-08-011-15/+0
| | | | | | | | | | This reverts commit d162188dd662a7d9f62ba8431474f50bc35e3e93, reversing changes made to 3576782888c307e3e192c44e332b957cd1174128. Reason: #24131 conflicts the #5153's default order contract, it means that existing apps would be broken by that change. We don't want to break existing apps without a deprecation cycle.
* Add test case for the #5153's default order contractRyuta Kamizono2018-08-011-0/+13
|
* Avoid extra scoping when using `Relation#update`Ryuta Kamizono2018-07-311-0/+4
| | | | | | | | | | | | | | Since 9ac7dd4, class level `update`, `destroy`, and `delete` were placed in the `Persistence` module as class methods. But `Relation#update` without passing ids which was introduced at #11898 is not a class method, and it was caused the extra scoping regression #33470. I moved the relation method back into the `Relation` to fix the regression. Fixes #33470.
* MySQL: Raise ActiveRecord::InvalidForeignKey for foreign-key constraint ↵George Claghorn2018-07-301-5/+16
| | | | violations on delete
* Don't expose configuration for a test.Kasper Timm Hansen2018-07-281-2/+3
| | | | Clean up some concepts in the code while we're here.
* Avoid logging ActiveRecord::LogSubscriber as the query source when the ↵lsylvester2018-07-281-0/+13
| | | | source is ignored (#33455)
* PostgreSQL 10 new relkind for partitioned tables (#31336)Yannick Schutz2018-07-271-0/+22
| | | | | | | | | | | | | | | | | | | | | | | * PostgreSQL 10 new relkind for partitioned tables Starting with PostgreSQL 10, we can now have partitioned tables natively * Add comment * Remove extra space * Add test for partition table in postgreSQL10 * Select 'p' for "BASE TABLE" and add a test case to support PostgreSQL 10 partition tables * Address RuboCop offense * Addressed incorrect `postgresql_version` Fixes #33008. [Yannick Schutz & Yasuo Honda & Ryuta Kamizono]
* Remove Rubocop's comments from Rails code basebogdanvlviv2018-07-261-1/+1
| | | | | | | | | | PR#32381 added Rubocop's comments to some tests files in order to exclude `Performance/RedundantMerge`. Turn off `Performance` cops for tests files via `Exclude` in `.rubocop.yml`. Context https://github.com/rails/rails/pull/32381#discussion_r205212331
* Merge pull request #32381 from q-centrix/update-codeclimate-configsRichard Schneeman2018-07-252-13/+13
|\ | | | | Turn on performance based cops
| * Turn on performance based copsDillon Welch2018-07-232-13/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use attr_reader/attr_writer instead of methods method is 12% slower Use flat_map over map.flatten(1) flatten is 66% slower Use hash[]= instead of hash.merge! with single arguments merge! is 166% slower See https://github.com/rails/rails/pull/32337 for more conversation
* | Normalize time value not to be affected by summer timeRyuta Kamizono2018-07-252-10/+40
|/ | | | Follow up of #33358 for SQLite3.
* 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.
* 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
|
* 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-192-0/+6
|\ | | | | 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-192-0/+6
| | | | | | | | | | | | | | | | | | | | 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-191-5/+80
|/ | | | | | #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.
* Merge pull request #33363 from ahorek/transaction_bugRafael França2018-07-181-0/+15
|\ | | | | use set_server_option if possible
| * use set_server_option if possiblepavel2018-07-151-0/+15
| |
* | Merge pull request #33358 from azbshiri/summer-timeRafael França2018-07-181-2/+24
|\ \ | | | | | | 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.
* | | 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
* 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.
* 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
* 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-091-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
| |
* | Fix default value for mysql time types with specified precisionNikolay Kondratyev2018-07-042-2/+14
|/ | | | | | | | | | | | | | | | 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
* Don't share seen object cache between different join nodes in eager loadingRyuta Kamizono2018-07-031-0/+18
| | | | | | | | | | | 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-031-0/+33
|\ | | | | | | Support readonly option in SQLite3Adapter
| * Support readonly option in SQLite3AdapterCarl Brasic2018-07-021-0/+33
|/ | | | | | | | | | | | | | | | | 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.
* Merge branch 'master' into homogeneous-allocationAaron Patterson2018-06-261-13/+0
|\ | | | | | | | | | | | | | | * 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-261-13/+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.
* | Speed up homogeneous AR lists / reduce allocationsAaron Patterson2018-06-251-0/+5
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit speeds up allocating homogeneous lists of AR objects. We can know if the result set contains an STI column before initializing every AR object, so this change pulls the "does this result set contain an STI column?" test up, then uses a specialized instantiation function. This way we only have to check for an STI column once rather than N times. This change also introduces a new initialization function that is meant for use when allocating AR objects that come from the database. Doing this allows us to eliminate one hash allocation per AR instance. Here is a benchmark: ```ruby require 'active_record' require 'benchmark/ips' ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" ActiveRecord::Migration.verbose = false ActiveRecord::Schema.define do create_table :users, force: true do |t| t.string :name t.timestamps null: false end end class User < ActiveRecord::Base; end 2000.times do User.create!(name: "Gorby") end Benchmark.ips do |x| x.report("find") do User.limit(2000).to_a end end ``` Results: Before: ``` [aaron@TC activerecord (master)]$ be ruby -I lib:~/git/allocation_tracer/lib speed.rb Warming up -------------------------------------- find 5.000 i/100ms Calculating ------------------------------------- find 56.192 (± 3.6%) i/s - 285.000 in 5.080940s ``` After: ``` [aaron@TC activerecord (homogeneous-allocation)]$ be ruby -I lib:~/git/allocation_tracer/lib speed.rb Warming up -------------------------------------- find 7.000 i/100ms Calculating ------------------------------------- find 72.204 (± 2.8%) i/s - 364.000 in 5.044592s ```
* `references(:developers_projects_join)` isn't needed if using `where` with ↵Ryuta Kamizono2018-06-261-16/+2
| | | | hash condition