]> git.openstreetmap.org Git - nominatim.git/blobdiff - utils/setup.php
hstore names / refactoring
[nominatim.git] / utils / setup.php
index bc8f14f72811a22e3efe53700700615719144164..72dd9c9a12e40e09ba2afb08c2d02a50ff941729 100755 (executable)
                array('quiet', 'q', 0, 1, 0, 0, 'bool', 'Quiet output'),
                array('verbose', 'v', 0, 1, 0, 0, 'bool', 'Verbose output'),
 
                array('quiet', 'q', 0, 1, 0, 0, 'bool', 'Quiet output'),
                array('verbose', 'v', 0, 1, 0, 0, 'bool', 'Verbose output'),
 
-               array('create-db', '', 0, 1, 0, 0, 'bool', 'Build a blank nominatim db'),
-               array('load-data', '', 0, 1, 1, 1, 'realpath', 'Import a osm file'),
+               array('all', '', 0, 1, 1, 1, 'realpath', 'Do the complete process'),
+
+               array('create-db', '', 0, 1, 0, 0, 'bool', 'Create nominatim db'),
+               array('setup-db', '', 0, 1, 0, 0, 'bool', 'Build a blank nominatim db'),
+               array('import-data', '', 0, 1, 1, 1, 'realpath', 'Import a osm file'),
+               array('create-functions', '', 0, 1, 0, 0, 'bool', 'Create functions'),
+               array('create-tables', '', 0, 1, 0, 0, 'bool', 'Create main tables'),
                array('create-partitions', '', 0, 1, 0, 0, 'bool', 'Create required partition tables and triggers'),
                array('create-partitions', '', 0, 1, 0, 0, 'bool', 'Create required partition tables and triggers'),
+               array('load-data', '', 0, 1, 0, 0, 'bool', 'Copy data to live tables from import table'),
        );
        getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true);
 
        $bDidSomething = false;
 
        );
        getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true);
 
        $bDidSomething = false;
 
-       if ($aCMDResult['create-db'])
+       if ($aCMDResult['create-db'] || isset($aCMDResult['all']))
+       {
+               $bDidSomething = true;
+               $oDB =& DB::connect(CONST_Database_DSN, false);
+               if (!PEAR::isError($oDB))
+               {
+                       fail('database already exists');
+               }
+               passthru('createdb nominatim');
+       }
+
+       if ($aCMDResult['create-db'] || isset($aCMDResult['all']))
        {
                $bDidSomething = true;
                // TODO: path detection, detection memory, etc.
        {
                $bDidSomething = true;
                // TODO: path detection, detection memory, etc.
-//             passthru('createdb nominatim');
+
+               $oDB =& getDB();
                passthru('createlang plpgsql nominatim');
                passthru('createlang plpgsql nominatim');
-               passthru('psql -f '.CONST_Path_Postgresql_Contrib.'/_int.sql nominatim');
-               passthru('psql -f '.CONST_Path_Postgresql_Contrib.'/hstore.sql nominatim');
-               passthru('psql -f '.CONST_Path_Postgresql_Postgis.'/postgis.sql nominatim');
-               passthru('psql -f '.CONST_Path_Postgresql_Postgis.'/spatial_ref_sys.sql nominatim');
-               passthru('psql -f '.CONST_BasePath.'/data/country_name.sql nominatim');
-               passthru('psql -f '.CONST_BasePath.'/data/country_osm_grid.sql nominatim');
-               passthru('psql -f '.CONST_BasePath.'/data/gb_postcode.sql nominatim');
-               passthru('psql -f '.CONST_BasePath.'/data/us_statecounty.sql nominatim');
-               passthru('psql -f '.CONST_BasePath.'/data/us_state.sql nominatim');
-               passthru('psql -f '.CONST_BasePath.'/data/worldboundaries.sql nominatim');
+               pgsqlRunScriptFile(CONST_Path_Postgresql_Contrib.'/_int.sql');
+               pgsqlRunScriptFile(CONST_Path_Postgresql_Contrib.'/hstore.sql');
+               pgsqlRunScriptFile(CONST_Path_Postgresql_Postgis.'/postgis.sql');
+               pgsqlRunScriptFile(CONST_Path_Postgresql_Postgis.'/spatial_ref_sys.sql');
+               pgsqlRunScriptFile(CONST_BasePath.'/data/country_name.sql');
+               pgsqlRunScriptFile(CONST_BasePath.'/data/country_osm_grid.sql');
+               pgsqlRunScriptFile(CONST_BasePath.'/data/gb_postcode.sql');
+               pgsqlRunScriptFile(CONST_BasePath.'/data/us_statecounty.sql');
+               pgsqlRunScriptFile(CONST_BasePath.'/data/us_state.sql');
+               pgsqlRunScriptFile(CONST_BasePath.'/data/worldboundaries.sql');
+       }
+
+       if (isset($aCMDResult['all']) && !isset($aCMDResult['import-data'])) $aCMDResult['import-data'] = $aCMDResult['all'];
+       if (isset($aCMDResult['import-data']) && $aCMDResult['import-data'])
+       {
+               $bDidSomething = true;
+               passthru(CONST_BasePath.'/osm2pgsql/osm2pgsql -lsc -O gazetteer -C 10000 --hstore -d nominatim '.$aCMDResult['import-data']);
+       }
+
+       if ($aCMDResult['create-functions'] || isset($aCMDResult['all']))
+       {
+               $bDidSomething = true;
+               $sTemplate = file_get_contents(CONST_BasePath.'/sql/functions.sql');
+               $sTemplate = str_replace('{modulepath}',CONST_BasePath.'/module', $sTemplate);
+               pgsqlRunScript($sTemplate);
        }
 
        }
 
-       if (isset($aCMDResult['load-data']) && $aCMDResult['load-data'])
+       if ($aCMDResult['create-tables'] || isset($aCMDResult['all']))
        {
                $bDidSomething = true;
        {
                $bDidSomething = true;
-               passthru(CONST_BasePath.'/osm2pgsql/osm2pgsql -lsc -O gazetteer -C 10000 --hstore -d nominatim '.$aCMDResult['load-data']);
-               passthru('psql -f '.CONST_BasePath.'/sql/functions.sql nominatim');
-               passthru('psql -f '.CONST_BasePath.'/sql/tables.sql nominatim');
+               pgsqlRunScriptFile(CONST_BasePath.'/sql/tables.sql');
        }
 
        }
 
-       if ($aCMDResult['create-partitions'])
+       if ($aCMDResult['create-partitions'] || isset($aCMDResult['all']))
        {
                $bDidSomething = true;
        {
                $bDidSomething = true;
+               $oDB =& getDB();
                $sSQL = 'select distinct country_code from country_name order by country_code';
                $aPartitions = $oDB->getCol($sSQL);
                if (PEAR::isError($aPartitions))
                $sSQL = 'select distinct country_code from country_name order by country_code';
                $aPartitions = $oDB->getCol($sSQL);
                if (PEAR::isError($aPartitions))
                        }
                        $sTemplate = str_replace($aMatch[0], $sResult, $sTemplate);
                }
                        }
                        $sTemplate = str_replace($aMatch[0], $sResult, $sTemplate);
                }
-               echo $sTemplate;
-               exit;
+               pgsqlRunScript($sTemplate);
+       }
+
+       if ($aCMDResult['load-data'] || isset($aCMDResult['all']))
+       {
+               $bDidSomething = true;
+               pgsqlRunScriptFile(CONST_BasePath.'/sql/loaddata.sql');
        }
 
        if (!$bDidSomething)
        {
                showUsage($aCMDOptions, true);
        }
        }
 
        if (!$bDidSomething)
        {
                showUsage($aCMDOptions, true);
        }
+
+       function pgsqlRunScriptFile($sFilename)
+       {
+               if (!file_exists($sFilename)) fail('unable to find '.$sFilename);
+
+               // Convert database DSN to psql paramaters
+               $aDSNInfo = DB::parseDSN(CONST_Database_DSN);
+               $sCMD = 'psql -f '.$sFilename.' '.$aDSNInfo['database'];
+
+               $aDescriptors = array(
+                       0 => array('pipe', 'r'),
+                       1 => array('pipe', 'w'),
+                       2 => array('file', '/dev/null', 'a')
+               );
+               $ahPipes = null;
+               $hProcess = proc_open($sCMD, $aDescriptors, $ahPipes);
+               if (!is_resource($hProcess)) fail('unable to start pgsql');
+
+               fclose($ahPipes[0]);
+
+               // TODO: error checking
+               while(!feof($ahPipes[1]))
+               {
+                       echo fread($ahPipes[1], 4096);
+               }
+               fclose($ahPipes[1]);
+
+               proc_close($hProcess);
+       }
+
+       function pgsqlRunScript($sScript)
+       {
+               // Convert database DSN to psql paramaters
+               $aDSNInfo = DB::parseDSN(CONST_Database_DSN);
+               $sCMD = 'psql '.$aDSNInfo['database'];
+
+               $aDescriptors = array(
+                       0 => array('pipe', 'r'),
+                       1 => array('pipe', 'w'),
+                       2 => array('file', '/dev/null', 'a')
+               );
+               $ahPipes = null;
+               $hProcess = proc_open($sCMD, $aDescriptors, $ahPipes);
+               if (!is_resource($hProcess)) fail('unable to start pgsql');
+
+               fwrite($ahPipes[0], $sScript);
+               fclose($ahPipes[0]);
+
+               // TODO: error checking
+               while(!feof($ahPipes[1]))
+               {
+                       echo fread($ahPipes[1], 4096);
+               }
+               fclose($ahPipes[1]);
+
+               proc_close($hProcess);
+       }