Created
March 19, 2012 18:03
-
-
Save slinkp/2121898 to your computer and use it in GitHub Desktop.
No more geomcollections
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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