Skip to content

Instantly share code, notes, and snippets.

@slinkp
Created March 19, 2012 18:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slinkp/2121898 to your computer and use it in GitHub Desktop.
Save slinkp/2121898 to your computer and use it in GitHub Desktop.
No more geomcollections
diff --git a/ebpub/ebpub/db/migrations/0005_newsitem_location_trigger.py b/ebpub/ebpub/db/migrations/0005_newsitem_location_trigger.py
index 53fd108..721a133 100644
--- a/ebpub/ebpub/db/migrations/0005_newsitem_location_trigger.py
+++ b/ebpub/ebpub/db/migrations/0005_newsitem_location_trigger.py
@@ -33,38 +33,16 @@ class Migration(DataMigration):
DELETE FROM db_newsitemlocation WHERE news_item_id = OLD.id; --
END IF; --
IF (NEW.location IS NOT NULL) THEN
- IF (GeometryType(NEW.location) = 'GEOMETRYCOLLECTION') THEN
- FOR i IN 1..ST_NumGeometries(NEW.location) LOOP
- FOR loc_id IN SELECT id FROM db_location WHERE intersecting_collection(ST_GeometryN(NEW.location, i), db_location.location) LOOP
- PERFORM * FROM db_newsitemlocation WHERE news_item_id = NEW.id AND location_id = loc_id; --
- IF NOT FOUND THEN
- INSERT INTO db_newsitemlocation (news_item_id, location_id) VALUES (NEW.id, loc_id); --
- END IF; --
- END LOOP; --
- END LOOP; --
- ELSE
INSERT INTO db_newsitemlocation (news_item_id, location_id)
- SELECT NEW.id, id FROM db_location WHERE intersecting_collection(NEW.location, db_location.location); --
- END IF; --
+ SELECT NEW.id, id FROM db_location WHERE ST_Intersects(NEW.location, db_location.location); --
END IF; --
END IF; --
ELSIF (TG_OP = 'INSERT') THEN
-- See the above comment for why this statement isn't combined into
-- the previous one.
IF (NEW.location IS NOT NULL) THEN
- IF (GeometryType(NEW.location) = 'GEOMETRYCOLLECTION') THEN
- FOR i IN 1..ST_NumGeometries(NEW.location) LOOP
- FOR loc_id IN SELECT id FROM db_location WHERE intersecting_collection(ST_GeometryN(NEW.location, i), db_location.location) LOOP
- PERFORM * FROM db_newsitemlocation WHERE news_item_id = NEW.id AND location_id = loc_id; --
- IF NOT FOUND THEN
- INSERT INTO db_newsitemlocation (news_item_id, location_id) VALUES (NEW.id, loc_id); --
- END IF; --
- END LOOP; --
- END LOOP; --
- ELSE
INSERT INTO db_newsitemlocation (news_item_id, location_id)
- SELECT NEW.id, id FROM db_location WHERE intersecting_collection(NEW.location, db_location.location); --
- END IF; --
+ SELECT NEW.id, id FROM db_location WHERE ST_Intersects(NEW.location, db_location.location); --
END IF; --
ELSIF (TG_OP = 'DELETE') THEN
DELETE FROM db_newsitemlocation WHERE news_item_id = OLD.id; --
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment