Changeset 324 for Version-0.8/import/alkis-functions.sql
- Timestamp:
- 08/28/14 11:29:21 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Version-0.8/import/alkis-functions.sql
r314 r324 12 12 -- statt dessen verwenden der "import_id" um alte Relationen zu identifizieren und zu löschen. 13 13 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. 14 18 15 19 -- Table/View/Sequence löschen, wenn vorhanden … … 379 383 -- "delete" und "replace" verarbeiten (OHNE Historie). Historische Objekte werden sofort gelöscht. 380 384 -- 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 381 390 CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$ 382 391 DECLARE … … 417 426 $$ LANGUAGE plpgsql; 418 427 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". 434 CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$ 435 DECLARE 436 query TEXT; 437 begsql TEXT; 438 aktbeg TEXT; 439 gml_id TEXT; 440 query_bez TEXT; 441 BEGIN 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; 476 END; 477 $$ LANGUAGE plpgsql; 478 419 479 420 480 -- BeziehungssÀtze aufrÀumen
Note: See TracChangeset
for help on using the changeset viewer.