From d00e7e85480941188cb8048104a305f62271731a Mon Sep 17 00:00:00 2001 From: alexreisner <alex@alexreisner.com> Date: Wed, 31 Mar 2010 13:21:59 -0400 Subject: [PATCH] Fix PostgreSQL bug reported by developish. Avoid using column aliases in the HAVING clause (not allowed by PostgreSQL). --- lib/geocoder.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/geocoder.rb b/lib/geocoder.rb index 5005afd3..fc1a8132 100644 --- a/lib/geocoder.rb +++ b/lib/geocoder.rb @@ -94,18 +94,19 @@ module Geocoder # generate hash lat_attr = geocoder_options[:latitude] lon_attr = geocoder_options[:longitude] + distance = "3956 * 2 * ASIN(SQRT(" + + "POWER(SIN((#{latitude} - #{lat_attr}) * " + + "PI() / 180 / 2), 2) + COS(#{latitude} * PI()/180) * " + + "COS(#{lat_attr} * PI() / 180) * " + + "POWER(SIN((#{longitude} - #{lon_attr}) * " + + "PI() / 180 / 2), 2) ))" { - :select => "*, 3956 * 2 * ASIN(SQRT(" + - "POWER(SIN((#{latitude} - #{lat_attr}) * " + - "PI() / 180 / 2), 2) + COS(#{latitude} * PI()/180) * " + - "COS(#{lat_attr} * PI() / 180) * " + - "POWER(SIN((#{longitude} - #{lon_attr}) * " + - "PI() / 180 / 2), 2) )) as distance", + :select => "*, #{distance} AS distance", :conditions => [ "#{lat_attr} BETWEEN ? AND ? AND " + "#{lon_attr} BETWEEN ? AND ?", lat_lo, lat_hi, lon_lo, lon_hi], - :having => "distance <= #{radius}", + :having => "#{distance} <= #{radius}", :order => options[:order], :limit => limit } -- GitLab