// Add, modify or delete?
if (prevQuerySet)
{
- if ((PQgetvalue(prevQuerySet->res, 0, 14) && strcmp(PQgetvalue(prevQuerySet->res, 0, 14), "100") == 0) || PQntuples(querySet.res))
+ if ((PQgetvalue(prevQuerySet->res, 0, 14) && strcmp(PQgetvalue(prevQuerySet->res, 0, 14), "100") == 0) || PQntuples(querySet.res) == 0)
{
// Delete
if (writer_mutex) pthread_mutex_lock( writer_mutex );
updateStartTime = time(0);
int done = 0;
+
+ if (thread_data->writer)
+ {
+ nominatim_exportPlaceQueries(place_id, thread_data->conn, &querySet);
+ }
+
while(!done)
{
- if (thread_data->writer)
- {
- nominatim_exportPlaceQueries(place_id, thread_data->conn, &querySet);
- }
-
paramPlaceID = PGint32(place_id);
paramValues[0] = (char *)¶mPlaceID;
if (strncmp(PQerrorMessage(thread_data->conn), "ERROR: deadlock detected", 25))
{
fprintf(stderr, "index_placex: UPDATE failed - deadlock, retrying\n");
+ PQclear(res);
+ sleep(rand() % 10);
}
else
{
fprintf(stderr, "index_placex: UPDATE failed: %s", PQerrorMessage(thread_data->conn));
PQclear(res);
- sleep(5);
+ sleep(rand() % 10);
// exit(EXIT_FAILURE);
}
}
-- try using the isin value to find parent places
IF array_upper(isin_tokens, 1) IS NOT NULL THEN
FOR i IN 1..array_upper(isin_tokens, 1) LOOP
---RAISE WARNING ' ISIN: % % % %',NEW.partition, place_centroid, search_maxrank, isin_tokens[i];
+--RAISE WARNING ' getNearestNamedFeature: % % % %',NEW.partition, place_centroid, search_maxrank, isin_tokens[i];
FOR location IN SELECT * from getNearestNamedFeature(NEW.partition, place_centroid, search_maxrank, isin_tokens[i]) LOOP
+
+--RAISE WARNING ' ISIN: %',location;
+
nameaddress_vector := array_merge(nameaddress_vector, location.keywords::integer[]);
INSERT INTO place_addressline VALUES (NEW.place_id, location.place_id, false, NOT address_havelevel[location.rank_address], location.distance, location.rank_address);
address_havelevel[location.rank_address] := true;
UNION ALL
SELECT * FROM location_area_country WHERE ST_Contains(geometry, point) and rank_search < maxrank
) as location_area
- ORDER BY rank_address desc, isin_tokens && keywords desc, isguess asc, ST_Distance(point, centroid) * CASE WHEN rank_address = 16 AND rank_search = 16 THEN 0.25 WHEN rank_address = 16 AND rank_search = 17 THEN 0.5 ELSE 1 END ASC
+ ORDER BY rank_address desc, isin_tokens && keywords desc, isguess asc,
+ ST_Distance(point, centroid) *
+ CASE
+ WHEN rank_address = 16 AND rank_search = 15 THEN 0.2 -- capital city
+ WHEN rank_address = 16 AND rank_search = 16 THEN 0.25 -- city
+ WHEN rank_address = 16 AND rank_search = 17 THEN 0.5 -- town
+ ELSE 1 END ASC -- everything else
LOOP
RETURN NEXT r;
END LOOP;