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