Changeset: 5b5cd607e01e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b5cd607e01e
Modified Files:
        geom/monetdb5/geom.c
        geom/monetdb5/geom.mal
        geom/sql/40_geom.sql
Branch: geo
Log Message:

made functions that parse the information about the z and m 'coordinates' 
stored in the columns table. Also made the geometry_columns view


diffs (221 lines):

diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -44,8 +44,15 @@
 #define geom_export extern
 #endif
 
+
+#define GEOMETRY_HAS_Z(info)(info & 0x02)
+#define GEOMETRY_HAS_M(info)(info & 0x01)
+
 int TYPE_mbr;
 
+geom_export void geoHasZ(int* res, int* info);
+geom_export void geoHasM(int* res, int* info);
+
 geom_export bat *geom_prelude(void);
 geom_export void geom_epilogue(void);
 
@@ -59,6 +66,20 @@ geom_export int wkbTOSTR(char **dst, int
 geom_export str wkbFromText(wkb **w, str *wkt, int srid, int *tpe);
 geom_export str wkbAsText(str *r, wkb **w);
 
+
+
+/*check if the geometry has z coordinate*/
+void geoHasZ(int* res, int* info) {
+       if(GEOMETRY_HAS_Z(*info)) *res=1;
+       else *res=0;
+
+}
+/*check if the geometry has m coordinate*/
+void geoHasM(int* res, int* info) {
+       if(GEOMETRY_HAS_M(*info)) *res=1;
+       else *res=0;
+}
+
 /* initialise geos */
 bat *geom_prelude(void) {
        libgeom_init();
diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal
--- a/geom/monetdb5/geom.mal
+++ b/geom/monetdb5/geom.mal
@@ -49,6 +49,12 @@ command FromText{unsafe}(wkt:str, srid:i
 
 module geom;
 
+command hasZ{unsafe}(flags:int) :int address geoHasZ
+comment "returns 1 if the geometry has z coordinate";
+
+command hasM{unsafe}(flags:int) :int address geoHasM
+comment "returns 1 if the geometry has m coordinate";
+
 #Geometry Constructors
 function PointFromText{unsafe}(wkt:str, srid:int) :wkb; 
        x := wkb.FromText(wkt,srid,1);
diff --git a/geom/sql/40_geom.sql b/geom/sql/40_geom.sql
--- a/geom/sql/40_geom.sql
+++ b/geom/sql/40_geom.sql
@@ -16,21 +16,30 @@
 -- All Rights Reserved.
 
 -- make sure you load the geom module before loading this sql module
-CREATE TYPE Point EXTERNAL NAME wkb;
---//CREATE TYPE Curve EXTERNAL NAME wkb;
-CREATE TYPE LineString EXTERNAL NAME wkb;
---//CREATE TYPE Surface EXTERNAL NAME wkb;
-CREATE TYPE Polygon EXTERNAL NAME wkb;
-CREATE TYPE MultiPoint EXTERNAL NAME wkb;
---//CREATE TYPE MultiCurve EXTERNAL NAME wkb;
-CREATE TYPE MultiLineString EXTERNAL NAME wkb;
---//CREATE TYPE MultiSurface EXTERNAL NAME wkb;
-CREATE TYPE MultiPolygon EXTERNAL NAME wkb;
+
+--CREATE TYPE Point EXTERNAL NAME wkb;
+--CREATE TYPE Curve EXTERNAL NAME wkb;
+--CREATE TYPE LineString EXTERNAL NAME wkb;
+--CREATE TYPE Surface EXTERNAL NAME wkb;
+--CREATE TYPE Polygon EXTERNAL NAME wkb;
+
+--CREATE TYPE MultiPoint EXTERNAL NAME wkb;
+--CREATE TYPE MultiCurve EXTERNAL NAME wkb;
+--CREATE TYPE MultiLineString EXTERNAL NAME wkb;
+--CREATE TYPE MultiSurface EXTERNAL NAME wkb;
+--CREATE TYPE MultiPolygon EXTERNAL NAME wkb;
+
 CREATE TYPE Geometry EXTERNAL NAME wkb;
-CREATE TYPE GeomCollection EXTERNAL NAME wkb;
+CREATE TYPE GeometrySubtype EXTERNAL NAME wkb;
+
+--CREATE TYPE GeomCollection EXTERNAL NAME wkb;
 
 CREATE TYPE mbr EXTERNAL NAME mbr;
 
+
+CREATE FUNCTION Has_Z(info integer) RETURNS integer EXTERNAL NAME geom."hasZ";
+CREATE FUNCTION Has_M(info integer) RETURNS integer EXTERNAL NAME geom."hasM";
+
 -- currently we only use mbr instead of
 -- Envelope():Geometry
 -- as that returns Geometry objects, and we prefer the explicit mbr's
@@ -42,19 +51,19 @@ CREATE TYPE mbr EXTERNAL NAME mbr;
 CREATE FUNCTION ST_AsText(g Geometry) RETURNS string external name 
geom."AsText";
 
 -- Geometry Constructors
-CREATE FUNCTION ST_GeomFromText(wkt string, srid int) RETURNS Geometry 
external name geom."GeomFromText";
-CREATE FUNCTION ST_GeometryFromText(wkt string, srid int) RETURNS Geometry 
external name geom."GeomFromText";
-CREATE FUNCTION ST_PointFromText(wkt string, srid int) RETURNS Geometry 
external name geom."PointFromText"; 
-CREATE FUNCTION ST_LineFromText(wkt string, srid int) RETURNS Geometry 
external name geom."LineFromText";
-CREATE FUNCTION ST_PolygonFromText(wkt string, srid int) RETURNS Geometry 
external name geom."PolygonFromText";
-CREATE FUNCTION ST_MPointFromText(wkt string, srid int) RETURNS Geometry 
external name geom."MPointFromText";
-CREATE FUNCTION ST_MLineFromText(wkt string, srid int) RETURNS Geometry 
external name geom."MLineFromText";
-CREATE FUNCTION ST_MPolyFromText(wkt string, srid int) RETURNS Geometry 
external name geom."MPolyFromText";
-CREATE FUNCTION ST_GeomCollFromText(wkt string, srid int) RETURNS Geometry 
external name geom."GeomCollFromText";
+CREATE FUNCTION ST_GeomFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."GeomFromText";
+CREATE FUNCTION ST_GeometryFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."GeomFromText";
+CREATE FUNCTION ST_PointFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."PointFromText"; 
+CREATE FUNCTION ST_LineFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."LineFromText";
+CREATE FUNCTION ST_PolygonFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."PolygonFromText";
+CREATE FUNCTION ST_MPointFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."MPointFromText";
+CREATE FUNCTION ST_MLineFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."MLineFromText";
+CREATE FUNCTION ST_MPolyFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."MPolyFromText";
+CREATE FUNCTION ST_GeomCollFromText(wkt string, srid integer) RETURNS Geometry 
external name geom."GeomCollFromText";
 
 CREATE FUNCTION ST_GeomFromText(wkt string) RETURNS Geometry external name 
geom."GeomFromText";
 CREATE FUNCTION ST_GeometryFromText(wkt string) RETURNS Geometry external name 
geom."GeomFromText";
-CREATE FUNCTION ST_PointFromText(wkt string) RETURNS Geometry external name 
geom."PointFromText";
+CREATE FUNCTION ST_PointFromText(wkt string) RETURNS Geometry external name 
geom."PointFromText"; 
 CREATE FUNCTION ST_LineFromText(wkt string) RETURNS Geometry external name 
geom."LineFromText";
 CREATE FUNCTION ST_PolygonFromText(wkt string) RETURNS Geometry external name 
geom."PolygonFromText";
 CREATE FUNCTION ST_MPointFromText(wkt string) RETURNS Geometry external name 
geom."MPointFromText";
@@ -62,21 +71,26 @@ CREATE FUNCTION ST_MLineFromText(wkt str
 CREATE FUNCTION ST_MPolyFromText(wkt string) RETURNS Geometry external name 
geom."MPolyFromText";
 CREATE FUNCTION ST_GeomCollFromText(wkt string) RETURNS Geometry external name 
geom."GeomCollFromText";
 
+
 --CREATE FUNCTION ST_BdPolyFromText(wkt string, srid SMALLINT) RETURNS 
Geometry external name geom."BdPolyFromText"; 
 --CREATE FUNCTION ST_BdMPolyFromText(wkt string, srid SMALLINT) RETURNS 
Geometry external name geom."BdMPolyFromText";
 --> CREATE FUNCTION ST_Box2dFromGeoHash() RETURNS mbr external name 
geom."Box2dFromGeoHash";
 --> CREATE FUNCTION ST_GeogFromText(wkt string) RETURNS Geography external 
name geom."GeographyFromText";
 --> CREATE FUNCTION ST_GeographyFromText(wkt string) RETURNS Geography 
external name geom."GeographyFromText";
 --> CREATE FUNCTION ST_GeogFromWKB(wkb_arr byte[]) RETURNS Geography external 
name geom."GeogFromWKB";  
+--CREATE FUNCTION ST_GeomCollFromText(wkt string) RETURNS Geometry external 
name geom."GeomCollFromText";
 --CREATE FUNCTION ST_GeomFromEWKB
 --CREATE FUNCTION ST_GeomFromEWKT
+--CREATE FUNCTION ST_GeometryFromText(wkt string) RETURNS Geometry external 
name geom."GeomFromText";
 --CREATE FUNCTION ST_GeomFromGML
 --CREATE FUNCTION ST_GeomFromGeoJSON
 --CREATE FUNCTION ST_GeomFromKML
 --CREATE FUNCTION ST_GMLToSQL
+--CREATE FUNCTION ST_GeomFromText(wkt string) RETURNS Geometry external name 
geom."GeomFromText";
 --CREATE FUNCTION ST_GeomFromWKB(wkb_arr byte[], srid smallint) RETURNS 
Geometry external name geom."GeomFromWKB";
 --CREATE FUNCTION ST_GeomFromWKB(wkb_arr byte[]) RETURNS Geometry external 
name geom."GeomFromWKB";
 --CREATE FUNCTION ST_LineFromMultiPoint(pointGeom Geometry) RETURNS Geometry 
external name geom."LineFromMultiPoint";
+--CREATE FUNCTION ST_LineFromText(wkt string) RETURNS Geometry external name 
geom."LineFromText";
 --CREATE FUNCTION ST_LineFromWKB(wkb_arr byte[], srid smallint) RETURNS 
Geometry external name geom."LineFromWKB";
 --CREATE FUNCTION ST_LineFromWKB(wkb_arr byte[]) RETURNS Geometry external 
name geom."LineFromWKB";
 --CREATE FUNCTION ST_LinestringFromWKB(wkb_arr byte[], srid smallint) RETURNS 
Geometry external name geom."LinestringFromWKB";
@@ -93,13 +107,27 @@ CREATE FUNCTION ST_GeomCollFromText(wkt 
 --CREATE FUNCTION ST_MakePoint(x double, y double, z double) RETURNS Geometry 
external name geom."MakePoint";
 --CREATE FUNCTION ST_MakePoint(x double, y double, z double, m double) RETURNS 
Geometry external name geom."MakePoint";
 --CREATE FUNCTION ST_MakePointM(x double, y double, m double) RETURNS Geometry 
external name geom."MakePointM";
+--CREATE FUNCTION ST_MLineFromText(wkt string) RETURNS Geometry external name 
geom."MLineFromText";
+--CREATE FUNCTION ST_MPointFromText(wkt string) RETURNS Geometry external name 
geom."MPointFromText";
+--CREATE FUNCTION ST_MPolyFromText(wkt string) RETURNS Geometry external name 
geom."MPolyFromText";
 --CREATE FUNCTION ST_Point(x double, y double) RETURNS Geometry external name 
geom."Point";
 --CREATE FUNCTION ST_PointFromGeoHash
+--CREATE FUNCTION ST_PointFromText(wkt string) RETURNS Geometry external name 
geom."PointFromText";
 --CREATE FUNCTION ST_PointFromWKB(wkb_arr byte[], srid smallint) RETURNS 
Geometry external name geom."PointFromWKB";
 --CREATE FUNCTION ST_PointFromWKB(wkb_arr byte[]) RETURNS Geometry external 
name geom."PointFromWKB";
 --CREATE FUNCTION ST_Polygon(linestringGeom Geometry, srid SMALLINT) RETURNS 
Geometry external name geom."Polygon";
 --CREATE FUNCTION ST_WKBToSQL(wkb_arr byte[]) RETURNS Geometry external name 
geom."GeomFromWKB";
 --CREATE FUNCTION ST_WKTToSQL(wkt string) RETURNS Geometry external name 
geom."GeomFromText";
+--//CREATE FUNCTION GeomFromText(wkt string, srid SMALLINT) RETURNS Geometry 
external name geom."GeomFromText";
+----CREATE FUNCTION PointFromText(wkt string, srid SMALLINT) RETURNS Point 
external name geom."PointFromText";
+--//CREATE FUNCTION LineFromText(wkt string, srid SMALLINT) RETURNS LineString 
external name geom."LineFromText";
+--//CREATE FUNCTION PolyFromText(wkt string, srid SMALLINT) RETURNS Polygon 
external name geom."PolyFromText";
+--//CREATE FUNCTION MPointFromText(wkt string, srid SMALLINT) RETURNS 
MultiPoint external name geom."MultiPointFromText";
+--//CREATE FUNCTION MLineFromText(wkt string, srid SMALLINT) RETURNS 
MultiLineString external name geom."MultiLineFromText";
+--//CREATE FUNCTION MPolyFromText(wkt string, srid SMALLINT) RETURNS 
MultiPolygon external name geom."MultiPolyFromText";
+--//CREATE FUNCTION GeomCollectionFromText(wkt string, srid SMALLINT) RETURNS 
MultiPolygon external name geom."GeomCollectionFromText";
+-- alias
+--CREATE FUNCTION PolygonFromText(wkt string, srid SMALLINT) RETURNS Polygon 
external name geom."PolyFromText";
 
 
 
@@ -167,27 +195,25 @@ CREATE FUNCTION ST_GeomCollFromText(wkt 
 --f_geometry_column ==> 
 --coord_dimension ==>
 --srid ==>
-
 create view geometry_columns as
        select e.value as f_table_catalog,
                s.name as f_table_schema,
-               y.f_table_name, y.f_geometry_column
+               y.f_table_name, y.f_geometry_column, y.coord_dimension, y.srid
        from schemas s, environment e, (
                select t.schema_id,
                        t.name as f_table_name,
-                       x.name as f_geometry_column
+                       x.name as f_geometry_column,
+                       has_z(info)+has_m(info)+2 as coord_dimension,
+                       srid
                from tables t, (
-                       select name, table_id
+                       select name, table_id, type_digits AS info, type_scale 
AS srid
                        from columns
-                       where type in (
-                                       select distinct sqlname
-                                       from types
-                                       where systemname='wkb'
-                                       )
+                       where type in ( select distinct sqlname from types 
where systemname='wkb')
                        ) as x
                where t.id=x.table_id
                ) y
        where y.schema_id=s.id and e.name='gdk_dbname';
+
 --CREATE TABLE geometry_columns (
 --     f_catalog_name CHARACTER LARGE OBJECT,
 --        f_table_schema CHARACTER LARGE OBJECT,
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to