Index: trunk/import/alkis-functions.sql
===================================================================
--- trunk/import/alkis-functions.sql	(revision 314)
+++ trunk/import/alkis-functions.sql	(revision 330)
@@ -12,4 +12,10 @@
 --             statt dessen verwenden der "import_id" um alte Relationen zu identifizieren und zu lÃ¶schen.
 
+-- 2014-08-27: Angleichung des Datenbank-Schema an die NorBIT-Version.
+--             Die Trigger-Function "delete_feature_kill()" arbeitet falsch, wenn "gml_id" als "character varying" angelegt ist.
+--             Das Format war bisher charachter(16).
+--             Zugriff auf die Spalte gml_id umgestellt von "=" auf "like" um den individuellen Timestamp zu ignorieren.
+
+-- 2014-09-04  Trigger-Funktion "delete_feature_kill()" angepasst: keine Tabelle "alkis_beziehungen" mehr.
 
 -- Table/View/Sequence lÃ¶schen, wenn vorhanden
@@ -176,7 +182,4 @@
 	EXECUTE sql;
 
---	CREATE UNIQUE INDEX vobjekte_gmlid ON vobjekte(gml_id,beginnt);
---	CREATE INDEX vobjekte_table ON vobjekte(table_name);
-
 	CREATE VIEW vbeziehungen AS
 		SELECT	beziehung_von,(SELECT table_name FROM vobjekte WHERE gml_id=beziehung_von) AS typ_von
@@ -184,10 +187,4 @@
 			,beziehung_zu,(SELECT table_name FROM vobjekte WHERE gml_id=beziehung_zu) AS typ_zu
 		FROM alkis_beziehungen;
-
---	CREATE INDEX vbeziehungen_von    ON vbeziehungen(beziehung_von);
---	CREATE INDEX vbeziehungen_vontyp ON vbeziehungen(typ_von);
---	CREATE INDEX vbeziehungen_art    ON vbeziehungen(beziehungsart);
---	CREATE INDEX vbeziehungen_zu     ON vbeziehungen(beziehung_zu);
---	CREATE INDEX vbeziehungen_zutyp  ON vbeziehungen(typ_zu);
 
 	RETURN 'ALKIS-Views erzeugt.';
@@ -376,38 +373,81 @@
 $$ LANGUAGE plpgsql;
 
-
 -- "delete" und "replace" verarbeiten (OHNE Historie). Historische Objekte werden sofort gelÃ¶scht.
 -- Geaendert 2014-02-03 auf Vorschlag M.B. Krs. Unna
-CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$
-DECLARE
-	query TEXT;
+
+-- 2014-08-27: Anpassung an vereinheitlichtes Datenbank-Schema.
+-- Wenn die Spalte gml_id im Format "character varying" (ohne LÃ€ngenbegrenzung) angelegt wird,
+-- muss gezielt der ID-Teil vor dem Timestamp angesprochen werden.
+-- Zugriff auf die Spalte gml_id umgestellt von "=" auf "like".
+CREATE OR REPLACE FUNCTION delete_feature_kill_vers07() RETURNS TRIGGER AS $$
+DECLARE
 	begsql TEXT;
 	aktbeg TEXT;
 	gml_id TEXT;
-	query_bez TEXT;
-BEGIN
-	NEW.typename := lower(NEW.typename);
-	NEW.context := lower(NEW.context);
-	gml_id      := substr(NEW.featureid, 1, 16);
+BEGIN
+	NEW.typename := lower(NEW.typename); -- Objektart = Tabellen-Name
+	NEW.context := lower(NEW.context);   -- Operation 'delete', 'replace' oder 'update'
+	gml_id      := substr(NEW.featureid, 1, 16); -- ID-Teil der gml_id, ggf. anhÃ€ngender Timestamp abgeschnitten
 
 	IF NEW.context IS NULL THEN
-		NEW.context := 'delete';
-	END IF;
-
-	IF NEW.context='delete' THEN -- Ersatzloses Loeschen des Objektes
+		NEW.context := 'delete'; -- default
+	END IF;
+
+	IF NEW.context='delete' THEN -- ersatzloses LÃ¶schen des Objektes
+
           -- In der Objekt-Tabelle
-		EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id = ''' || gml_id || '''';
-          -- Beziehungen von und zu dem Objekt sind hinfaellig
+		EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id like ''' || gml_id || '%''';
+ 
+         -- Beziehungen von und zu dem Objekt sind hinfaellig (zukÃŒnftig entfallend)
 		EXECUTE 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id || ''' OR beziehung_zu = ''' || gml_id || '''';
+
 		--RAISE NOTICE 'LÃ¶sche gml_id % in % und Beziehungen', gml_id, NEW.typename;
 
 	ELSE -- Ersetzen eines Objektes (Replace). In der Objekt-Tabelle sind jetzt bereits 2 Objekte vorhanden (alt und neu).
+
 		-- beginnt-Wert des aktuellen Objektes ermitteln
-		begsql := 'SELECT max(beginnt) FROM ' || NEW.typename || ' WHERE gml_id = ''' || substr(NEW.replacedBy, 1, 16) || ''' AND endet IS NULL';
+		begsql := 'SELECT max(beginnt) FROM ' || NEW.typename || ' WHERE gml_id like ''' || substr(NEW.replacedBy, 1, 16) || '%'' AND endet IS NULL';
 		EXECUTE begsql INTO aktbeg;
+
 		-- Alte Objekte entfernen
-		EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id = ''' || gml_id || ''' AND beginnt < ''' || aktbeg || '''';
-		-- Beziehungen vom alten Objekt entfernen, die aus frueheren Importen stammen
-		EXECUTE 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id || ''' AND import_id < (SELECT max(id) FROM import)';
+		EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id like ''' || gml_id || '%'' AND beginnt < ''' || aktbeg || '''';
+
+		-- Beziehungen des alten Objektes entfernen, die aus frÃŒheren Importen stammen
+		EXECUTE 'DELETE FROM alkis_beziehungen WHERE beziehung_von like ''' || gml_id || '%'' AND import_id < (SELECT max(id) FROM import)';
+
+	END IF;
+
+	NEW.ignored := false;
+	RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+-- 2014-09-04: Version 0.8 ohne "alkis_beziehungen"-Tabelle
+CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$
+DECLARE
+	begsql TEXT;
+	aktbeg TEXT;
+	gml_id TEXT;
+BEGIN
+	NEW.typename := lower(NEW.typename); -- Objektart=Tabellen-Name
+	NEW.context := lower(NEW.context);   -- Operation 'delete'/'replace'/'update'
+	gml_id      := substr(NEW.featureid, 1, 16); -- ID-Teil der gml_id, ohne Timestamp
+
+	IF NEW.context IS NULL THEN
+		NEW.context := 'delete'; -- default
+	END IF;
+	IF NEW.context='delete' THEN -- LÃ¶schen des Objektes
+          -- In der Objekt-Tabelle
+		EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id like ''' || gml_id || '%''';
+		--RAISE NOTICE 'LÃ¶sche gml_id % in %', gml_id, NEW.typename;
+	ELSE -- Ersetzen des Objektes (Replace). In der Objekt-Tabelle sind jetzt bereits 2 Objekte vorhanden (alt und neu).
+
+		-- beginnt-Wert des aktuellen Objektes ermitteln
+		begsql := 'SELECT max(beginnt) FROM ' || NEW.typename || ' WHERE gml_id like ''' || substr(NEW.replacedBy, 1, 16) || '%'' AND endet IS NULL';
+		EXECUTE begsql INTO aktbeg;
+
+		-- Alte Objekte entfernen
+		EXECUTE 'DELETE FROM ' || NEW.typename || ' WHERE gml_id like ''' || gml_id || '%'' AND beginnt < ''' || aktbeg || '''';
+
 	END IF;
 
@@ -435,6 +475,7 @@
 	FOR c IN
 		SELECT table_name
-		FROM information_schema.columns a
+		 FROM information_schema.columns a
 		WHERE a.column_name='endet'
+            AND a.is_updatable='YES' -- keine Views, die endet-Spalte haben
 		ORDER BY table_name
 	LOOP
