Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions contrib/babelfishpg_common/sql/geography.sql
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,19 @@ CREATE OR REPLACE FUNCTION sys.STDimension(geom sys.GEOGRAPHY)
END;
$$ LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE;

--Parse
CREATE OR REPLACE FUNCTION sys.Geography__Parse(geography_tagged_text sys.NVARCHAR)
RETURNS sys.GEOGRAPHY
AS $$
BEGIN
IF UPPER(geography_tagged_text COLLATE sys.DATABASE_DEFAULT) = 'NULL' THEN
RETURN NULL;
END IF;

RETURN sys.geogfromtext_helper(geography_tagged_text, 4326);
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE PARALLEL SAFE;

--STGeomType
CREATE OR REPLACE FUNCTION sys.STGeometryType(geog sys.GEOGRAPHY)
RETURNS sys.NVARCHAR(4000)
Expand Down
13 changes: 13 additions & 0 deletions contrib/babelfishpg_common/sql/geometry.sql
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,19 @@ CREATE OR REPLACE FUNCTION sys.STGeometryType(geom sys.GEOMETRY)
END;
$$ LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE;

--Parse
CREATE OR REPLACE FUNCTION sys.Geometry__Parse(geometry_tagged_text sys.NVARCHAR)
RETURNS sys.GEOMETRY
AS $$
BEGIN
IF UPPER(geometry_tagged_text COLLATE sys.DATABASE_DEFAULT) = 'NULL' THEN
RETURN NULL;
END IF;

RETURN sys.geomfromtext_helper(geometry_tagged_text, 0);
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE PARALLEL SAFE;

-- STDisjoint
-- Checks if two geometries have no points in common
CREATE OR REPLACE FUNCTION sys.STDisjoint(geom1 sys.GEOMETRY, geom2 sys.GEOMETRY)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,34 @@
-------------------------------------------------------
---- Include changes related to spatial types here ----
-------------------------------------------------------
--STGeomType
--parse
--Geometry
CREATE OR REPLACE FUNCTION sys.Geometry__Parse(geometry_tagged_text sys.NVARCHAR)
RETURNS sys.GEOMETRY
AS $$
BEGIN
IF UPPER(geometry_tagged_text COLLATE sys.DATABASE_DEFAULT) = 'NULL' THEN
RETURN NULL;
END IF;

RETURN sys.geomfromtext_helper(geometry_tagged_text, 0);
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE PARALLEL SAFE;

--Geography
CREATE OR REPLACE FUNCTION sys.Geography__Parse(geography_tagged_text sys.NVARCHAR)
RETURNS sys.GEOGRAPHY
AS $$
BEGIN
IF UPPER(geography_tagged_text COLLATE sys.DATABASE_DEFAULT) = 'NULL' THEN
RETURN NULL;
END IF;

RETURN sys.geogfromtext_helper(geography_tagged_text, 4326);
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE PARALLEL SAFE;

--STGeomType
--Geometry
CREATE OR REPLACE FUNCTION sys.STGeometryType(geom sys.GEOMETRY)
RETURNS sys.NVARCHAR(4000)
Expand Down Expand Up @@ -43,4 +69,4 @@ CREATE OR REPLACE FUNCTION sys.STGeometryType(geog sys.GEOGRAPHY)

RAISE EXCEPTION 'Unexpected geometry type format: %. Expected ST_* prefix.', geom_type;
END;
$$ LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE;
$$ LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE;
2 changes: 1 addition & 1 deletion contrib/babelfishpg_tsql/antlr/TSqlParser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -3962,6 +3962,7 @@ geospatial_static_method
| STLINEFROMTEXT
| STPOLYFROMTEXT
| POINT
| PARSE
;

hierarchyid_methods
Expand All @@ -3970,7 +3971,6 @@ hierarchyid_methods

hierarchyid_static_method
: GETROOT
| PARSE
;

datatype_static_method
Expand Down
19 changes: 19 additions & 0 deletions test/JDBC/expected/Test-spatial-functions-3-vu-cleanup.out
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
USE TestGeospatialParse_DB

DROP TABLE TestGeospatialParse_GeometryTable3

DROP TABLE TestGeospatialParse_GeographyTable3

USE MASTER

DROP VIEW TestGeospatialParse_ParseGeomView3

DROP VIEW TestGeospatialParse_ParseGeogView3

DROP TABLE TestGeospatialParse_GeomTemp3

DROP TABLE TestGeospatialParse_GeogTemp3

DROP DATABASE TestGeospatialParse_DB

USE TestGeospatialMethods3_DB;

DROP VIEW TestGeospatialMethods3_STGeometryType_GEOM_View_db;
Expand All @@ -15,3 +33,4 @@ DROP TABLE TestGeospatialMethods3_STGeometryType_GEOM_Temp;
DROP TABLE TestGeospatialMethods3_STGeometryType_GEOG_Temp;

DROP DATABASE TestGeospatialMethods3_DB;

139 changes: 139 additions & 0 deletions test/JDBC/expected/Test-spatial-functions-3-vu-prepare.out
Original file line number Diff line number Diff line change
@@ -1,3 +1,142 @@
CREATE DATABASE TestGeospatialParse_DB;

USE TestGeospatialParse_DB;

CREATE TABLE TestGeospatialParse_GeometryTable3 ( ID INT PRIMARY KEY, GeomColumn geometry );
INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (1, geometry::Parse('POINT(3.0 4.0)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (2, geometry::Parse('LINESTRING(0 0, 1 1, 2 2)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (3, geometry::Parse('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (4, geometry::Parse('POINT(1.0 2.0)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (5, geometry::Parse('LINESTRING(0 0, 5 5)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (7, geometry::Parse('LINESTRING(0 0 0, 1 1 1, 2 2 2)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (8, geometry::Parse('LINESTRING M(0 0 0, 1 1 1, 2 2 2)'));
~~ERROR (Code: 33557097)~~

~~ERROR (Message: parse error - invalid geometry)~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (9, geometry::Parse('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (10, geometry::Parse('POINT(1 2 3)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (11, geometry::Parse('POINT M(1 2 3)'));
~~ERROR (Code: 33557097)~~

~~ERROR (Message: parse error - invalid geometry)~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (12, geometry::Parse('POINT(1 2 3 4)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (13, geometry::Parse('POLYGON((0 0 0, 0 1 1, 1 1 1, 1 0 0, 0 0 0))'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (14, geometry::Parse('POLYGON M((0 0 0, 0 1 1, 1 1 1, 1 0 0, 0 0 0))'));
~~ERROR (Code: 33557097)~~

~~ERROR (Message: parse error - invalid geometry)~~

INSERT INTO TestGeospatialParse_GeometryTable3 (ID, GeomColumn) VALUES (15, geometry::Parse('POLYGON((0 0 0 0, 0 1 1 1, 1 1 1 1, 1 0 0 0, 0 0 0 0))'));
~~ROW COUNT: 1~~


CREATE TABLE TestGeospatialParse_GeographyTable3 ( ID INT PRIMARY KEY, GeogColumn geography );
INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (1, geography::Parse('POINT(3.0 4.0)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (2, geography::Parse('LINESTRING(0 0, 1 1, 2 2)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (3, geography::Parse('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (4, geography::Parse('POINT(1.0 2.0)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (5, geography::Parse('LINESTRING(0 0, 5 5)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (6, geography::Parse('LINESTRING(0 0 0, 1 1 1, 2 2 2)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (7, geography::Parse('LINESTRING M(0 0 0, 1 1 1, 2 2 2)'));
~~ERROR (Code: 33557097)~~

~~ERROR (Message: parse error - invalid geometry)~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (8, geography::Parse('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (9, geography::Parse('POINT(1 2 3)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (10, geography::Parse('POINT M(1 2 3)'));
~~ERROR (Code: 33557097)~~

~~ERROR (Message: parse error - invalid geometry)~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (11, geography::Parse('POINT(1 2 3 4)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (12, geography::Parse('POLYGON((0 0 0, 0 1 1, 1 1 1, 1 0 0, 0 0 0))'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (13, geography::Parse('POLYGON M((0 0 0, 0 1 1, 1 1 1, 1 0 0, 0 0 0))'));
~~ERROR (Code: 33557097)~~

~~ERROR (Message: parse error - invalid geometry)~~

INSERT INTO TestGeospatialParse_GeographyTable3 (ID, GeogColumn) VALUES (14, geography::Parse('POLYGON((0 0 0 0, 0 1 1 1, 1 1 1 1, 1 0 0 0, 0 0 0 0))'));
~~ROW COUNT: 1~~



USE MASTER

CREATE TABLE TestGeospatialParse_GeomTemp3 ( ID INT PRIMARY KEY, GeomColumn geometry );
INSERT INTO TestGeospatialParse_GeomTemp3 (ID, GeomColumn) VALUES (1, geometry::Parse('POINT(3.0 4.0)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeomTemp3 (ID, GeomColumn) VALUES (2, geometry::Parse('LINESTRING(0 0, 1 1)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeomTemp3 (ID, GeomColumn) VALUES (3, geometry::Parse('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeomTemp3 (ID, GeomColumn) VALUES (4, geometry::Parse('POINT(47.65100 -22.34900)'));
~~ROW COUNT: 1~~


CREATE TABLE TestGeospatialParse_GeogTemp3 ( ID INT PRIMARY KEY, GeogColumn geography );
INSERT INTO TestGeospatialParse_GeogTemp3 (ID, GeogColumn) VALUES (1, geography::Parse('POINT(3.0 4.0)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeogTemp3 (ID, GeogColumn) VALUES (2, geography::Parse('LINESTRING(0 0, 1 1)'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeogTemp3 (ID, GeogColumn) VALUES (3, geography::Parse('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'));
~~ROW COUNT: 1~~

INSERT INTO TestGeospatialParse_GeogTemp3 (ID, GeogColumn) VALUES (4, geography::Parse('POINT(47.65100 -22.34900)'));
~~ROW COUNT: 1~~


CREATE VIEW TestGeospatialParse_ParseGeomView3 AS SELECT GeomColumn.STAsText() AS ParsedGeom FROM TestGeospatialParse_GeomTemp3 ORDER BY GeomColumn.STX;

CREATE VIEW TestGeospatialParse_ParseGeogView3 AS SELECT GeogColumn.STAsText() AS ParsedGeog FROM TestGeospatialParse_GeogTemp3 ORDER BY GeogColumn.Lat;

CREATE DATABASE TestGeospatialMethods3_DB;

USE TestGeospatialMethods3_DB;
Expand Down
Loading
Loading