]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 26 Apr 2020 14:19:25 +0000 (16:19 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 26 Apr 2020 14:19:25 +0000 (16:19 +0200)
1  2 
sql/functions/address_lookup.sql
utils/update.php

index c8c6309211fc7b7846ef66c6d8fe3c345230ae62,7885d0a960348ac346605a01861a56a7fccd5a13..daed3a8b5e3d6dcbc7a41c744dca3b438e030533
@@@ -60,14 -60,16 +60,16 @@@ BEGI
    prevresult := '';
  
    FOR location IN
-     SELECT * FROM get_addressdata(for_place_id, housenumber)
+     SELECT name,
+        CASE WHEN place_id = for_place_id THEN 99 ELSE rank_address END as rank_address
+     FROM get_addressdata(for_place_id, housenumber)
      WHERE isaddress order by rank_address desc
    LOOP
      currresult := trim(get_name_by_language(location.name, languagepref));
      IF currresult != prevresult AND currresult IS NOT NULL
         AND result[(100 - location.rank_address)] IS NULL
      THEN
-       result[(100 - location.rank_address)] := trim(get_name_by_language(location.name, languagepref));
+       result[(100 - location.rank_address)] := currresult;
        prevresult := currresult;
      END IF;
    END LOOP;
@@@ -206,7 -208,7 +208,7 @@@ BEGI
    FOR location IN
      SELECT placex.place_id, osm_type, osm_id, name, class, type,
             coalesce(extratags->'place', extratags->'linked_place') as place_type,
 -           admin_level, fromarea, isaddress,
 +           admin_level, fromarea, isaddress and linked_place_id is NULL as isaddress,
             CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
             distance, country_code, postcode
        FROM place_addressline join placex on (address_place_id = placex.place_id)
diff --combined utils/update.php
index 7b9338d5c03f43fcbfc0a2c578925e88cd59ae5e,d03cbed6b8e32029bdc6ccd4be353d1bb92c9ec9..cefccd623305e1693b7b6a1a6e12274c6370190c
@@@ -49,7 -49,6 +49,7 @@@ $aCMDOption
  getCmdOpt($_SERVER['argv'], $aCMDOptions, $aResult, true, true);
  
  if (!isset($aResult['index-instances'])) $aResult['index-instances'] = 1;
 +
  if (!isset($aResult['index-rank'])) $aResult['index-rank'] = 0;
  
  date_default_timezone_set('Etc/UTC');
@@@ -66,30 -65,52 +66,52 @@@ if ($iCacheMemory + 500 > getTotalMemor
      $iCacheMemory = getCacheMemoryMB();
      echo "WARNING: resetting cache memory to $iCacheMemory\n";
  }
- $sOsm2pgsqlCmd = CONST_Osm2pgsql_Binary.' -klas --number-processes 1 -C '.$iCacheMemory.' -O gazetteer -S '.CONST_Import_Style.' -d '.$aDSNInfo['database'].' -P '.$aDSNInfo['port'];
- if (isset($aDSNInfo['username']) && $aDSNInfo['username']) {
-     $sOsm2pgsqlCmd .= ' -U ' . $aDSNInfo['username'];
- }
+ $oOsm2pgsqlCmd = (new \Nominatim\Shell(CONST_Osm2pgsql_Binary))
+                  ->addParams('--hstore')
+                  ->addParams('--latlong')
+                  ->addParams('--append')
+                  ->addParams('--slim')
+                  ->addParams('--number-processes', 1)
+                  ->addParams('--cache', $iCacheMemory)
+                  ->addParams('--output', 'gazetteer')
+                  ->addParams('--style', CONST_Import_Style)
+                  ->addParams('--database', $aDSNInfo['database'])
+                  ->addParams('--port', $aDSNInfo['port']);
  if (isset($aDSNInfo['hostspec']) && $aDSNInfo['hostspec']) {
-     $sOsm2pgsqlCmd .= ' -H ' . $aDSNInfo['hostspec'];
+     $oOsm2pgsqlCmd->addParams('--host', $aDSNInfo['hostspec']);
+ }
+ if (isset($aDSNInfo['username']) && $aDSNInfo['username']) {
+     $oOsm2pgsqlCmd->addParams('--user', $aDSNInfo['username']);
  }
- $aProcEnv = null;
  if (isset($aDSNInfo['password']) && $aDSNInfo['password']) {
-     $aProcEnv = array_merge(array('PGPASSWORD' => $aDSNInfo['password']), $_ENV);
+     $oOsm2pgsqlCmd->addEnvPair('PGPASSWORD', $aDSNInfo['password']);
  }
  if (!is_null(CONST_Osm2pgsql_Flatnode_File) && CONST_Osm2pgsql_Flatnode_File) {
-     $sOsm2pgsqlCmd .= ' --flat-nodes '.CONST_Osm2pgsql_Flatnode_File;
+     $oOsm2pgsqlCmd->addParams('--flat-nodes', CONST_Osm2pgsql_Flatnode_File);
  }
  
- $sIndexCmd = CONST_BasePath.'/nominatim/nominatim.py';
- if (!$aResult['quiet']) {
-     $sIndexCmd .= ' -v';
- }
+ $oIndexCmd = (new \Nominatim\Shell(CONST_BasePath.'/nominatim/nominatim.py'))
+              ->addParams('--database', $aDSNInfo['database'])
+              ->addParams('--port', $aDSNInfo['port'])
+              ->addParams('--threads', $aResult['index-instances']);
  if ($aResult['verbose']) {
-     $sIndexCmd .= ' -v';
+     $oIndexCmd->addParams('--verbose');
+ }
+ if (isset($aDSNInfo['hostspec']) && $aDSNInfo['hostspec']) {
+     $oIndexCmd->addParams('--host', $aDSNInfo['hostspec']);
+ }
+ if (isset($aDSNInfo['username']) && $aDSNInfo['username']) {
+     $oIndexCmd->addParams('--username', $aDSNInfo['username']);
+ }
+ if (isset($aDSNInfo['password']) && $aDSNInfo['password']) {
+     $oIndexCmd->addEnvPair('PGPASSWORD', $aDSNInfo['password']);
  }
  
  if ($aResult['init-updates']) {
      // sanity check that the replication URL is correct
      $sBaseState = file_get_contents(CONST_Replication_Url.'/state.txt');
          echo "in your local settings file.\n\n";
          fail('CONST_Pyosmium_Binary not configured');
      }
      $aOutput = 0;
-     $sCmd = CONST_Pyosmium_Binary.' --help';
-     exec($sCmd, $aOutput, $iRet);
+     $oCMD = new \Nominatim\Shell(CONST_Pyosmium_Binary, '--help');
+     exec($oCMD->escapedCmd(), $aOutput, $iRet);
      if ($iRet != 0) {
          echo "Cannot execute pyosmium-get-changes.\n";
          echo "Make sure you have pyosmium installed correctly\n";
  
      // get the appropriate state id
      $aOutput = 0;
-     $sCmd = CONST_Pyosmium_Binary.' -D '.$sWindBack.' --server '.CONST_Replication_Url;
-     exec($sCmd, $aOutput, $iRet);
+     $oCMD = (new \Nominatim\Shell(CONST_Pyosmium_Binary))
+             ->addParams('--start-date', $sWindBack)
+             ->addParams('--server', CONST_Replication_Url);
+     exec($oCMD->escapedCmd(), $aOutput, $iRet);
      if ($iRet != 0 || $aOutput[0] == 'None') {
          fail('Error running pyosmium tools');
      }
@@@ -159,7 -185,11 +186,11 @@@ if ($aResult['check-for-updates']) 
          fail('Updates not set up. Please run ./utils/update.php --init-updates.');
      }
  
-     system(CONST_BasePath.'/utils/check_server_for_updates.py '.CONST_Replication_Url.' '.$aLastState['sequence_id'], $iRet);
+     $oCmd = (new \Nominatim\Shell(CONST_BasePath.'/utils/check_server_for_updates.py'))
+             ->addParams(CONST_Replication_Url)
+             ->addParams($aLastState['sequence_id']);
+     $iRet = $oCmd->run();
      exit($iRet);
  }
  
@@@ -172,12 -202,12 +203,12 @@@ if (isset($aResult['import-diff']) || i
      }
  
      // Import the file
-     $sCMD = $sOsm2pgsqlCmd.' '.$sNextFile;
-     echo $sCMD."\n";
-     $iErrorLevel = runWithEnv($sCMD, $aProcEnv);
+     $oCMD = (clone $oOsm2pgsqlCmd)->addParams($sNextFile);
+     echo $oCMD->escapedCmd()."\n";
+     $iRet = $oCMD->run();
  
-     if ($iErrorLevel) {
-         fail("Error from osm2pgsql, $iErrorLevel\n");
+     if ($iRet) {
+         fail("Error from osm2pgsql, $iRet\n");
      }
  
      // Don't update the import status - we don't know what this file contains
@@@ -224,11 -254,13 +255,13 @@@ if ($sContentURL) 
  
  if ($bHaveDiff) {
      // import generated change file
-     $sCMD = $sOsm2pgsqlCmd.' '.$sTemporaryFile;
-     echo $sCMD."\n";
-     $iErrorLevel = runWithEnv($sCMD, $aProcEnv);
-     if ($iErrorLevel) {
-         fail("osm2pgsql exited with error level $iErrorLevel\n");
+     $oCMD = (clone $oOsm2pgsqlCmd)->addParams($sTemporaryFile);
+     echo $oCMD->escapedCmd()."\n";
+     $iRet = $oCMD->run();
+     if ($iRet) {
+         fail("osm2pgsql exited with error level $iRet\n");
      }
  }
  
@@@ -311,19 -343,11 +344,11 @@@ if ($aResult['recompute-word-counts']) 
  }
  
  if ($aResult['index']) {
-     $sCmd = $sIndexCmd
-             .' -d '.$aDSNInfo['database']
-             .' -P '.$aDSNInfo['port']
-             .' -t '.$aResult['index-instances']
-             .' -r '.$aResult['index-rank'];
-     if (isset($aDSNInfo['hostspec']) && $aDSNInfo['hostspec']) {
-         $sCmd .= ' -H ' . $aDSNInfo['hostspec'];
-     }
-     if (isset($aDSNInfo['username']) && $aDSNInfo['username']) {
-         $sCmd .= ' -U ' . $aDSNInfo['username'];
-     }
+     $oCmd = (clone $oIndexCmd)
+             ->addParams('--minrank', $aResult['index-rank']);
  
-     runWithEnv($sCmd, $aProcEnv);
+     // echo $oCmd->escapedCmd()."\n";
+     $oCmd->run();
  
      $oDB->exec('update import_status set indexed = true');
  }
@@@ -359,18 -383,13 +384,13 @@@ if ($aResult['import-osmosis'] || $aRes
      }
  
      $sImportFile = CONST_InstallPath.'/osmosischange.osc';
-     $sCMDDownload = CONST_Pyosmium_Binary.' --server '.CONST_Replication_Url.' -o '.$sImportFile.' -s '.CONST_Replication_Max_Diff_size;
-     $sCMDImport = $sOsm2pgsqlCmd.' '.$sImportFile;
-     $sCMDIndex = $sIndexCmd
-                  .' -d '.$aDSNInfo['database']
-                  .' -P '.$aDSNInfo['port']
-                  .' -t '.$aResult['index-instances'];
-     if (isset($aDSNInfo['hostspec']) && $aDSNInfo['hostspec']) {
-         $sCMDIndex .= ' -H ' . $aDSNInfo['hostspec'];
-     }
-     if (isset($aDSNInfo['username']) && $aDSNInfo['username']) {
-         $sCMDIndex .= ' -U ' . $aDSNInfo['username'];
-     }
+     $oCMDDownload = (new \Nominatim\Shell(CONST_Pyosmium_Binary))
+                     ->addParams('--server', CONST_Replication_Url)
+                     ->addParams('--outfile', $sImportFile)
+                     ->addParams('--size', CONST_Replication_Max_Diff_size);
+     $oCMDImport = (clone $oOsm2pgsqlCmd)->addParams($sImportFile);
  
      while (true) {
          $fStartTime = time();
                  $fCMDStartTime = time();
                  $iNextSeq = (int) $aLastState['sequence_id'];
                  unset($aOutput);
-                 echo "$sCMDDownload -I $iNextSeq\n";
+                 $oCMD = (clone $oCMDDownload)->addParams('--start-id', $iNextSeq);
+                 echo $oCMD->escapedCmd()."\n";
                  if (file_exists($sImportFile)) {
                      unlink($sImportFile);
                  }
-                 exec($sCMDDownload.' -I '.$iNextSeq, $aOutput, $iResult);
+                 exec($oCMD->escapedCmd(), $aOutput, $iResult);
  
                  if ($iResult == 3) {
                      echo 'No new updates. Sleeping for '.CONST_Replication_Recheck_Interval." sec.\n";
              // get the newest object from the diff file
              $sBatchEnd = 0;
              $iRet = 0;
-             exec(CONST_BasePath.'/utils/osm_file_date.py '.$sImportFile, $sBatchEnd, $iRet);
+             $oCMD = new \Nominatim\Shell(CONST_BasePath.'/utils/osm_file_date.py', $sImportFile);
+             exec($oCMD->escapedCmd(), $sBatchEnd, $iRet);
              if ($iRet == 5) {
                  echo "Diff file is empty. skipping import.\n";
                  if (!$aResult['import-osmosis-all']) {
  
              // Import the file
              $fCMDStartTime = time();
-             echo $sCMDImport."\n";
+             echo $oCMDImport->escapedCmd()."\n";
              unset($sJunk);
-             $iErrorLevel = runWithEnv($sCMDImport, $aProcEnv);
+             $iErrorLevel = $oCMDImport->run();
              if ($iErrorLevel) {
                  echo "Error executing osm2pgsql: $iErrorLevel\n";
                  exit($iErrorLevel);
  
          // Index file
          if (!$aResult['no-index']) {
-             $sThisIndexCmd = $sCMDIndex;
+             $oThisIndexCmd = clone($oIndexCmd);
              $fCMDStartTime = time();
  
-             echo "$sThisIndexCmd\n";
-             $iErrorLevel = runWithEnv($sThisIndexCmd, $aProcEnv);
+             echo $oThisIndexCmd->escapedCmd()."\n";
+             $iErrorLevel = $oThisIndexCmd->run();
              if ($iErrorLevel) {
                  echo "Error: $iErrorLevel\n";
                  exit($iErrorLevel);