]> git.openstreetmap.org Git - nominatim.git/commitdiff
Change load-data in setup.php.
authormarkigail <markus.gail.94@gmail.com>
Mon, 9 May 2016 13:07:58 +0000 (15:07 +0200)
committermarkigail <markus.gail.94@gmail.com>
Wed, 11 May 2016 08:22:03 +0000 (10:22 +0200)
nominatim/index.c
utils/setup.php

index 02392cd3c61b33031bb11d6dc63e3f8bf98bd38f..90a3abea52a357ecac550daf4593a48c038e23a8 100644 (file)
@@ -140,13 +140,7 @@ struct index_thread_data * thread_data, const char *structuredoutputfile)
 
             // Get all the place_id's for this sector
             paramRank = PGint32(rank);
-            paramValues[0] = (char *)&paramRank;
-            paramLengths[0] = sizeof(paramRank);
-            paramFormats[0] = 1;
             paramSector = PGint32(sector);
-            paramValues[1] = (char *)&paramSector;
-            paramLengths[1] = sizeof(paramSector);
-            paramFormats[1] = 1;
             if (rankTotalTuples-rankCountTuples < num_threads*1000)
             {
                 // no sectors
@@ -156,18 +150,29 @@ struct index_thread_data * thread_data, const char *structuredoutputfile)
                 }
                 else
                 {
-                    iResult = PQsendQueryPrepared(conn, "index_nosector_places", 2, paramValues, paramLengths, paramFormats, 1);
+                    paramValues[0] = (char *)&paramRank;
+                    paramLengths[0] = sizeof(paramRank);
+                    paramFormats[0] = 1;
+                    iResult = PQsendQueryPrepared(conn, "index_nosector_places", 1, paramValues, paramLengths, paramFormats, 1);
                 }
             }
             else
             {
                 if (interpolation)
                 {
-                                       iResult = PQsendQueryPrepared(conn, "index_sector_places_osmline", 2, paramValues, paramLengths, paramFormats, 1);
-
+                    iResult = PQsendQueryPrepared(conn, "index_sector_places_osmline", 1, paramValues, paramLengths, paramFormats, 1);
+                    paramValues[0] = (char *)&paramSector;
+                    paramLengths[0] = sizeof(paramSector);
+                    paramFormats[0] = 1;
                 }
                 else
                 {
+                    paramValues[0] = (char *)&paramRank;
+                    paramLengths[0] = sizeof(paramRank);
+                    paramFormats[0] = 1;
+                    paramValues[1] = (char *)&paramSector;
+                    paramLengths[1] = sizeof(paramSector);
+                    paramFormats[1] = 1;
                     iResult = PQsendQueryPrepared(conn, "index_sector_places", 2, paramValues, paramLengths, paramFormats, 1);
                 }
             }
@@ -335,7 +340,7 @@ void nominatim_index(int rank_min, int rank_max, int num_threads, const char *co
     
     pg_prepare_params[0] = PG_OID_INT4;
     res = PQprepare(conn, "index_sector_places_osmline",
-                    "select place_id from location_property_osmline where geometry_sector = $2 and indexed_status > 0",
+                    "select place_id from location_property_osmline where geometry_sector = $1 and indexed_status > 0",
                     1, pg_prepare_params);
     if (PQresultStatus(res) != PGRES_COMMAND_OK)
     {
index a7daa1fce6bcb3eab28125330b8a4a33fb7cd3cc..166dfee9e917982be6592a794ee51653c9e43a33 100755 (executable)
 
                echo "Load Data\n";
                $aDBInstances = array();
-               $aQueriesPlacex = array();
-               $aQueriesOsmline = array();
-               // the query is divided into parcels, so that the work between the processes, i.e. the DBInstances, will be evenly distributed
-               $iNumberOfParcels = 100;
-               for($i = 0; $i < $iNumberOfParcels; $i++)
-               {
-                       $sSQL = 'insert into placex (osm_type, osm_id, class, type, name, admin_level, ';
-                       $sSQL .= 'housenumber, street, addr_place, isin, postcode, country_code, extratags, ';
-                       $sSQL .= 'geometry) select * from place where osm_id % '.$iNumberOfParcels.' = '.$i.' and not ';
-                       $sSQL .= '(class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\');';
-                       array_push($aQueriesPlacex, $sSQL);
-                       $sSQL = 'select insert_osmline (osm_id, housenumber, street, addr_place, postcode, country_code, ';
-                       $sSQL .= 'geometry) from place where osm_id % '.$iNumberOfParcels.' = '.$i.' and ';
-                       $sSQL .= 'class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\'';
-                       array_push($aQueriesOsmline, $sSQL);
-               }
-        
                for($i = 0; $i < $iInstances; $i++)
                {
                        $aDBInstances[$i] =& getDB(true);
-               }
-               // now execute the query blocks, in the first round for placex, then for osmline, 
-               // because insert_osmline depends on the placex table
-               echo 'Inserting from place to placex.';
-               $aQueries = $aQueriesPlacex;
-               for($j = 0; $j < 2; $j++)
-               {
-                       $bAnyBusy = true;
-                       while($bAnyBusy)
+                       if( $i < $iInstances-1 )
                        {
-                               $bAnyBusy = false;
-
-                               for($i = 0; $i < $iInstances; $i++)
-                               {
-                                       if (pg_connection_busy($aDBInstances[$i]->connection)) 
-                                       {
-                                               $bAnyBusy = true;
-                                       }
-                                       else if (count($aQueries) > 0)
-                                       {
-                                               $query = array_pop($aQueries);
-                                               if (!pg_send_query($aDBInstances[$i]->connection, $query))
-                                               {
-                                                       fail(pg_last_error($oDB->connection));
-                                               }
-                                               else
-                                               {
-                                                       pg_get_result($aDBInstances[$i]->connection);
-                                                       $bAnyBusy = true;
-                                               }
-                                       }
-                               }
-                               sleep(1);
-                               echo '.';
+                               $sSQL = 'insert into placex (osm_type, osm_id, class, type, name, admin_level, ';
+                               $sSQL .= 'housenumber, street, addr_place, isin, postcode, country_code, extratags, ';
+                               $sSQL .= 'geometry) select * from place where osm_id % '.$iInstances-1.' = '.$i;
                        }
-                       echo "\n";
-                       if ($j == 0)  //for the second round with osmline
+                       else
+                       {
+                               // last thread for interpolation lines
+                               $sSQL = 'select insert_osmline (osm_id, housenumber, street, addr_place, postcode, country_code, ';
+                               $sSQL .= 'geometry) from place where ';
+                               $sSQL .= 'class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\'';
+                       }
+                       if ($aCMDResult['verbose']) echo "$sSQL\n";
+                       if (!pg_send_query($aDBInstances[$i]->connection, $sSQL)) fail(pg_last_error($oDB->connection));
+               }
+               $bAnyBusy = true;
+               while($bAnyBusy)
+               {
+                       $bAnyBusy = false;
+                       for($i = 0; $i < $iInstances; $i++)
                        {
-                               echo 'Inserting from place to osmline.';
-                               $aQueries = $aQueriesOsmline;
+                               if (pg_connection_busy($aDBInstances[$i]->connection)) $bAnyBusy = true;
                        }
+                       sleep(1);
+                       echo '.';
                }
-               
+               echo "\n";
                echo "Reanalysing database...\n";
                pgsqlRunScript('ANALYSE');
        }