mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fixed counter_sql when no records exist in database for PostgreSQL (would give error, not 0) #1039 [Caleb Tennis]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1104 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
4ab40059b7
commit
7b37c779d8
4 changed files with 17 additions and 2 deletions
|
@ -1,5 +1,7 @@
|
||||||
*SVN*
|
*SVN*
|
||||||
|
|
||||||
|
* Fixed counter_sql when no records exist in database for PostgreSQL (would give error, not 0) #1039 [Caleb Tennis]
|
||||||
|
|
||||||
* Fixed that benchmarking times for rendering included db runtimes #987 [skaes@web.de]
|
* Fixed that benchmarking times for rendering included db runtimes #987 [skaes@web.de]
|
||||||
|
|
||||||
* Fixed boolean queries for t/f fields in PostgreSQL #995 [dave@cherryville.org]
|
* Fixed boolean queries for t/f fields in PostgreSQL #995 [dave@cherryville.org]
|
||||||
|
|
|
@ -426,8 +426,14 @@ module ActiveRecord #:nodoc:
|
||||||
# Product.count "SELECT COUNT(*) FROM sales s, customers c WHERE s.customer_id = c.id"
|
# Product.count "SELECT COUNT(*) FROM sales s, customers c WHERE s.customer_id = c.id"
|
||||||
def count_by_sql(sql)
|
def count_by_sql(sql)
|
||||||
sql = sanitize_conditions(sql)
|
sql = sanitize_conditions(sql)
|
||||||
count = connection.select_one(sql, "#{name} Count").values.first
|
rows = connection.select_one(sql, "#{name} Count")
|
||||||
return count ? count.to_i : 0
|
|
||||||
|
if rows.nil?
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
count = rows.values.first
|
||||||
|
return count ? count.to_i : 0
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Increments the specified counter by one. So <tt>DiscussionBoard.increment_counter("post_count",
|
# Increments the specified counter by one. So <tt>DiscussionBoard.increment_counter("post_count",
|
||||||
|
|
|
@ -250,6 +250,10 @@ class HasManyAssociationsTest < Test::Unit::TestCase
|
||||||
assert_equal 1, Firm.find_first.clients_using_counter_sql.size
|
assert_equal 1, Firm.find_first.clients_using_counter_sql.size
|
||||||
assert_equal 0, Firm.find_first.clients_using_zero_counter_sql.size
|
assert_equal 0, Firm.find_first.clients_using_zero_counter_sql.size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_counting_non_existant_items_using_sql
|
||||||
|
assert_equal 0, Firm.find_first.no_clients_using_counter_sql.size
|
||||||
|
end
|
||||||
|
|
||||||
def test_belongs_to_sanity
|
def test_belongs_to_sanity
|
||||||
c = Client.new
|
c = Client.new
|
||||||
|
|
3
activerecord/test/fixtures/company.rb
vendored
3
activerecord/test/fixtures/company.rb
vendored
|
@ -17,6 +17,9 @@ class Firm < Company
|
||||||
has_many :clients_using_zero_counter_sql, :class_name => "Client",
|
has_many :clients_using_zero_counter_sql, :class_name => "Client",
|
||||||
:finder_sql => 'SELECT * FROM companies WHERE client_of = #{id}',
|
:finder_sql => 'SELECT * FROM companies WHERE client_of = #{id}',
|
||||||
:counter_sql => 'SELECT 0 FROM companies WHERE client_of = #{id}'
|
:counter_sql => 'SELECT 0 FROM companies WHERE client_of = #{id}'
|
||||||
|
has_many :no_clients_using_counter_sql, :class_name => "Client",
|
||||||
|
:finder_sql => 'SELECT * FROM companies WHERE client_of = 1000',
|
||||||
|
:counter_sql => 'SELECT COUNT(*) FROM companies WHERE client_of = 1000'
|
||||||
|
|
||||||
has_one :account, :dependent => true
|
has_one :account, :dependent => true
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue