-#!/usr/bin/php -Cq
<?php
-require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
require_once(CONST_BasePath.'/lib/init-cmd.php');
+require_once(CONST_BasePath.'/lib/setup_functions.php');
+require_once(CONST_BasePath.'/lib/setup/SetupClass.php');
+require_once(CONST_BasePath.'/lib/setup/AddressLevelParser.php');
+
ini_set('memory_limit', '800M');
-# (long-opt, short-opt, min-occurs, max-occurs, num-arguments, num-arguments, type, help)
+use Nominatim\Setup\SetupFunctions as SetupFunctions;
+// (long-opt, short-opt, min-occurs, max-occurs, num-arguments, num-arguments, type, help)
$aCMDOptions
= array(
'Import / update / index osm data',
array('init-updates', '', 0, 1, 0, 0, 'bool', 'Set up database for updating'),
array('check-for-updates', '', 0, 1, 0, 0, 'bool', 'Check if new updates are available'),
- array('update-functions', '', 0, 1, 0, 0, 'bool', 'Update trigger functions to support differential updates'),
+ array('no-update-functions', '', 0, 1, 0, 0, 'bool', 'Do not update trigger functions to support differential updates (assuming the diff update logic is already present)'),
array('import-osmosis', '', 0, 1, 0, 0, 'bool', 'Import updates once'),
array('import-osmosis-all', '', 0, 1, 0, 0, 'bool', 'Import updates forever'),
array('no-index', '', 0, 1, 0, 0, 'bool', 'Do not index the new data'),
array('deduplicate', '', 0, 1, 0, 0, 'bool', 'Deduplicate tokens'),
array('recompute-word-counts', '', 0, 1, 0, 0, 'bool', 'Compute frequency of full-word search terms'),
+ array('update-address-levels', '', 0, 1, 0, 0, 'bool', 'Reimport address level configuration (EXPERT)'),
array('no-npi', '', 0, 1, 0, 0, 'bool', '(obsolete)'),
);
+
getCmdOpt($_SERVER['argv'], $aCMDOptions, $aResult, true, true);
if (!isset($aResult['index-instances'])) $aResult['index-instances'] = 1;
if (isset($aDSNInfo['hostspec']) && $aDSNInfo['hostspec']) {
$sOsm2pgsqlCmd .= ' -H ' . $aDSNInfo['hostspec'];
}
-$procenv = null;
+$aProcEnv = null;
if (isset($aDSNInfo['password']) && $aDSNInfo['password']) {
- $procenv = array_merge(array('PGPASSWORD' => $aDSNInfo['password']), $_ENV);
+ $aProcEnv = array_merge(array('PGPASSWORD' => $aDSNInfo['password']), $_ENV);
}
if (!is_null(CONST_Osm2pgsql_Flatnode_File) && CONST_Osm2pgsql_Flatnode_File) {
echo "and have set up CONST_Pyosmium_Binary to point to pyosmium-get-changes.\n";
fail('pyosmium-get-changes not found or not usable');
}
- if ($aResult['update-functions']) {
- $sSetup = CONST_InstallPath.'/utils/setup.php';
- $iRet = -1;
- passthru($argv[0].' '.$sSetup.' --create-functions --enable-diff-updates', $iRet);
- if ($iRet != 0) {
- fail('Error running setup script');
- }
+
+ if (!$aResult['no-update-functions']) {
+ // instantiate setupClass to use the function therein
+ $cSetup = new SetupFunctions(array(
+ 'enable-diff-updates' => true,
+ 'verbose' => $aResult['verbose']
+ ));
+ $cSetup->connect();
+ $cSetup->createFunctions();
}
$sDatabaseDate = getDatabaseDate($oDB);
}
pg_query($oDB->connection, 'TRUNCATE import_status');
- $sSQL = 'INSERT INTO import_status (lastimportdate, sequence_id, indexed) VALUES(';
- $sSQL .= "'".$sDatabaseDate."',".$aOutput[0].', true)';
+ $sSQL = "INSERT INTO import_status (lastimportdate, sequence_id, indexed) VALUES('";
+ $sSQL .= $sDatabaseDate."',".$aOutput[0].', true)';
if (!pg_query($oDB->connection, $sSQL)) {
fail('Could not enter sequence into database.');
}
// Import the file
$sCMD = $sOsm2pgsqlCmd.' '.$sNextFile;
echo $sCMD."\n";
- $iErrorLevel = runWithEnv($sCMD, $procenv);
+ $iErrorLevel = runWithEnv($sCMD, $aProcEnv);
if ($iErrorLevel) {
fail("Error from osm2pgsql, $iErrorLevel\n");
// import generated change file
$sCMD = $sOsm2pgsqlCmd.' '.$sTemporaryFile;
echo $sCMD."\n";
- $iErrorLevel = runWithEnv($sCMD, $procenv);
+ $iErrorLevel = runWithEnv($sCMD, $aProcEnv);
if ($iErrorLevel) {
fail("osm2pgsql exited with error level $iErrorLevel\n");
}
}
if ($aResult['index']) {
- $cmd = CONST_InstallPath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -P '.$aDSNInfo['port'].' -t '.$aResult['index-instances'].' -r '.$aResult['index-rank'];
+ $sCmd = CONST_InstallPath.'/nominatim/nominatim -i -d '.$aDSNInfo['database'].' -P '.$aDSNInfo['port'].' -t '.$aResult['index-instances'].' -r '.$aResult['index-rank'];
if (isset($aDSNInfo['hostspec']) && $aDSNInfo['hostspec']) {
- $cmd .= ' -H ' . $aDSNInfo['hostspec'];
+ $sCmd .= ' -H ' . $aDSNInfo['hostspec'];
}
if (isset($aDSNInfo['username']) && $aDSNInfo['username']) {
- $cmd .= ' -U ' . $aDSNInfo['username'];
+ $sCmd .= ' -U ' . $aDSNInfo['username'];
}
- runWithEnv($cmd, $procenv);
+ runWithEnv($sCmd, $aProcEnv);
+}
+
+if ($aResult['update-address-levels']) {
+ echo 'Updating address levels from '.CONST_Address_Level_Config.".\n";
+ $oAlParser = new \Nominatim\Setup\AddressLevelParser(CONST_Address_Level_Config);
+ $oAlParser->createTable($oDB, 'address_levels');
}
if ($aResult['import-osmosis'] || $aResult['import-osmosis-all']) {
$fCMDStartTime = time();
echo $sCMDImport."\n";
unset($sJunk);
- $iErrorLevel = runWithEnv($sCMDImport, $procenv);
+ $iErrorLevel = runWithEnv($sCMDImport, $aProcEnv);
if ($iErrorLevel) {
echo "Error executing osm2pgsql: $iErrorLevel\n";
exit($iErrorLevel);
$fCMDStartTime = time();
echo "$sThisIndexCmd\n";
- $iErrorLevel = runWithEnv($sThisIndexCmd, $procenv);
+ $iErrorLevel = runWithEnv($sThisIndexCmd, $aProcEnv);
if ($iErrorLevel) {
echo "Error: $iErrorLevel\n";
exit($iErrorLevel);
$oDB->query($sSQL);
echo date('Y-m-d H:i:s')." Completed index step for $sBatchEnd in ".round((time()-$fCMDStartTime)/60, 2)." minutes\n";
- $sSQL = 'UPDATE import_status SET indexed = true';
+ $sSQL = 'update import_status set indexed = true';
$oDB->query($sSQL);
}
if (!$aResult['import-osmosis-all']) exit(0);
}
}
-
-function runWithEnv($cmd, $env)
-{
- $fds = array(0 => array('pipe', 'r'),
- 1 => STDOUT,
- 2 => STDERR);
- $pipes = null;
- $proc = @proc_open($cmd, $fds, $pipes, null, $env);
- if (!is_resource($proc)) {
- fail('unable to run command:' . $cmd);
- }
-
- fclose($pipes[0]); // no stdin
-
- $stat = proc_close($proc);
- return $stat;
-}