X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/2059e18e8b0e39091ef5a228ac56da0f27457be4..bb569aa48489a9447a165f47c4ce91d9f4a4cb7a:/lib/setup/SetupClass.php diff --git a/lib/setup/SetupClass.php b/lib/setup/SetupClass.php index 38f361e7..b422ded1 100755 --- a/lib/setup/SetupClass.php +++ b/lib/setup/SetupClass.php @@ -10,11 +10,13 @@ class SetupFunctions protected $iInstances; protected $sModulePath; protected $aDSNInfo; + protected $bQuiet; protected $bVerbose; protected $sIgnoreErrors; protected $bEnableDiffUpdates; protected $bEnableDebugStatements; protected $bNoPartitions; + protected $bDrop; protected $oDB = null; public function __construct(array $aCMDResult) @@ -49,6 +51,7 @@ class SetupFunctions } // setting member variables based on command line options stored in $aCMDResult + $this->bQuiet = $aCMDResult['quiet']; $this->bVerbose = $aCMDResult['verbose']; //setting default values which are not set by the update.php array @@ -72,6 +75,8 @@ class SetupFunctions } else { $this->bEnableDiffUpdates = false; } + + $this->bDrop = $aCMDResult['drop']; } public function createDB() @@ -206,6 +211,11 @@ class SetupFunctions if (!$this->sIgnoreErrors && !$this->oDB->getRow('select * from place limit 1')) { fail('No Data'); } + + if ($this->bDrop) { + $this->dropTable('planet_osm_nodes'); + $this->removeFlatnodeFile(); + } } public function createFunctions() @@ -235,6 +245,16 @@ class SetupFunctions $oAlParser->createTable($this->oDB, 'address_levels'); } + public function createTableTriggers() + { + info('Create Tables'); + + $sTemplate = file_get_contents(CONST_BasePath.'/sql/table-triggers.sql'); + $sTemplate = $this->replaceSqlPatterns($sTemplate); + + $this->pgsqlRunScript($sTemplate, false); + } + public function createPartitionTables() { info('Create Partition Tables'); @@ -397,8 +417,10 @@ class SetupFunctions $aFilenames = glob(CONST_Tiger_Data_Path.'/*.sql'); info('Found '.count($aFilenames).' SQL files in path '.CONST_Tiger_Data_Path); - if (empty($aFilenames)) return; - + if (empty($aFilenames)) { + warn('Tiger data import selected but no files found in path '.CONST_Tiger_Data_Path); + return; + } $sTemplate = file_get_contents(CONST_BasePath.'/sql/tiger_import_start.sql'); $sTemplate = $this->replaceSqlPatterns($sTemplate); @@ -508,10 +530,16 @@ class SetupFunctions public function index($bIndexNoanalyse) { $sOutputFile = ''; - $sBaseCmd = CONST_InstallPath.'/nominatim/nominatim -i' + $sBaseCmd = CONST_BasePath.'/nominatim/nominatim.py' .' -d '.escapeshellarg($this->aDSNInfo['database']) .' -P '.escapeshellarg($this->aDSNInfo['port']) .' -t '.escapeshellarg($this->iInstances.$sOutputFile); + if (!$this->bQuiet) { + $sBaseCmd .= ' -v'; + } + if ($this->bVerbose) { + $sBaseCmd .= ' -v'; + } if (isset($this->aDSNInfo['hostspec'])) { $sBaseCmd .= ' -H '.escapeshellarg($this->aDSNInfo['hostspec']); } @@ -548,7 +576,19 @@ class SetupFunctions { info('Create Search indices'); + $sSQL = 'SELECT relname FROM pg_class, pg_index '; + $sSQL .= 'WHERE pg_index.indisvalid = false AND pg_index.indexrelid = pg_class.oid'; + $aInvalidIndices = $this->oDB->getCol($sSQL); + + foreach ($aInvalidIndices as $sIndexName) { + info("Cleaning up invalid index $sIndexName"); + $this->oDB->exec("DROP INDEX $sIndexName;"); + } + $sTemplate = file_get_contents(CONST_BasePath.'/sql/indices.src.sql'); + if (!$this->bDrop) { + $sTemplate .= file_get_contents(CONST_BasePath.'/sql/indices_updates.src.sql'); + } if (!$this->dbReverseOnly()) { $sTemplate .= file_get_contents(CONST_BasePath.'/sql/indices_search.src.sql'); } @@ -628,6 +668,11 @@ class SetupFunctions $this->dropTable($sDrop); } + $this->removeFlatnodeFile(); + } + + private function removeFlatnodeFile() + { if (!is_null(CONST_Osm2pgsql_Flatnode_File) && CONST_Osm2pgsql_Flatnode_File) { if (file_exists(CONST_Osm2pgsql_Flatnode_File)) { if ($this->bVerbose) echo 'Deleting '.CONST_Osm2pgsql_Flatnode_File."\n"; @@ -648,7 +693,21 @@ class SetupFunctions private function createSqlFunctions() { - $sTemplate = file_get_contents(CONST_BasePath.'/sql/functions.sql'); + $sBasePath = CONST_BasePath.'/sql/functions/'; + $sTemplate = file_get_contents($sBasePath.'utils.sql'); + $sTemplate .= file_get_contents($sBasePath.'normalization.sql'); + $sTemplate .= file_get_contents($sBasePath.'importance.sql'); + $sTemplate .= file_get_contents($sBasePath.'address_lookup.sql'); + $sTemplate .= file_get_contents($sBasePath.'interpolation.sql'); + if ($this->oDB->tableExists('place')) { + $sTemplate .= file_get_contents($sBasePath.'place_triggers.sql'); + } + if ($this->oDB->tableExists('placex')) { + $sTemplate .= file_get_contents($sBasePath.'placex_triggers.sql'); + } + if ($this->oDB->tableExists('location_postcode')) { + $sTemplate .= file_get_contents($sBasePath.'postcode_triggers.sql'); + } $sTemplate = str_replace('{modulepath}', $this->sModulePath, $sTemplate); if ($this->bEnableDiffUpdates) { $sTemplate = str_replace('RETURN NEW; -- %DIFFUPDATES%', '--', $sTemplate);