Do insensitive case compare using lower() and not ILIKE (#961)

* Replace ILIKE by lower() for insensitive case compare

* Refactoring SQL insensitive case compare
This commit is contained in:
Frédéric Rodrigo 2020-08-06 09:14:47 +02:00 committed by GitHub
parent 6a512af90f
commit 232379b3ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 14 deletions

View File

@ -20,16 +20,8 @@ BEGIN
osm_city_point AS osm osm_city_point AS osm
WHERE ( WHERE (
(osm.tags ? 'wikidata' AND osm.tags->'wikidata' = ne.wikidataid) OR (osm.tags ? 'wikidata' AND osm.tags->'wikidata' = ne.wikidataid) OR
ne.name ILIKE osm.name OR lower(osm.name) IN (lower(ne.name), lower(ne.namealt), lower(ne.meganame), lower(ne.gn_ascii), lower(ne.nameascii)) OR
ne.name ILIKE osm.name_en OR lower(osm.name_en) IN (lower(ne.name), lower(ne.namealt), lower(ne.meganame), lower(ne.gn_ascii), lower(ne.nameascii)) OR
ne.namealt ILIKE osm.name OR
ne.namealt ILIKE osm.name_en OR
ne.meganame ILIKE osm.name OR
ne.meganame ILIKE osm.name_en OR
ne.gn_ascii ILIKE osm.name OR
ne.gn_ascii ILIKE osm.name_en OR
ne.nameascii ILIKE osm.name OR
ne.nameascii ILIKE osm.name_en OR
ne.name = unaccent(osm.name) ne.name = unaccent(osm.name)
) )
AND osm.place IN ('city', 'town', 'village') AND osm.place IN ('city', 'town', 'village')

View File

@ -16,10 +16,8 @@ BEGIN
SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank, osm.is_intermittent SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank, osm.is_intermittent
FROM ne_10m_geography_marine_polys AS ne, FROM ne_10m_geography_marine_polys AS ne,
osm_marine_point AS osm osm_marine_point AS osm
WHERE trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.name WHERE lower(trim(regexp_replace(ne.name, '\\s+', ' ', 'g'))) IN (lower(osm.name), lower(osm.tags->'name:en'), lower(osm.tags->'name:es'))
OR trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.tags->'name:en' OR substring(lower(trim(regexp_replace(ne.name, '\\s+', ' ', 'g'))) FROM 1 FOR length(lower(osm.name))) = lower(osm.name)
OR trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) ILIKE osm.tags->'name:es'
OR osm.name ILIKE trim(regexp_replace(ne.name, '\\s+', ' ', 'g')) || ' %'
) )
UPDATE osm_marine_point AS osm UPDATE osm_marine_point AS osm
SET "rank" = scalerank SET "rank" = scalerank