Commit Graph

4739 Commits

Author SHA1 Message Date
Neeraj Singh
4bf1ecd6d8 Removed support for deprecated counter_sql 2013-07-02 17:54:16 +05:30
Neeraj Singh
1a560e6160 Removing not useful test related to reflect_on_all_associations
The comment in the test pretty much summarizes the issue.
`FIXME these assertions bust a lot`

Adding any type of association in class `Firm` will break this test.

I removed some deprecated stuff and this test failed.

I do not think this test provides any useful value. First of all who
counted last that 39 is the right number of associations.

Secondly there are a large number of tests which depend on reflection
returning right information about associations. Those tests will start
failing if there is a bug in the code.
2013-07-02 12:14:16 +05:30
Rafael Mendonça França
260c2015b3 Merge pull request #10604 from neerajdotname/delete_all_should_not_call_callbacks
Do not invoke callbacks when delete_all is called

Conflicts:
	activerecord/CHANGELOG.md
2013-07-01 23:41:32 -03:00
Neeraj Singh
71db2420a1 calling default_scope without a proc will raise ArgumentError
Calling default_scope without a proc will now raise `ArgumentError`.
2013-07-02 08:07:33 +05:30
Neeraj Singh
a8c888cca9 Removed deprecated options for assocations
Deprecated options `delete_sql`, `insert_sql`, `finder_sql` and `counter_sql`
have been deleted.
2013-07-02 06:22:25 +05:30
Yves Senn
a444ea3478 remove deprecated ActiveRecord::Base#connection method. 2013-07-01 22:44:24 +02:00
Yves Senn
2181832fca Remove deprecated :distinct option from Relation#count. 2013-07-01 22:11:20 +02:00
Neeraj Singh
1f45d3c94d Removed deprecated methods partial_updates and family
Removed deprecated methods `partial_updates`, `partial_updates?` and
`partial_updates=`
2013-07-02 00:50:50 +05:30
Neeraj Singh
f319e4a942 Do not invoke callbacks when delete_all is called
Method `delete_all` should not be invoking callbacks and this
feature was deprecated in Rails 4.0. This is being removed.
`delete_all` will continue to honor the `:dependent` option. However
if `:dependent` value is `:destroy` then the default deletion
strategy for that collection will be applied.

User can also force a deletion strategy by passing parameter to
`delete_all`. For example you can do `@post.comments.delete_all(:nullify)`
2013-06-30 14:50:18 +05:30
Yves Senn
22b3481ba2 remove deprecated implicit join references. 2013-06-29 10:50:44 +02:00
Carlos Antonio da Silva
8f63515f6e Merge pull request #11161 from dmitry/find_in_batches_works_without_logger
ActiveRecord find_in_batches should work without logger

When I set logger to nil both methods from Batches module find_in_batches or find_each should work anyway.
2013-06-28 06:00:20 -07:00
Dmitry Polushkin
1cf6871a9e find_in_batches should work without logger 2013-06-28 13:51:00 +01:00
Jon Leighton
94924dc32b Simplify/fix implementation of default scopes
The previous implementation was necessary in order to support stuff
like:

    class Post < ActiveRecord::Base
      default_scope where(published: true)
      scope :ordered, order("created_at")
    end

If we didn't evaluate the default scope at the last possible moment
before sending the SQL to the database, it would become impossible to
do:

    Post.unscoped.ordered

This is because the default scope would already be bound up in the
"ordered" scope, and therefore wouldn't be removed by the
"Post.unscoped" part.

In 4.0, we have deprecated all "eager" forms of scopes. So now you must
write:

    class Post < ActiveRecord::Base
      default_scope { where(published: true) }
      scope :ordered, -> { order("created_at") }
    end

This prevents the default scope getting bound up inside the "ordered"
scope, which means we can now have a simpler/better/more natural
implementation of default scoping.

A knock on effect is that some things that didn't work properly now do.
For example it was previously impossible to use #except to remove a part
of the default scope, since the default scope was evaluated after the
call to #except.
2013-06-28 13:45:57 +01:00
Jon Leighton
55193e449a Apply default scope when joining associations.
For example:

    class Post < ActiveRecord::Base
      default_scope -> { where published: true }
    end

    class Comment
      belongs_to :post
    end

When calling `Comment.join(:post)`, we expect to receive only
comments on published posts, since that is the default scope for
posts.

Before this change, the default scope from `Post` was not applied,
so we'd get comments on unpublished posts.
2013-06-28 11:47:00 +01:00
Jon Leighton
4642f5487a Fix test
Oops. We need to estalish/remove the connection in the setup/teardown,
else it messes with the fixtures.
2013-06-28 11:46:03 +01:00
Jon Leighton
cb8c950333 Fix rake test_sqlite3_mem
Clearly nobody uses this except me. It's fast people!
2013-06-28 11:37:42 +01:00
Łukasz Strzałkowski
3cc7223f3d Remove depreacted finders
They were deprecated in 4.0, planned to remove in 4.1
2013-06-28 00:24:11 +02:00
Carlos Antonio da Silva
37bacd3df2 Merge pull request #10730 from tkhr/add_test_for_AR__CounterCache#update_counters
Add test for AR::CounterCache.update_counters
2013-06-25 17:29:33 -07:00
Carlos Antonio da Silva
370e1ad3f1 Merge pull request #10853 from kennyj/deprecated-database_tasks
Remove Oracle / Sqlserver / Firebird database tasks were deprecated since 4.0.
2013-06-25 16:56:39 -07:00
Carlos Antonio da Silva
840c552047 Merge pull request #10992 from Empact/find-each-enumerator
When .find_each is called without a block, return an Enumerator.
2013-06-25 20:09:17 -03:00
Carlos Antonio da Silva
755069ee4e Merge pull request #10993 from Empact/result-each-enumerator
Change Result#each to return an Enumerator when called without a block.
2013-06-25 20:07:59 -03:00
Vipul A M
9d474d4885 Fix another_contract not being used warning 2013-06-24 21:05:04 +05:30
Jared Armstrong
f6cdc2282f test-case to prevent regressions described in #10901. 2013-06-24 08:52:08 +02:00
Yves Senn
951bde4557 test-case to prevent regressions on Association#build with an Array.
Closes #11026
2013-06-22 14:11:12 +02:00
Neeraj Singh
32420bd4bc flatten merged join_values before building the joins
fixes #10669

While joining_values special treatment is given to string values.
By flattening the array it ensures that string values are detected
as strings and not arrays.
2013-06-22 08:33:03 +05:30
Neeraj Singh
82882d4162 do not load all child records for inverse case
currently `post.comments.find(Comment.first.id)` would load all
comments for the given post to set the inverse association.

This has a huge performance penalty. Because if post has 100k
records and all these 100k records would be loaded in memory
even though the comment id was supplied.

Fix is to use in-memory records only if loaded? is true. Otherwise
load the records using full sql.

Fixes #10509
2013-06-21 23:35:12 +05:30
Neeraj Singh
6741a0a187 fix bad test by making number that fits for integer
PR https://github.com/rails/rails/pull/10566 had to be reverted
because after applying the fix test
"test_raise_record_not_found_error_when_invalid_ids_are_passed"
started failing.

In this test invalid_id is being assigned a really large number
which was causing following failure when PR #10566 was applied.

```
RangeError: bignum too big to convert into `long long'
SELECT  `interests`.* FROM `interests`
WHERE `interests`.`man_id` = ? AND `interests`.`id` = ?
LIMIT 1  [["man_id", 970345987], ["id", 2394823094892348920348523452345]]
```

This test is not failing in master because when test code
`man.interests.find(invalid_id)` is executed then interests
are fully loaded in memory and no database query is executed.

After PR #10566 was merged then test code
`man.interests.find(invalid_id)` started executing sql query
and hence the error.

In case someone is wondering why the second part of query is not
failing, then that's because the actual query does not require
any variable substituation where the number is large. In that
case the sql generate is following.

```
SELECT `interests`.* FROM `interests`
WHERE `interests`.`man_id` = ? AND `interests`.`id`
IN (8432342, 2390102913, 2453245234523452)  [["man_id", 970345987]]
```
2013-06-21 23:27:28 +05:30
Yves Senn
0f3aadae3b inspect for AR model classes does not initiate a new connection. 2013-06-20 07:21:04 +02:00
Yves Senn
12e1817835 Merge pull request #10884 from dmarkow/pg_fix_default_quotes
Handle single quotes in PostgreSQL default column values
2013-06-19 09:11:07 -07:00
Dylan Markow
78f6268977 Handle single quotes in PostgreSQL default column values
PostgreSQL escapes single quotes by using an additional single quote.
When Rails queries the column information, PostgreSQL returns the
default values with the escaped single quotes.

#extract_value_from_default now converts these to one single quote each.

Fixes #10881.
2013-06-19 11:03:40 -05:00
Jon Leighton
e47b6dee85 Revert "Merge pull request #10566 from neerajdotname/10509d"
This reverts commit 2b817a5e89ac0e7aeb894a40ae7151a0cf3cef16, reversing
changes made to 353a398bee68c5ea99d76ac7601de0a5fef6f4a5.

Conflicts:
	activerecord/CHANGELOG.md

Reason: the build broke
2013-06-19 14:22:02 +01:00
Neeraj Singh
6fb5f6f3d6 log the sql that is actually sent to the database
If I have a query that produces sql
`WHERE "users"."name" = 'a         b'` then in the log all the
whitespace is being squeezed. So the sql that is printed in the
log is `WHERE "users"."name" = 'a b'`.

This can be confusing. This commit fixes it by ensuring that
whitespace is not squeezed.

fixes #10982
2013-06-19 17:37:27 +05:30
Ben Woosley
25042359b3 When .find_each is called without a block, return an Enumerator.
This lets us do things like call: .find_each.with_index
2013-06-19 04:04:13 -07:00
Neeraj Singh
2b73f780ff do not load all child records for inverse case
currently `post.comments.find(Comment.first.id)` would load all
comments for the given post to set the inverse association.

This has a huge performance penalty. Because if post has 100k
records and all these 100k records would be loaded in memory
even though the comment id was supplied.

Fix is to use in-memory records only if loaded? is true. Otherwise
load the records using full sql.

Fixes #10509
2013-06-19 04:09:43 +05:30
Ben Woosley
d6cfbaea72 Change Result#each to return an Enumerator when called without a block.
As with #10992, this lets us call #with_index, etc on the results.
2013-06-18 15:34:18 -07:00
Xavier Noria
7324624f74 Merge pull request #10987 from senny/10979_association_include_returns_true
`CollectionProxy#include?` returns `true` and `false` as documented.
2013-06-18 00:01:22 -07:00
Yves Senn
394cc6047d CollectionProxy#include? returns true and false as documented. 2013-06-18 08:53:36 +02:00
Aaron Patterson
e086ff5635 just construct real objects rather than mock and stub 2013-06-17 10:50:11 -07:00
Aaron Patterson
252d11321f Merge branch 'master' into mrbrdo-fixserialization
* master: (142 commits)
  Use Colspan in th Tags
  Added test for link_to_unless to make sure the result consistency.
  Escape the string even when the condition of link_to_unless is not satisfied.
  Add CHANGELOG entry for #10969
  Use a case insensitive URI Regexp for #asset_path
  collection tags accept html attributes as the last element of collection
  Rewind StringIO instances before be parsed again
  Use xml instead already parsed xml
  Updated the doc for const_regexp [ci skip]
  Make test name descriptive and add reference to original regression commit
  fixture setup does not rely on `AR::Base.configurations`.
  regression test + mysql2 adapter raises correct error if conn is closed.
  cleanup, remove trailing whitespace from AR changelog
  'json' gem is no more required under JRuby
  fix typos
  Fix AS changelog [ci skip]
  Update the HTML boolean attributes per the HTML 5.1 spec
  Changing const_regexp to check for constant name.
  valid_app_const? -> valid_const?
  Add CHANGELOG entry for #10740
  ...
2013-06-17 10:47:08 -07:00
Rafael Mendonça França
fe01752418 Merge pull request #10533 from vipulnsward/fix_test
Fix test, addresss => address
2013-06-15 06:27:19 -07:00
Vipul A M
e9177816ff Make test name descriptive and add reference to original regression commit 2013-06-15 18:39:06 +05:30
Yves Senn
6d10d64cba fixture setup does not rely on AR::Base.configurations.
As you can also configure your database connection using `ENV["DATABASE_URL"]`,
the fixture setup can't reply on the `.configurations` Hash.

As the fixtures are only loaded when ActiveRecord is actually used
(`rails/test_help.rb`) it should be safe to drop the check for an existing configuration.
2013-06-15 14:58:38 +02:00
Yves Senn
36bc4f5a02 regression test + mysql2 adapter raises correct error if conn is closed. 2013-06-15 14:35:14 +02:00
Yves Senn
c3adb313aa Merge pull request #10953 from acapilleri/fix_typos
fix typos
2013-06-15 03:24:38 -07:00
Angelo Capilleri
f7b9a9a836 fix typos 2013-06-15 09:14:28 +02:00
Aaron Patterson
8f37ba81ab This test does not test anything that happens in the real world. If you
recreate the models without mucking with internal caches of the relation
objects, then the test fails.

For example:

class Man < ActiveRecord::Base
  has_many :interests
end

class Interest < ActiveRecord::Base
  belongs_to :man
end

Then do this test:

def test_validate_presence_of_parent_fails_without_inverse_of
  repair_validations(Interest) do
    Interest.validates_presence_of(:man)
    assert_no_difference ['Man.count', 'Interest.count'] do
      man = Man.create(:name => 'John',
                       :interests_attributes => [{:topic=>'Cars'}, {:topic=>'Sports'}])
      assert_not_predicate man.errors[:"interests.man"], :empty?
    end
  end
end

The test will fail.  This is a bad test, so I am removing it.
2013-06-13 15:36:50 -07:00
Aaron Patterson
9abcb131f9 refute the predicate for better failure messages 2013-06-13 10:50:53 -07:00
Aaron Patterson
b483a0d2a7 Ambiguous reflections are on :through relationships are no longer supported.
For example, you need to change this:

  class Author < ActiveRecord::Base
    has_many :posts
    has_many :taggings, :through => :posts
  end

  class Post < ActiveRecord::Base
    has_one :tagging
    has_many :taggings
  end

  class Tagging < ActiveRecord::Base
  end

To this:

  class Author < ActiveRecord::Base
    has_many :posts
    has_many :taggings, :through => :posts, :source => :tagging
  end

  class Post < ActiveRecord::Base
    has_one :tagging
    has_many :taggings
  end

  class Tagging < ActiveRecord::Base
  end
2013-06-13 09:46:42 -07:00
Aaron Patterson
4909337a1f indentation 2013-06-11 11:24:16 -07:00
Yves Senn
da9b5d4a84 Remove fall back and column restrictions for count. 2013-06-09 12:53:04 +02:00