mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
Merge pull request #2105 from lonvia/fix-use-of-records
Use a typed record for place info in get_addressdata
This commit is contained in:
35
.github/actions/setup-postgresql/action.yml
vendored
35
.github/actions/setup-postgresql/action.yml
vendored
@@ -1,26 +1,45 @@
|
|||||||
name: 'Setup Postgresql and Postgis'
|
name: 'Setup Postgresql and Postgis'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
postgresql-version:
|
||||||
|
description: 'Version of PostgreSQL to install'
|
||||||
|
required: true
|
||||||
|
postgis-version:
|
||||||
|
description: 'Version of Postgis to install'
|
||||||
|
required: true
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Install postgis
|
- name: Remove existing PostgreSQL
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -qq
|
sudo apt-get update -qq
|
||||||
sudo apt-get install -y -qq postgresql-13-postgis-3 postgresql-13-postgis-3-scripts postgresql-server-dev-13
|
sudo apt-get purge -yq postgresql*
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
- name: Install PostgreSQL
|
||||||
|
run: |
|
||||||
|
sudo apt-get install -y -qq --no-install-suggests --no-install-recommends postgresql-client-${PGVER} postgresql-${PGVER}-postgis-${POSTGISVER} postgresql-${PGVER}-postgis-${POSTGISVER}-scripts postgresql-contrib-${PGVER} postgresql-${PGVER} postgresql-server-dev-${PGVER}
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
PGVER: ${{ inputs.postgresql-version }}
|
||||||
|
POSTGISVER: ${{ inputs.postgis-version }}
|
||||||
|
|
||||||
- name: Adapt postgresql configuration
|
- name: Adapt postgresql configuration
|
||||||
run: |
|
run: |
|
||||||
echo 'fsync = off' | sudo tee /etc/postgresql/13/main/conf.d/local.conf
|
echo 'fsync = off' | sudo tee /etc/postgresql/${PGVER}/main/conf.d/local.conf
|
||||||
echo 'synchronous_commit = off' | sudo tee -a /etc/postgresql/13/main/conf.d/local.conf
|
echo 'synchronous_commit = off' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
|
||||||
echo 'full_page_writes = off' | sudo tee -a /etc/postgresql/13/main/conf.d/local.conf
|
echo 'full_page_writes = off' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
|
||||||
echo 'shared_buffers = 1GB' | sudo tee -a /etc/postgresql/13/main/conf.d/local.conf
|
echo 'shared_buffers = 1GB' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
|
||||||
|
echo 'port = 5432' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
|
||||||
shell: bash
|
shell: bash
|
||||||
|
env:
|
||||||
|
PGVER: ${{ inputs.postgresql-version }}
|
||||||
|
|
||||||
- name: Setup database
|
- name: Setup database
|
||||||
run: |
|
run: |
|
||||||
sudo systemctl start postgresql
|
sudo systemctl restart postgresql
|
||||||
sudo -u postgres createuser -S www-data
|
sudo -u postgres createuser -S www-data
|
||||||
sudo -u postgres createuser -s runner
|
sudo -u postgres createuser -s runner
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
15
.github/workflows/ci-tests.yml
vendored
15
.github/workflows/ci-tests.yml
vendored
@@ -6,6 +6,15 @@ jobs:
|
|||||||
tests:
|
tests:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
postgresql: [9.5, 13]
|
||||||
|
include:
|
||||||
|
- postgresql: 9.5
|
||||||
|
postgis: 2.5
|
||||||
|
- postgresql: 13
|
||||||
|
postgis: 3
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
@@ -25,6 +34,9 @@ jobs:
|
|||||||
key: nominatim-data-${{ steps.get-date.outputs.date }}
|
key: nominatim-data-${{ steps.get-date.outputs.date }}
|
||||||
|
|
||||||
- uses: ./.github/actions/setup-postgresql
|
- uses: ./.github/actions/setup-postgresql
|
||||||
|
with:
|
||||||
|
postgresql-version: ${{ matrix.postgresql }}
|
||||||
|
postgis-version: ${{ matrix.postgis }}
|
||||||
- uses: ./.github/actions/build-nominatim
|
- uses: ./.github/actions/build-nominatim
|
||||||
|
|
||||||
- name: Install test prerequsites
|
- name: Install test prerequsites
|
||||||
@@ -65,6 +77,9 @@ jobs:
|
|||||||
key: nominatim-data-${{ steps.get-date.outputs.date }}
|
key: nominatim-data-${{ steps.get-date.outputs.date }}
|
||||||
|
|
||||||
- uses: ./.github/actions/setup-postgresql
|
- uses: ./.github/actions/setup-postgresql
|
||||||
|
with:
|
||||||
|
postgresql-version: 13
|
||||||
|
postgis-version: 3
|
||||||
- uses: ./.github/actions/build-nominatim
|
- uses: ./.github/actions/build-nominatim
|
||||||
|
|
||||||
- name: Create configuration
|
- name: Create configuration
|
||||||
|
|||||||
@@ -79,6 +79,18 @@ END;
|
|||||||
$$
|
$$
|
||||||
LANGUAGE plpgsql STABLE;
|
LANGUAGE plpgsql STABLE;
|
||||||
|
|
||||||
|
DROP TYPE IF EXISTS addressdata_place;
|
||||||
|
CREATE TYPE addressdata_place AS (
|
||||||
|
place_id BIGINT,
|
||||||
|
country_code VARCHAR(2),
|
||||||
|
housenumber TEXT,
|
||||||
|
postcode TEXT,
|
||||||
|
class TEXT,
|
||||||
|
type TEXT,
|
||||||
|
name HSTORE,
|
||||||
|
address HSTORE,
|
||||||
|
centroid GEOMETRY
|
||||||
|
);
|
||||||
|
|
||||||
-- Compute the list of address parts for the given place.
|
-- Compute the list of address parts for the given place.
|
||||||
--
|
--
|
||||||
@@ -87,7 +99,7 @@ CREATE OR REPLACE FUNCTION get_addressdata(in_place_id BIGINT, in_housenumber IN
|
|||||||
RETURNS setof addressline
|
RETURNS setof addressline
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
place RECORD;
|
place addressdata_place;
|
||||||
location RECORD;
|
location RECORD;
|
||||||
current_rank_address INTEGER;
|
current_rank_address INTEGER;
|
||||||
location_isaddress BOOLEAN;
|
location_isaddress BOOLEAN;
|
||||||
@@ -98,9 +110,9 @@ BEGIN
|
|||||||
-- first query osmline (interpolation lines)
|
-- first query osmline (interpolation lines)
|
||||||
IF in_housenumber >= 0 THEN
|
IF in_housenumber >= 0 THEN
|
||||||
SELECT parent_place_id as place_id, country_code,
|
SELECT parent_place_id as place_id, country_code,
|
||||||
in_housenumber::text as housenumber, postcode,
|
in_housenumber as housenumber, postcode,
|
||||||
'place' as class, 'house' as type,
|
'place' as class, 'house' as type,
|
||||||
null::hstore as name, null::hstore as address,
|
null as name, null as address,
|
||||||
ST_Centroid(linegeo) as centroid
|
ST_Centroid(linegeo) as centroid
|
||||||
INTO place
|
INTO place
|
||||||
FROM location_property_osmline
|
FROM location_property_osmline
|
||||||
@@ -111,10 +123,10 @@ BEGIN
|
|||||||
--then query tiger data
|
--then query tiger data
|
||||||
-- %NOTIGERDATA% IF 0 THEN
|
-- %NOTIGERDATA% IF 0 THEN
|
||||||
IF place IS NULL AND in_housenumber >= 0 THEN
|
IF place IS NULL AND in_housenumber >= 0 THEN
|
||||||
SELECT parent_place_id as place_id, 'us'::varchar(2) as country_code,
|
SELECT parent_place_id as place_id, 'us' as country_code,
|
||||||
in_housenumber::text as housenumber, postcode,
|
in_housenumber as housenumber, postcode,
|
||||||
'place' as class, 'house' as type,
|
'place' as class, 'house' as type,
|
||||||
null::hstore as name, null::hstore as address,
|
null as name, null as address,
|
||||||
ST_Centroid(linegeo) as centroid
|
ST_Centroid(linegeo) as centroid
|
||||||
INTO place
|
INTO place
|
||||||
FROM location_property_tiger
|
FROM location_property_tiger
|
||||||
@@ -125,10 +137,10 @@ BEGIN
|
|||||||
|
|
||||||
-- %NOAUXDATA% IF 0 THEN
|
-- %NOAUXDATA% IF 0 THEN
|
||||||
IF place IS NULL THEN
|
IF place IS NULL THEN
|
||||||
SELECT parent_place_id as place_id, 'us'::varchar(2) as country_code,
|
SELECT parent_place_id as place_id, 'us' as country_code,
|
||||||
housenumber, postcode,
|
housenumber, postcode,
|
||||||
'place' as class, 'house' as type,
|
'place' as class, 'house' as type,
|
||||||
null::hstore as name, null::hstore as address,
|
null as name, null as address,
|
||||||
centroid
|
centroid
|
||||||
INTO place
|
INTO place
|
||||||
FROM location_property_aux
|
FROM location_property_aux
|
||||||
@@ -141,8 +153,8 @@ BEGIN
|
|||||||
SELECT parent_place_id as place_id, country_code,
|
SELECT parent_place_id as place_id, country_code,
|
||||||
null::text as housenumber, postcode,
|
null::text as housenumber, postcode,
|
||||||
'place' as class, 'postcode' as type,
|
'place' as class, 'postcode' as type,
|
||||||
null::hstore as name, null::hstore as address,
|
null as name, null as address,
|
||||||
null::geometry as centroid
|
null as centroid
|
||||||
INTO place
|
INTO place
|
||||||
FROM location_postcode
|
FROM location_postcode
|
||||||
WHERE place_id = in_place_id;
|
WHERE place_id = in_place_id;
|
||||||
@@ -167,8 +179,8 @@ BEGIN
|
|||||||
select coalesce(linked_place_id, place_id) as place_id, country_code,
|
select coalesce(linked_place_id, place_id) as place_id, country_code,
|
||||||
housenumber, postcode,
|
housenumber, postcode,
|
||||||
class, type,
|
class, type,
|
||||||
null::hstore as name, address,
|
null as name, address,
|
||||||
null::geometry as centroid
|
null as centroid
|
||||||
INTO place
|
INTO place
|
||||||
FROM placex where place_id = in_place_id;
|
FROM placex where place_id = in_place_id;
|
||||||
END IF;
|
END IF;
|
||||||
|
|||||||
Reference in New Issue
Block a user