]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-php/setup/SetupClass.php
Ported createCountryNames() to python and added tests
[nominatim.git] / lib-php / setup / SetupClass.php
index 7516861932f4cd9aef328a0d6ea12aa59b9035fb..d07adce73a61992a038ad1bf8eb559fb9797d50d 100755 (executable)
@@ -67,122 +67,6 @@ class SetupFunctions
         }
     }
 
-    public function createFunctions()
-    {
-        info('Create Functions');
-
-        // Try accessing the C module, so we know early if something is wrong
-        $this->checkModulePresence(); // raises exception on failure
-
-        $this->createSqlFunctions();
-    }
-
-    public function createTables($bReverseOnly = false)
-    {
-        info('Create Tables');
-
-        $sTemplate = file_get_contents(CONST_SqlDir.'/tables.sql');
-        $sTemplate = $this->replaceSqlPatterns($sTemplate);
-
-        $this->pgsqlRunScript($sTemplate, false);
-
-        if ($bReverseOnly) {
-            $this->dropTable('search_name');
-        }
-
-        (clone($this->oNominatimCmd))->addParams('refresh', '--address-levels')->run();
-    }
-
-    public function createTableTriggers()
-    {
-        info('Create Tables');
-
-        $sTemplate = file_get_contents(CONST_SqlDir.'/table-triggers.sql');
-        $sTemplate = $this->replaceSqlPatterns($sTemplate);
-
-        $this->pgsqlRunScript($sTemplate, false);
-    }
-
-    public function createPartitionTables()
-    {
-        info('Create Partition Tables');
-
-        $sTemplate = file_get_contents(CONST_SqlDir.'/partition-tables.src.sql');
-        $sTemplate = $this->replaceSqlPatterns($sTemplate);
-
-        $this->pgsqlRunPartitionScript($sTemplate);
-    }
-
-    public function importTigerData($sTigerPath)
-    {
-        info('Import Tiger data');
-
-        $aFilenames = glob($sTigerPath.'/*.sql');
-        info('Found '.count($aFilenames).' SQL files in path '.$sTigerPath);
-        if (empty($aFilenames)) {
-            warn('Tiger data import selected but no files found in path '.$sTigerPath);
-            return;
-        }
-        $sTemplate = file_get_contents(CONST_SqlDir.'/tiger_import_start.sql');
-        $sTemplate = $this->replaceSqlPatterns($sTemplate);
-
-        $this->pgsqlRunScript($sTemplate, false);
-
-        $aDBInstances = array();
-        for ($i = 0; $i < $this->iInstances; $i++) {
-            // https://secure.php.net/manual/en/function.pg-connect.php
-            $DSN = getSetting('DATABASE_DSN');
-            $DSN = preg_replace('/^pgsql:/', '', $DSN);
-            $DSN = preg_replace('/;/', ' ', $DSN);
-            $aDBInstances[$i] = pg_connect($DSN, PGSQL_CONNECT_FORCE_NEW | PGSQL_CONNECT_ASYNC);
-            pg_ping($aDBInstances[$i]);
-        }
-
-        foreach ($aFilenames as $sFile) {
-            echo $sFile.': ';
-            $hFile = fopen($sFile, 'r');
-            $sSQL = fgets($hFile, 100000);
-            $iLines = 0;
-            while (true) {
-                for ($i = 0; $i < $this->iInstances; $i++) {
-                    if (!pg_connection_busy($aDBInstances[$i])) {
-                        while (pg_get_result($aDBInstances[$i]));
-                        $sSQL = fgets($hFile, 100000);
-                        if (!$sSQL) break 2;
-                        if (!pg_send_query($aDBInstances[$i], $sSQL)) fail(pg_last_error($aDBInstances[$i]));
-                        $iLines++;
-                        if ($iLines == 1000) {
-                            echo '.';
-                            $iLines = 0;
-                        }
-                    }
-                }
-                usleep(10);
-            }
-            fclose($hFile);
-
-            $bAnyBusy = true;
-            while ($bAnyBusy) {
-                $bAnyBusy = false;
-                for ($i = 0; $i < $this->iInstances; $i++) {
-                    if (pg_connection_busy($aDBInstances[$i])) $bAnyBusy = true;
-                }
-                usleep(10);
-            }
-            echo "\n";
-        }
-
-        for ($i = 0; $i < $this->iInstances; $i++) {
-            pg_close($aDBInstances[$i]);
-        }
-
-        info('Creating indexes on Tiger data');
-        $sTemplate = file_get_contents(CONST_SqlDir.'/tiger_import_finish.sql');
-        $sTemplate = $this->replaceSqlPatterns($sTemplate);
-
-        $this->pgsqlRunScript($sTemplate, false);
-    }
-
     public function calculatePostcodes($bCMDResultAll)
     {
         info('Calculate Postcodes');
@@ -246,58 +130,6 @@ class SetupFunctions
         $this->db()->exec($sSQL);
     }
 
-    public function createSearchIndices()
-    {
-        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->db()->getCol($sSQL);
-
-        foreach ($aInvalidIndices as $sIndexName) {
-            info("Cleaning up invalid index $sIndexName");
-            $this->db()->exec("DROP INDEX $sIndexName;");
-        }
-
-        $sTemplate = file_get_contents(CONST_SqlDir.'/indices.src.sql');
-        if (!$this->bDrop) {
-            $sTemplate .= file_get_contents(CONST_SqlDir.'/indices_updates.src.sql');
-        }
-        if (!$this->dbReverseOnly()) {
-            $sTemplate .= file_get_contents(CONST_SqlDir.'/indices_search.src.sql');
-        }
-        $sTemplate = $this->replaceSqlPatterns($sTemplate);
-
-        $this->pgsqlRunScript($sTemplate);
-    }
-
-    public function createCountryNames()
-    {
-        info('Create search index for default country names');
-
-        $this->pgsqlRunScript("select getorcreate_country(make_standard_name('uk'), 'gb')");
-        $this->pgsqlRunScript("select getorcreate_country(make_standard_name('united states'), 'us')");
-        $this->pgsqlRunScript('select count(*) from (select getorcreate_country(make_standard_name(country_code), country_code) from country_name where country_code is not null) as x');
-        $this->pgsqlRunScript("select count(*) from (select getorcreate_country(make_standard_name(name->'name'), country_code) from country_name where name ? 'name') as x");
-        $sSQL = 'select count(*) from (select getorcreate_country(make_standard_name(v),'
-            .'country_code) from (select country_code, skeys(name) as k, svals(name) as v from country_name) x where k ';
-        $sLanguages = getSetting('LANGUAGES');
-        if ($sLanguages) {
-            $sSQL .= 'in ';
-            $sDelim = '(';
-            foreach (explode(',', $sLanguages) as $sLang) {
-                $sSQL .= $sDelim."'name:$sLang'";
-                $sDelim = ',';
-            }
-            $sSQL .= ')';
-        } else {
-            // all include all simple name tags
-            $sSQL .= "like 'name:%'";
-        }
-        $sSQL .= ') v';
-        $this->pgsqlRunScript($sSQL);
-    }
-
     /**
      * Return the connection to the database.
      *
@@ -326,7 +158,7 @@ class SetupFunctions
         );
     }
 
-    private function createSqlFunctions()
+    public function createSqlFunctions()
     {
         $oCmd = (clone($this->oNominatimCmd))
                 ->addParams('refresh', '--functions');
@@ -342,24 +174,6 @@ class SetupFunctions
         $oCmd->run(!$this->sIgnoreErrors);
     }
 
-    private function pgsqlRunPartitionScript($sTemplate)
-    {
-        $sSQL = 'select distinct partition from country_name order by partition';
-        $aPartitions = $this->db()->getCol($sSQL);
-        if ($aPartitions[0] != 0) $aPartitions[] = 0;
-
-        preg_match_all('#^-- start(.*?)^-- end#ms', $sTemplate, $aMatches, PREG_SET_ORDER);
-        foreach ($aMatches as $aMatch) {
-            $sResult = '';
-            foreach ($aPartitions as $sPartitionName) {
-                $sResult .= str_replace('-partition-', $sPartitionName, $aMatch[1]);
-            }
-            $sTemplate = str_replace($aMatch[0], $sResult, $sTemplate);
-        }
-
-        $this->pgsqlRunScript($sTemplate);
-    }
-
     private function pgsqlRunScriptFile($sFilename)
     {
         if (!file_exists($sFilename)) fail('unable to find '.$sFilename);
@@ -444,44 +258,4 @@ class SetupFunctions
 
         return $sSql;
     }
-
-    /**
-     * Drop table with the given name if it exists.
-     *
-     * @param string $sName Name of table to remove.
-     *
-     * @return null
-     */
-    private function dropTable($sName)
-    {
-        if ($this->bVerbose) echo "Dropping table $sName\n";
-        $this->db()->deleteTable($sName);
-    }
-
-    /**
-     * Check if the database is in reverse-only mode.
-     *
-     * @return True if there is no search_name table and infrastructure.
-     */
-    private function dbReverseOnly()
-    {
-        return !($this->db()->tableExists('search_name'));
-    }
-
-    /**
-     * Try accessing the C module, so we know early if something is wrong.
-     *
-     * Raises Nominatim\DatabaseError on failure
-     */
-    private function checkModulePresence()
-    {
-        $sModulePath = getSetting('DATABASE_MODULE_PATH', CONST_InstallDir.'/module');
-        $sSQL = "CREATE FUNCTION nominatim_test_import_func(text) RETURNS text AS '";
-        $sSQL .= $sModulePath . "/nominatim.so', 'transliteration' LANGUAGE c IMMUTABLE STRICT";
-        $sSQL .= ';DROP FUNCTION nominatim_test_import_func(text);';
-
-        $oDB = new \Nominatim\DB();
-        $oDB->connect();
-        $oDB->exec($sSQL, null, 'Database server failed to load '.$sModulePath.'/nominatim.so module');
-    }
 }