mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-12 08:06:51 +02:00
ba920e1c91
agreed these symbols are less easily confused. I made new pg_operator entries (with new OIDs) for the old names, so as to provide backward compatibility while making it pretty easy to remove the old names in some future release cycle. This commit only touches the core datatypes, contrib will be fixed separately.
120 lines
2.7 KiB
SQL
120 lines
2.7 KiB
SQL
--
|
|
-- POLYGON
|
|
--
|
|
-- polygon logic
|
|
--
|
|
-- 3 o
|
|
-- |
|
|
-- 2 + |
|
|
-- / |
|
|
-- 1 # o +
|
|
-- / |
|
|
-- 0 #-----o-+
|
|
--
|
|
-- 0 1 2 3 4
|
|
--
|
|
|
|
CREATE TABLE POLYGON_TBL(f1 polygon);
|
|
|
|
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('(2.0,0.0),(2.0,4.0),(0.0,0.0)');
|
|
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('(3.0,1.0),(3.0,3.0),(1.0,0.0)');
|
|
|
|
-- degenerate polygons
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('(0.0,0.0)');
|
|
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('(0.0,1.0),(0.0,1.0)');
|
|
|
|
-- bad polygon input strings
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('0.0');
|
|
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('(0.0 0.0');
|
|
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('(0,1,2)');
|
|
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('(0,1,2,3');
|
|
|
|
INSERT INTO POLYGON_TBL(f1) VALUES ('asdf');
|
|
|
|
|
|
SELECT '' AS four, * FROM POLYGON_TBL;
|
|
|
|
-- overlap
|
|
SELECT '' AS three, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 && '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
-- left overlap
|
|
SELECT '' AS four, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 &< '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
-- right overlap
|
|
SELECT '' AS two, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 &> '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
-- left of
|
|
SELECT '' AS one, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 << '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
-- right of
|
|
SELECT '' AS zero, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 >> '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
-- contained
|
|
SELECT '' AS one, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 <@ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
-- same
|
|
SELECT '' AS one, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 ~= polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
-- contains
|
|
SELECT '' AS one, p.*
|
|
FROM POLYGON_TBL p
|
|
WHERE p.f1 @> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
|
|
|
|
--
|
|
-- polygon logic
|
|
--
|
|
-- 3 o
|
|
-- |
|
|
-- 2 + |
|
|
-- / |
|
|
-- 1 / o +
|
|
-- / |
|
|
-- 0 +-----o-+
|
|
--
|
|
-- 0 1 2 3 4
|
|
--
|
|
-- left of
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' << polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
|
|
|
|
-- left overlap
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' << polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS true;
|
|
|
|
-- right overlap
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' &> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
|
|
|
|
-- right of
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' >> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
|
|
|
|
-- contained in
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' <@ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
|
|
|
|
-- contains
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' @> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
|
|
|
|
-- same
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' ~= polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
|
|
|
|
-- overlap
|
|
SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' && polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS true;
|
|
|