- IF addr_item.key IN ('city', 'tiger:county', 'state', 'suburb', 'province',
- 'district', 'region', 'county', 'municipality',
- 'hamlet', 'village', 'subdistrict', 'town',
- 'neighbourhood', 'quarter', 'parish')
- THEN
- nameaddress_vector := array_merge(nameaddress_vector,
- addr_ids_from_name(addr_item.value));
- END IF;
+ IF addr_item.place_id is null THEN
+ nameaddress_vector := array_merge(nameaddress_vector,
+ addr_item.keywords);
+ CONTINUE;
+ END IF;
+
+ IF parent_address_place_ids is null THEN
+ SELECT array_agg(parent_place_id) INTO parent_address_place_ids
+ FROM place_addressline
+ WHERE place_id = parent_place_id;
+ END IF;
+
+ IF not parent_address_place_ids @> ARRAY[addr_item.place_id] THEN
+ nameaddress_vector := array_merge(nameaddress_vector,
+ addr_item.keywords);
+
+ INSERT INTO place_addressline (place_id, address_place_id, fromarea,
+ isaddress, distance, cached_rank_address)
+ VALUES (obj_place_id, addr_item.place_id, not addr_item.isguess,
+ true, addr_item.distance, addr_item.rank_address);
+ END IF;