Ignore:
Timestamp:
08/28/14 11:29:21 (10 years ago)
Author:
frank.jaeger
Message:

Beginn der Umstellung von Datenbank-Schema und Views.
Noch nicht ausgetestet.
Programme noch nicht umgestellt.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Version-0.8/import/alkis-functions.sql

    r314 r324  
    1212--             statt dessen verwenden der "import_id" um alte Relationen zu identifizieren und zu löschen. 
    1313 
     14-- 2014-08-27: Angleichung des Datenbank-Schema an die NorBIT-Version. 
     15--             Die Trigger-Function "delete_feature_kill()" arbeitet falsch, wenn "gml_id" als "character varying" angelegt ist. 
     16--             Das Format war bisher charachter(16). 
     17--             Zugriff auf die Spalte gml_id umgestellt von "=" auf "like" um den individuellen Timestamp zu ignorieren. 
    1418 
    1519-- Table/View/Sequence löschen, wenn vorhanden 
     
    379383-- "delete" und "replace" verarbeiten (OHNE Historie). Historische Objekte werden sofort gelöscht. 
    380384-- Geaendert 2014-02-03 auf Vorschlag M.B. Krs. Unna 
     385 
     386/* 
     387 
     388-- Diese Version arbeitet nur korrekt, wenn die Spalte gml_id im Format "character(16)" angelegt ist. 
     389 
    381390CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$ 
    382391DECLARE 
     
    417426$$ LANGUAGE plpgsql; 
    418427 
     428*/ 
     429 
     430-- 2014-08-27: Anpassung an vereinheitlichtes Datenbank-Schema. 
     431-- Wenn die Spalte gml_id im Format "character varying" (ohne LÀngenbegrenzung) angelegt wird, 
     432-- muss gezielt der ID-Teil vor dem Timestamp angesprochen werden. 
     433-- Zugriff auf die Spalte gml_id umgestellt von "=" auf "like". 
     434CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$ 
     435DECLARE 
     436        query TEXT; 
     437        begsql TEXT; 
     438        aktbeg TEXT; 
     439        gml_id TEXT; 
     440        query_bez TEXT; 
     441BEGIN 
     442        NEW.typename := lower(NEW.typename); -- Objektart = Tabellen-Name 
     443        NEW.context := lower(NEW.context);   -- Operation 'delete', 'replace' oder 'update' 
     444        gml_id      := substr(NEW.featureid, 1, 16); -- ID-Teil der gml_id, ggf. anhÀngender Timestamp abgeschnitten 
     445 
     446        IF NEW.context IS NULL THEN 
     447                NEW.context := 'delete'; -- default 
     448        END IF; 
     449 
     450        IF NEW.context='delete' THEN -- ersatzloses Löschen des Objektes 
     451 
     452          -- In der Objekt-Tabelle 
     453                EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id like ''' || gml_id || '%'''; 
     454  
     455         -- Beziehungen von und zu dem Objekt sind hinfaellig (zukÃŒnftig entfallend) 
     456                EXECUTE 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id || ''' OR beziehung_zu = ''' || gml_id || ''''; 
     457 
     458                --RAISE NOTICE 'Lösche gml_id % in % und Beziehungen', gml_id, NEW.typename; 
     459 
     460        ELSE -- Ersetzen eines Objektes (Replace). In der Objekt-Tabelle sind jetzt bereits 2 Objekte vorhanden (alt und neu). 
     461 
     462                -- beginnt-Wert des aktuellen Objektes ermitteln 
     463                begsql := 'SELECT max(beginnt) FROM ' || NEW.typename || ' WHERE gml_id like ''' || substr(NEW.replacedBy, 1, 16) || '%'' AND endet IS NULL'; 
     464                EXECUTE begsql INTO aktbeg; 
     465 
     466                -- Alte Objekte entfernen 
     467                EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id like ''' || gml_id || '%'' AND beginnt < ''' || aktbeg || ''''; 
     468 
     469                -- Beziehungen des alten Objektes entfernen, die aus frÃŒheren Importen stammen 
     470                EXECUTE 'DELETE FROM alkis_beziehungen WHERE beziehung_von like ''' || gml_id || '%'' AND import_id < (SELECT max(id) FROM import)'; 
     471 
     472        END IF; 
     473 
     474        NEW.ignored := false; 
     475        RETURN NEW; 
     476END; 
     477$$ LANGUAGE plpgsql; 
     478 
    419479 
    420480-- BeziehungssÀtze aufrÀumen 
Note: See TracChangeset for help on using the changeset viewer.