]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #2105 from lonvia/fix-use-of-records
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 13 Dec 2020 08:48:21 +0000 (09:48 +0100)
committerGitHub <noreply@github.com>
Sun, 13 Dec 2020 08:48:21 +0000 (09:48 +0100)
Use a typed record for place info in get_addressdata

.github/actions/setup-postgresql/action.yml
.github/workflows/ci-tests.yml
sql/functions/address_lookup.sql

index 98086f2d0a40acd0bab26b47a95e4d05e27afbfc..0742e66314a10a1afc6288c7e40391fc166b8ee6 100644 (file)
@@ -1,26 +1,45 @@
 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:
     using: "composite"
 
     steps:
-        - name: Install postgis
+        - name: Remove existing PostgreSQL
+          run: |
+              sudo apt-get update -qq
+              sudo apt-get purge -yq postgresql*
+          shell: bash
+
+        - name: Install PostgreSQL
           run: |
-            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 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
           run: |
-              echo 'fsync = off' | sudo tee /etc/postgresql/13/main/conf.d/local.conf
-              echo 'synchronous_commit = off' | sudo tee -a /etc/postgresql/13/main/conf.d/local.conf
-              echo 'full_page_writes = off' | sudo tee -a /etc/postgresql/13/main/conf.d/local.conf
-              echo 'shared_buffers = 1GB' | sudo tee -a /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/${PGVER}/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/${PGVER}/main/conf.d/local.conf
+              echo 'port = 5432' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
           shell: bash
+          env:
+              PGVER: ${{ inputs.postgresql-version }}
 
         - name: Setup database
           run: |
-              sudo systemctl start postgresql
+              sudo systemctl restart postgresql
               sudo -u postgres createuser -S www-data
               sudo -u postgres createuser -s runner
           shell: bash
index f1da461686f148db0a438c2f0432c6dfac962198..dd97aefa12fb9c24296047296890248832490728 100644 (file)
@@ -6,6 +6,15 @@ jobs:
     tests:
         runs-on: ubuntu-20.04
 
+        strategy:
+            matrix:
+                postgresql: [9.5, 13]
+                include:
+                    - postgresql: 9.5
+                      postgis: 2.5
+                    - postgresql: 13
+                      postgis: 3
+
         steps:
             - uses: actions/checkout@v2
               with:
@@ -25,6 +34,9 @@ jobs:
                   key: nominatim-data-${{ steps.get-date.outputs.date }}
 
             - uses: ./.github/actions/setup-postgresql
+              with:
+                  postgresql-version: ${{ matrix.postgresql }}
+                  postgis-version: ${{ matrix.postgis }}
             - uses: ./.github/actions/build-nominatim
 
             - name: Install test prerequsites
@@ -65,6 +77,9 @@ jobs:
                   key: nominatim-data-${{ steps.get-date.outputs.date }}
 
             - uses: ./.github/actions/setup-postgresql
+              with:
+                  postgresql-version: 13
+                  postgis-version: 3
             - uses: ./.github/actions/build-nominatim
 
             - name: Create configuration
index 34ef7ca75b6cf1dbb669313d8eee5e577caa9e16..4d7cc789e9a59acffc9b65246ce405cf56620377 100644 (file)
@@ -79,6 +79,18 @@ END;
 $$
 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.
 --
@@ -87,7 +99,7 @@ CREATE OR REPLACE FUNCTION get_addressdata(in_place_id BIGINT, in_housenumber IN
   RETURNS setof addressline
   AS $$
 DECLARE
-  place RECORD;
+  place addressdata_place;
   location RECORD;
   current_rank_address INTEGER;
   location_isaddress BOOLEAN;
@@ -98,9 +110,9 @@ BEGIN
   -- first query osmline (interpolation lines)
   IF in_housenumber >= 0 THEN
     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,
-           null::hstore as name, null::hstore as address,
+           null as name, null as address,
            ST_Centroid(linegeo) as centroid
       INTO place
       FROM location_property_osmline
@@ -111,10 +123,10 @@ BEGIN
   --then query tiger data
   -- %NOTIGERDATA% IF 0 THEN
   IF place IS NULL AND in_housenumber >= 0 THEN
-    SELECT parent_place_id as place_id, 'us'::varchar(2) as country_code,
-           in_housenumber::text as housenumber, postcode,
+    SELECT parent_place_id as place_id, 'us' as country_code,
+           in_housenumber as housenumber, postcode,
            '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
       INTO place
       FROM location_property_tiger
@@ -125,10 +137,10 @@ BEGIN
 
   -- %NOAUXDATA% IF 0 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,
            'place' as class, 'house' as type,
-           null::hstore as name, null::hstore as address,
+           null as name, null as address,
            centroid
       INTO place
       FROM location_property_aux
@@ -141,8 +153,8 @@ BEGIN
     SELECT parent_place_id as place_id, country_code,
            null::text as housenumber, postcode,
            'place' as class, 'postcode' as type,
-           null::hstore as name, null::hstore as address,
-           null::geometry as centroid
+           null as name, null as address,
+           null as centroid
       INTO place
       FROM location_postcode
       WHERE place_id = in_place_id;
@@ -167,8 +179,8 @@ BEGIN
     select coalesce(linked_place_id, place_id) as place_id,  country_code,
            housenumber, postcode,
            class, type,
-           null::hstore as name, address,
-           null::geometry as centroid
+           null as name, address,
+           null as centroid
       INTO place
       FROM placex where place_id = in_place_id;
   END IF;