]> git.openstreetmap.org Git - nominatim.git/commitdiff
move country list to SearchContext
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 8 Oct 2017 21:33:54 +0000 (23:33 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 8 Oct 2017 21:33:54 +0000 (23:33 +0200)
lib/Geocode.php
lib/SearchContext.php
lib/SearchDescription.php

index b978a72c077a1c77e1f20f7dbfb5d8758a062b1f..b27f69e8647e27eb0aaf308cd91df9bde9d059dd 100644 (file)
@@ -852,15 +852,14 @@ class Geocode
         if ($this->aExcludePlaceIDs) {
             $oCtx->setExcludeList($this->aExcludePlaceIDs);
         }
+        if ($this->aCountryCodes) {
+            $oCtx->setCountryList($this->aCountryCodes);
+        }
 
         $sNormQuery = $this->normTerm($this->sQuery);
         $sLanguagePrefArraySQL = getArraySQL(
             array_map("getDBQuoted", $this->aLangPrefOrder)
         );
-        $sCountryCodesSQL = false;
-        if ($this->aCountryCodes) {
-            $sCountryCodesSQL = join(',', array_map('addQuotes', $this->aCountryCodes));
-        }
 
         $sQuery = $this->sQuery;
         if (!preg_match('//u', $sQuery)) {
@@ -1107,25 +1106,16 @@ class Geocode
                         if (!$oCtx->isBoundedSearch()) {
                             continue;
                         }
-
-                        $aPlaceIDs = $oSearch->queryNearbyPoi(
-                            $this->oDB,
-                            $sCountryCodesSQL,
-                            $this->iLimit
-                        );
+                        $aPlaceIDs = $oSearch->queryNearbyPoi($this->oDB, $this->iLimit);
                     } elseif ($oSearch->isOperator(Operator::POSTCODE)) {
-                        $aPlaceIDs = $oSearch->queryPostcode(
-                            $this->oDB,
-                            $sCountryCodesSQL,
-                            $this->iLimit
-                        );
+                        // looking for postcode
+                        $aPlaceIDs = $oSearch->queryPostcode($this->oDB, $this->iLimit);
                     } else {
                         // Ordinary search:
                         // First search for places according to name and address.
                         $aNamedPlaceIDs = $oSearch->queryNamedPlace(
                             $this->oDB,
                             $aWordFrequencyScores,
-                            $sCountryCodesSQL,
                             $this->iMinAddressRank,
                             $this->iMaxAddressRank,
                             $this->iLimit
index 1b48fd84985a0a6c39342ff06a0d381725e63b7d..f5eab95ac5d8d7dd4e5d8ce59903f0a6c240d67d 100644 (file)
@@ -22,6 +22,7 @@ class SearchContext
     public $sqlViewboxSmall = '';
     public $sqlViewboxLarge = '';
     public $sqlViewboxCentre = '';
+    public $sqlCountryList = '';
     private $sqlExcludeList = '';
 
     public function hasNearPoint()
@@ -97,6 +98,11 @@ class SearchContext
         $this->sqlExcludeList = ' not in ('.join(',', $aExcluded).')';
     }
 
+    public function setCountryList($aCountries)
+    {
+        $this->sqlCountryList = '('.join(',', array_map('addQuotes', $aCountries)).')';
+    }
+
     /**
      * Extract a coordinate point from a query string.
      *
index 0a1959fdf3308639a713632304d7f25ccab3cdd1..39f7ffca90910c9b2b416d952156982ef90fd9ec 100644 (file)
@@ -109,13 +109,13 @@ class SearchDescription
         return 'place_classtype_'.$this->sClass.'_'.$this->sType;
     }
 
-    public function countryCodeSQL($sVar, $sCountryList)
+    public function countryCodeSQL($sVar)
     {
         if ($this->sCountryCode) {
             return $sVar.' = \''.$this->sCountryCode."'";
         }
-        if ($sCountryList) {
-            return $sVar.' in ('.$sCountryList.')';
+        if ($this->oContext->sqlCountryList) {
+            return $sVar.' in '.$this->oContext->sqlCountryList;
         }
 
         return '';
@@ -382,7 +382,7 @@ class SearchDescription
         return chksql($oDB->getCol($sSQL));
     }
 
-    public function queryNearbyPoi(&$oDB, $sCountryList, $iLimit)
+    public function queryNearbyPoi(&$oDB, $iLimit)
     {
         if (!$this->sClass) {
             return array();
@@ -393,7 +393,7 @@ class SearchDescription
         $sSQL = 'SELECT count(*) FROM pg_tables WHERE tablename = \''.$sPoiTable."'";
         if (chksql($oDB->getOne($sSQL))) {
             $sSQL = 'SELECT place_id FROM '.$sPoiTable.' ct';
-            if ($sCountryList) {
+            if ($this->oContext->sqlCountryList) {
                 $sSQL .= ' JOIN placex USING (place_id)';
             }
             if ($this->oContext->hasNearPoint()) {
@@ -401,8 +401,8 @@ class SearchDescription
             } else if ($this->oContext->bViewboxBounded) {
                 $sSQL .= ' WHERE ST_Contains('.$this->oContext->sqlViewboxSmall.', ct.centroid)';
             }
-            if ($sCountryList) {
-                $sSQL .= " AND country_code in ($sCountryList)";
+            if ($this->oContext->sqlCountryList) {
+                $sSQL .= ' AND country_code in '.$this->oContext->sqlCountryList;
             }
             $sSQL .= $this->oContext->excludeSQL(' AND place_id');
             if ($this->oContext->sqlViewboxCentre) {
@@ -421,8 +421,8 @@ class SearchDescription
             $sSQL .= 'class=\''.$this->sClass."' and type='".$this->sType."'";
             $sSQL .= ' AND '.$this->oContext->withinSQL('geometry');
             $sSQL .= ' AND linked_place_id is null';
-            if ($sCountryList) {
-                $sSQL .= " AND country_code in ($sCountryList)";
+            if ($this->oContext->sqlCountryList) {
+                $sSQL .= ' AND country_code in '.$this->oContext->sqlCountryList;
             }
             $sSQL .= ' ORDER BY '.$this->oContext->distanceSQL('centroid')." ASC";
             $sSQL .= " LIMIT $iLimit";
@@ -433,7 +433,7 @@ class SearchDescription
         return array();
     }
 
-    public function queryPostcode(&$oDB, $sCountryList, $iLimit)
+    public function queryPostcode(&$oDB, $iLimit)
     {
         $sSQL = 'SELECT p.place_id FROM location_postcode p ';
 
@@ -447,10 +447,7 @@ class SearchDescription
         }
 
         $sSQL .= "p.postcode = '".reset($this->aName)."'";
-        $sCountryTerm = $this->countryCodeSQL('p.country_code', $sCountryList);
-        if ($sCountryTerm) {
-            $sSQL .= ' AND '.$sCountryTerm;
-        }
+        $sSQL .= $this->countryCodeSQL(' AND p.country_code');
         $sSQL .= $this->oContext->excludeSQL(' AND p.place_id');
         $sSQL .= " LIMIT $iLimit";
 
@@ -459,7 +456,7 @@ class SearchDescription
         return chksql($oDB->getCol($sSQL));
     }
 
-    public function queryNamedPlace(&$oDB, $aWordFrequencyScores, $sCountryList, $iMinAddressRank, $iMaxAddressRank, $iLimit)
+    public function queryNamedPlace(&$oDB, $aWordFrequencyScores, $iMinAddressRank, $iMaxAddressRank, $iLimit)
     {
         $aTerms = array();
         $aOrder = array();
@@ -506,7 +503,7 @@ class SearchDescription
             }
         }
 
-        $sCountryTerm = $this->countryCodeSQL('country_code', $sCountryList);
+        $sCountryTerm = $this->countryCodeSQL('country_code');
         if ($sCountryTerm) {
             $aTerms[] = $sCountryTerm;
         }
@@ -589,7 +586,6 @@ class SearchDescription
         return array();
     }
 
-
     public function queryHouseNumber(&$oDB, $aRoadPlaceIDs, $iLimit)
     {
         $sPlaceIDs = join(',', $aRoadPlaceIDs);