}
PQclear(res);
+ pg_prepare_params[0] = PG_OID_INT4;
+ res = PQprepare(conn, "index_nosectors",
+ "select 0::integer,count(*) from placex where rank_search = $1 and indexed_status > 0",
+ 1, pg_prepare_params);
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
+ {
+ fprintf(stderr, "Failed preparing index_sectors: %s\n", PQerrorMessage(conn));
+ exit(EXIT_FAILURE);
+ }
+ PQclear(res);
+
pg_prepare_params[0] = PG_OID_INT4;
pg_prepare_params[1] = PG_OID_INT4;
res = PQprepare(conn, "index_sector_places",
}
PQclear(res);
+ pg_prepare_params[0] = PG_OID_INT4;
+ res = PQprepare(conn, "index_nosector_places",
+ "select place_id from placex where rank_search = $1 and indexed_status > 0 order by geometry_sector",
+ 1, pg_prepare_params);
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
+ {
+ fprintf(stderr, "Failed preparing index_nosector_places: %s\n", PQerrorMessage(conn));
+ exit(EXIT_FAILURE);
+ }
+ PQclear(res);
+
// Build the data for each thread
thread_data = (struct index_thread_data *)malloc(sizeof(struct index_thread_data)*num_threads);
for (i = 0; i < num_threads; i++)
paramValues[0] = (char *)¶mRank;
paramLengths[0] = sizeof(paramRank);
paramFormats[0] = 1;
- resSectors = PQexecPrepared(conn, "index_sectors", 1, paramValues, paramLengths, paramFormats, 1);
+ if (rank < 16)
+ resSectors = PQexecPrepared(conn, "index_nosectors", 1, paramValues, paramLengths, paramFormats, 1);
+ else
+ resSectors = PQexecPrepared(conn, "index_sectors", 1, paramValues, paramLengths, paramFormats, 1);
if (PQresultStatus(resSectors) != PGRES_TUPLES_OK)
{
fprintf(stderr, "index_sectors: SELECT failed: %s", PQerrorMessage(conn));
//printf("\n Starting sector %d size %ld\n", sector, PGint64(*((uint64_t *)PQgetvalue(resSectors, iSector, 1))));
// Get all the place_id's for this sector
- paramRank = PGint32(rank);
- paramValues[0] = (char *)¶mRank;
- paramLengths[0] = sizeof(paramRank);
- paramFormats[0] = 1;
- paramSector = PGint32(sector);
+ paramRank = PGint32(rank);
+ paramValues[0] = (char *)¶mRank;
+ paramLengths[0] = sizeof(paramRank);
+ paramFormats[0] = 1;
+ paramSector = PGint32(sector);
paramValues[1] = (char *)¶mSector;
- paramLengths[1] = sizeof(paramSector);
- paramFormats[1] = 1;
- resPlaces = PQexecPrepared(conn, "index_sector_places", 2, paramValues, paramLengths, paramFormats, 1);
+ paramLengths[1] = sizeof(paramSector);
+ paramFormats[1] = 1;
+ if (rank < 16)
+ resPlaces = PQexecPrepared(conn, "index_nosector_places", 1, paramValues, paramLengths, paramFormats, 1);
+ else
+ resPlaces = PQexecPrepared(conn, "index_sector_places", 2, paramValues, paramLengths, paramFormats, 1);
if (PQresultStatus(resPlaces) != PGRES_TUPLES_OK)
{
fprintf(stderr, "index_sector_places: SELECT failed: %s", PQerrorMessage(conn));
pthread_mutex_unlock( thread_data->count_mutex );
- //printf(" Processing place_id %ld\n", place_id);
+// printf(" Processing place_id %d\n", place_id);
paramPlaceID = PGint32(place_id);
paramValues[0] = (char *)¶mPlaceID;
paramLengths[0] = sizeof(paramPlaceID);
$$
LANGUAGE plpgsql IMMUTABLE;
+CREATE OR REPLACE FUNCTION get_country_code(place geometry, in_country_code VARCHAR(2)) RETURNS TEXT
+ AS $$
+DECLARE
+ nearcountry RECORD;
+BEGIN
+ FOR nearcountry IN select country_code from country_name where country_code = lower(in_country_code)
+ LOOP
+ RETURN nearcountry.country_code;
+ END LOOP;
+ RETURN get_country_code(place);
+END;
+$$
+LANGUAGE plpgsql IMMUTABLE;
+
CREATE OR REPLACE FUNCTION get_country_language_code(search_country_code VARCHAR(2)) RETURNS TEXT
AS $$
DECLARE
NEW.place_id := nextval('seq_place');
NEW.indexed_status := 1; --STATUS_NEW
- IF NEW.country_code is null THEN
- NEW.country_code := get_country_code(NEW.geometry);
- END IF;
+ NEW.country_code := get_country_code(NEW.geometry, NEW.country_code);
NEW.geometry_sector := geometry_sector(NEW.geometry);
NEW.partition := get_partition(NEW.geometry, NEW.country_code);
RETURN NEW;
END IF;
- IF NEW.country_code is null THEN
- NEW.country_code := get_country_code(NEW.geometry);
- END IF;
- NEW.country_code := lower(NEW.country_code);
- NEW.partition := NEW.country_code;
- IF NEW.partition is null THEN
- NEW.partition := 'none';
- END IF;
-
IF NEW.indexed_status = 0 and OLD.indexed_status != 0 THEN
NEW.indexed_date = now();
-- Process area matches
location_rank_search := 100;
location_distance := 0;
+--RAISE WARNING '%', NEW.partition;
FOR location IN SELECT * from getNearFeatures(NEW.partition, place_centroid, search_maxrank, isin_tokens) LOOP
--RAISE WARNING ' AREA: %',location;