aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #20437 from pwnall/abstract_fixturesRafael Mendonça França2015-06-094-0/+30
|\ | | | | Fix crash when loading fixture with belongs_to association defined in abstract base class
| * Fix crash when loading fixture with belongs_to association defined in ↵Victor Costan2015-06-044-0/+30
| | | | | | | | abstract base class.
* | Return a `Point` object from the PG Point typeSean Griffin2015-06-051-11/+108
|/ | | | | | | | | | | | | | | | | | | This introduces a deprecation cycle to change the behavior of the default point type in the PostgreSQL adapter. The old behavior will continue to be available for the immediate future as `:legacy_point`. The current behavior of returning an `Array` causes several problems, the most significant of which is that we cannot differentiate between an array of points, and a point itself in the case of a column with the `point[]` type. The attributes API gives us a reasonable way to have a proper deprecation cycle for this change, so let's take advantage of it. If we like this change, we can also add proper support for the other geometric types (line, lseg, box, path, polygon, and circle), all of which are just aliases for string today. Fixes #20441
* Apply Active Record suppression to all savesGeorge Claghorn2015-06-041-1/+32
| | | | | | | It was not being applied to creates and updates attempted through the non-bang save methods. This means that, for example, creation of records for singular associations through the `create_*` methods was not appropriately ignored in .suppress blocks.
* Skip test that fails from outdated sqlite3 on travisSean Griffin2015-06-021-7/+9
|
* Fix postgresql DISTINCT requirement in pluck testKevin Deisz2015-06-021-2/+2
|
* Merge pull request #20362 from kddeisz/enumerable_pluckRafael Mendonça França2015-06-011-0/+21
|\ | | | | Allow Enumerable#pluck to take a splat.
| * Allow Enumerable#pluck to take a splat.Kevin Deisz2015-05-291-0/+21
| | | | | | | | | | | | This allows easier integration with ActiveRecord, such that AR#pluck will now use Enumerable#pluck if the relation is loaded, without needing to hit the database.
* | Map :bigint as NUMBER(19) sql_type by using `:limit => 19` for OracleYasuo Honda2015-06-012-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | since NUMBER(8) is not enough to store the maximum number of bigint. Oracle NUMBER(p,0) as handled as integer because there is no dedicated integer sql data type exist in Oracle database. Also NUMBER(p,s) precision can take up to 38. p means the number of digits, not the byte length. bigint type needs 19 digits as follows. $ irb 2.2.2 :001 > limit = 8 => 8 2.2.2 :002 > maxvalue_of_bigint = 1 << ( limit * 8 - 1) => 9223372036854775808 2.2.2 :003 > puts maxvalue_of_bigint.to_s.length 19 => nil 2.2.2 :004 >
* | Ensure symbols passed to `select` are always quotedSean Griffin2015-05-301-0/+22
|/ | | | | | | | | | | | | | | | | Our general contract in Active Record is that strings are assumed to be SQL literals, and symbols are assumed to reference a column. If a from clause is given, we shouldn't include the table name, but we should still quote the value as if it were a column. Upon fixing this, the tests were still failing on SQLite. This was because the column name being returned by the query was `"\"join\""` instead of `"join"`. This is actually a bug in SQLite that was fixed a long time ago, but I was using the version of SQLite included by OS X which has this bug. Since I'm guessing this will be a common case for contributors, I also added an explicit check with a more helpful error message. Fixes #20360
* Persist user provided default values, even if unchangedSean Griffin2015-05-282-26/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a usability change to fix a quirk from our definition of partial writes. By default, we only persist changed attributes. When creating a new record, this is assumed that the default values came from the database. However, if the user provided a default, it will not be persisted, since we didn't see it as "changed". Since this is a very specific case, I wanted to isolate it with the other quirks that come from user provided default values. The number of edge cases which are presenting themselves are starting to make me wonder if we should just remove the ability to assign a default, in favor of overriding `initialize`. For the time being, this is required for the attributes API to not have confusing behavior. We had to delete one test, since this actually changes the meaning of `.changed?` on Active Record models. It now specifically means `changed_from_database?`. While I think this will make the attributes API more ergonomic to use, it is a subtle change in definition (though not a backwards incompatible one). We should probably figure out the right place to document this. (Feel free to open a PR doing that if you're reading this). /cc @rafaelfranca @kirs @senny This is an alternate implementation of #19921. Close #19921. [Sean Griffin & Kir Shatrov]
* Allow proc defaults with the Attributes APISean Griffin2015-05-281-0/+10
| | | | | | | | | | | | This is a variant implementation of the changes proposed in #19914. Unlike that PR, the change in behavior is isolated in its own class. This is to prevent wonky behavior if a Proc is assigned outside of the default, and it is a natural place to place the behavior required by #19921 as well. Close #19914. [Sean Griffin & Kir Shatrov]
* Merge pull request #20196 from huoxito/preload-association-and-mergesRafael Mendonça França2015-05-281-1/+27
|\ | | | | Properly append preload / includes args on Merger
| * Properly append preload / includes args on MergerWashington Luiz2015-05-281-1/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Couldn't find other way to get the association name from a given class other than looping through `reflect_on_all_associations` reflections .. Noticed this one while looking at this example: ```ruby class Product < ActiveRecord::Base has_many :variants has_many :translations end class Translation < ActiveRecord::Base belongs_to :product end class Variant < ActiveRecord::Base belongs_to :product end class BugTest < Minitest::Test def test_merge_stuff product = Product.create! name: 'huhu' variant = Variant.create! product_id: product.id Translation.create! locale: 'en', product_id: product.id product_relation = Product.all .preload(:translations) .joins(:translations) .merge(Translation.where(locale: 'en')) .where(name: 'huhu') assert_equal variant, Variant.joins(:product).merge(product_relation).first end end ```
* | Merge pull request #20041 from akshay-vishnoi/sqlite_collationRafael Mendonça França2015-05-283-5/+58
|\ \ | | | | | | | | | SQLite3: Add collation support for string and text columns
| * | Add collation support for string and text columns in SQLite3Akshay Vishnoi2015-05-283-5/+58
| | |
* | | Add test to 57daaefRafael Mendonça França2015-05-281-1/+1
|/ /
* | Merge pull request #20171 from georgeclaghorn/enums-in-fixturesRafael Mendonça França2015-05-274-32/+50
|\ \ | | | | | | | | | Allow the use of symbols or strings to specify enum values in test fixtures
| * | Resolve enums in test fixturesGeorge Claghorn2015-05-274-32/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, values for columns backing Active Record enums must be specified as integers in test fixtures: awdr: title: "Agile Web Development with Rails" status: 2 rfr: title: "Ruby for Rails" status: <%= Book.statuses[:proposed] %> This is potentially confusing, since enum values are typically specified as symbols or strings in application code. To resolve the confusion, this change permits the use of symbols or strings to specify enum values: awdr: status: :published It is compatible with fixtures that specify enum values as integers.
* | | Merge pull request #19886 from henders/henders/reload_wipe_query_cacheRafael Mendonça França2015-05-271-0/+27
|\ \ \ | | | | | | | | | | | | Cause ActiveRecord::Base::reload to also ignore the QueryCache.
| * | | Cause ActiveRecord::Base::reload to also ignore the QueryCache.Shane Hender2015-04-281-0/+27
| | | |
* | | | Merge pull request #17654 from kamipo/strict_mode_explicitlyRafael Mendonça França2015-05-272-0/+18
|\ \ \ \ | |_|/ / |/| | | If specify `strict: :default` explicitly, do not set sql_mode.
| * | | If specify `strict: :default` explicitly, do not set sql_mode.Ryuta Kamizono2015-05-262-0/+18
| | | | | | | | | | | | | | | | Related with #17370.
* | | | Merge pull request #20269 from wojobucco/masterRafael Mendonça França2015-05-271-4/+4
|\ \ \ \ | |/ / / |/| | | | | | | Changed mysqldump to include sprocs and functions
| * | | Changed mysqldump to include sprocs and functionsJonathan Worek2015-05-221-4/+4
| | |/ | |/|
* | | add `extend` option on `has_and_belongs_to_many`.keepcosmos2015-05-261-0/+15
| | |
* | | Remove unused variableArun Agrawal2015-05-261-1/+1
| | | | | | | | | | | | Was left in adfab2dcf4003ca564d78d4425566dd2d9cd8b4f
* | | deprecate `Relation#uniq` use `Relation#distinct` instead.Yves Senn2015-05-268-28/+41
|/ / | | | | | | | | | | | | | | | | See #9683 for the reasons we switched to `distinct`. Here is the discussion that triggered the actual deprecation #20198. `uniq`, `uniq!` and `uniq_value` are still around. They will be removed in the next minor release after Rails 5.
* | Merge pull request #20175 from eugeneius/copy_schema_cache_after_forkRafael Mendonça França2015-05-182-23/+46
|\ \ | | | | | | Add schema cache to new connection pool after fork
| * | Add schema cache to new connection pool after forkEugene Kenny2015-05-172-23/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Active Record detects when the process has forked and automatically creates a new connection pool to avoid sharing file descriptors. If the existing connection pool had a schema cache associated with it, the new pool should copy it to avoid unnecessarily querying the database for its schema. The code to detect that the process has forked is in ConnectionHandler, but the existing test for it was in the ConnectionManagement test file. I moved it to the right place while I was writing the new test for this change.
* | | Merge pull request #20190 from kamipo/fix_serial_with_quoted_sequence_nameRafael Mendonça França2015-05-181-0/+8
|\ \ \ | | | | | | | | Fix `serial?` with quoted sequence name
| * | | Fix `serial?` with quoted sequence nameRyuta Kamizono2015-05-181-0/+8
| |/ /
* / / sqlite3_mem has an existing connectionMatthew Draper2015-05-181-1/+3
|/ / | | | | | | | | We must account for receiving one less call to #new_connection, but the test otherwise remains valid.
* | AR::ConPool - remove synchronization around connection cache.thedarkone2015-05-141-4/+132
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Renamed `@reserved_connections` -> `@thread_cached_conns`. New name clearly conveys the purpose of the cache, which is to speed-up `#connection` method. The new `@thread_cached_conns` now also uses `Thread` objects as keys (instead of previously `Thread.current.object_id`). Since there is no longer any synchronization around `@thread_cached_conns`, `disconnect!` and `clear_reloadable_connections!` methods now pre-emptively obtain ownership (via `checkout`) of all existing connections, before modifying internal data structures. A private method `release` has been renamed `thread_conn_uncache` to clear-up its purpose. Fixed some brittle `thread.status == "sleep"` tests (threads can go into sleep even without locks).
* | AR::ConPool - establish connections outside of critical section.thedarkone2015-05-142-1/+35
| |
* | AR::ConPool - reduce post checkout critical section.thedarkone2015-05-141-1/+3
| | | | | | | | Move post checkout connection verification out of mutex.synchronize.
* | Merge pull request #20150 from karanarora/Typo-fixRafael Mendonça França2015-05-131-1/+1
|\ \ | | | | | | remove redundant parenthesis
| * | remove redundant parenthesiskaranarora2015-05-141-1/+1
| | |
* | | invalid sti error message contains the full class name.Yves Senn2015-05-131-0/+11
| | | | | | | | | | | | | | | | | | | | | This can resolve confusing situation when a top level constant exists but a namespaced version is identified. Related to #19531.
* | | Merge branch 'sti-subclass-from-attributes' of ↵Yves Senn2015-05-132-0/+10
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | https://github.com/agrobbin/rails into agrobbin-sti-subclass-from-attributes Conflicts: activerecord/CHANGELOG.md
| * | | allow setting of a demodulized class name when using STIAlex Robbin2015-05-112-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If your STI class looks like this: ```ruby class Company < ActiveRecord::Base self.store_full_sti_class = false class GoodCo < Company end class BadCo < Company end end ``` The expectation (which is valid) is that the `type` in the database is saved as `GoodCo` or `BadCo`. However, another expectation should be that setting `type` to `GoodCo` would correctly instantiate the object as a `Company::GoodCo`. That second expectation is what this should fix.
* | | | Add full set of MySQL CLI options to support SSL authentication when using ↵Alex Coomans2015-05-121-1/+10
|/ / / | | | | | | | | | db:structure dump and load
* | | remove duplicate test.Yves Senn2015-05-081-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | The old `test_create_bang_returns_falsy_when_join_record_has_errors` had a missleading name and was a duplicate of `test_save_should_not_raise_exception_when_join_record_has_errors`. Since it had an assertion on the return value I renamed it accordingly and got rid of the duplicate test.
* | | tests, extract helpers to modify global state.Yves Senn2015-05-071-46/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | Make sure that tests do not hardcode the default value. For example `test_instantiation_doesnt_try_to_require_corresponding_file` always restored the configuration to `true` regardless of what it's original value was. Extract a helper to make the global modification consistent across tests.
* | | Merge pull request #17632 from eugeneius/schema_cache_dump_connection_poolAaron Patterson2015-05-041-0/+15
|\ \ \ | | | | | | | | Apply schema cache dump when creating connections
| * | | Apply schema cache dump when creating connectionsEugene Kenny2015-04-291-0/+15
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `db:schema:cache:dump` rake task dumps the database schema structure to `db/schema_cache.dump`. If this file is present, the schema details are loaded into the currently checked out connection by a railtie while Rails is booting, to avoid having to query the database for its schema. The schema cache dump is only applied to the initial connection used to boot the application though; other connections from the same pool are created with an empty schema cache, and still have to load the structure of each table directly from the database. With this change, a copy of the schema cache is associated with the connection pool and applied to connections as they are created.
* | | More exercise the create index sql testsRyuta Kamizono2015-05-042-0/+74
| | |
* | | Merge pull request #19994 from kamipo/dump_indexes_in_create_tableRafael Mendonça França2015-05-031-10/+10
|\ \ \ | | | | | | | | | | | | Dump indexes in `create_table` instead of `add_index`
| * | | Dump indexes in `create_table` instead of `add_index`Ryuta Kamizono2015-05-031-10/+10
| | | | | | | | | | | | | | | | | | | | If the adapter supports indexes in create table, generated SQL is slightly more efficient.
* | | | Merge pull request #17824 from ↵Rafael Mendonça França2015-05-032-1/+4
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | yuki24/change-record-not-saved-and-not-destroyed-to-include-error-msg AR::RecordNotSaved & RecordNotDestroyed from save!/destroy! should include an error message