CRM-14317 fix for : while looking into this issue, found a DB: NAN field not found
authorPratik Joshi <pratik.joshi@webaccess.co.in>
Mon, 10 Mar 2014 08:33:39 +0000 (14:03 +0530)
committerPratik Joshi <pratik.joshi@webaccess.co.in>
Mon, 10 Mar 2014 08:33:39 +0000 (14:03 +0530)
CRM/Contact/BAO/ProximityQuery.php

index 9008e6f4e8e9429e901593c6426233bce8ca315e..66df70b4721a70309817428e33166fa57c649f3f 100644 (file)
@@ -203,11 +203,25 @@ class CRM_Contact_BAO_ProximityQuery {
         $distance
       );
 
+    // DONT consider NAN values (which is returned by rad2deg php function)
+    // for checking BETWEEN geo_code's criteria as it throws obvious 'NAN' field not found DB: Error
+    $geoCodeWhere = array();
+    if (!is_nan($minLatitude)) {
+      $geoCodeWhere[] = "{$tablePrefix}.geo_code_1  >= $minLatitude ";
+    }
+    if (!is_nan($maxLatitude)) {
+      $geoCodeWhere[] = "{$tablePrefix}.geo_code_1  <= $maxLatitude ";
+    }
+    if (!is_nan($minLongitude)) {
+      $geoCodeWhere[] = "{$tablePrefix}.geo_code_2 >= $minLongitude ";
+    }
+    if (!is_nan($maxLongitude)) {
+      $geoCodeWhere[] = "{$tablePrefix}.geo_code_2 <= $maxLongitude ";
+    }
+    $geoCodeWhereClause = implode(' AND ', $geoCodeWhere);
+
     $where = "
-{$tablePrefix}.geo_code_1  >= $minLatitude  AND
-{$tablePrefix}.geo_code_1  <= $maxLatitude  AND
-{$tablePrefix}.geo_code_2 >= $minLongitude AND
-{$tablePrefix}.geo_code_2 <= $maxLongitude AND
+{$geoCodeWhereClause} AND
 ACOS(
     COS(RADIANS({$tablePrefix}.geo_code_1)) *
     COS(RADIANS($latitude)) *
@@ -216,7 +230,6 @@ ACOS(
     SIN(RADIANS($latitude))
   ) * 6378137  <= $distance
 ";
-
     return $where;
   }