Changeset: 1d8b0b6b33e4 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1d8b0b6b33e4 Modified Files: geom/monetdb5/geom.c geom/monetdb5/geom.mal geom/sql/40_geom.sql geom/sql/Tests/All geom/sql/Tests/T17.stable.err geom/sql/Tests/T17.stable.out geom/sql/Tests/T18.stable.err geom/sql/Tests/T18.stable.out Branch: geo Log Message:
startPoint and endPoint done diffs (truncated from 303 to 300 lines): diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c --- a/geom/monetdb5/geom.c +++ b/geom/monetdb5/geom.c @@ -110,6 +110,8 @@ geom_export str wkbBuffer(wkb **out, wkb geom_export str wkbCentroid(wkb **out, wkb **geom); +geom_export str wkbStartPoint(wkb **out, wkb **geom); +geom_export str wkbEndPoint(wkb **out, wkb **geom); bat * geom_prelude(void) @@ -1226,3 +1228,43 @@ wkbCentroid(wkb **out, wkb **geom) return MAL_SUCCEED; } + +str +wkbStartPoint(wkb **out, wkb **geom) +{ + GEOSGeom geosGeometry = wkb2geos(*geom); + + if (!geosGeometry) { + *out = geos2wkb(NULL); + return MAL_SUCCEED; + } + + *out = geos2wkb(GEOSGeomGetStartPoint(geosGeometry)); + + GEOSGeom_destroy(geosGeometry); + + if (GDKerrbuf && GDKerrbuf[0]) + throw(MAL, "geom.StartPoint", "GEOSGeomGetStartPoint failed"); + return MAL_SUCCEED; + +} + +str +wkbEndPoint(wkb **out, wkb **geom) +{ + GEOSGeom geosGeometry = wkb2geos(*geom); + + if (!geosGeometry) { + *out = geos2wkb(NULL); + return MAL_SUCCEED; + } + + *out = geos2wkb(GEOSGeomGetEndPoint(geosGeometry)); + + GEOSGeom_destroy(geosGeometry); + + if (GDKerrbuf && GDKerrbuf[0]) + throw(MAL, "geom.EndPoint", "GEOSGeomGetEndPoint failed"); + return MAL_SUCCEED; + +} diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal --- a/geom/monetdb5/geom.mal +++ b/geom/monetdb5/geom.mal @@ -243,6 +243,14 @@ command Centroid(w:wkb) :wkb address wkbCentroid comment "Returns the centroid of this Geometry."; +command StartPoint(w:wkb) :wkb +address wkbStartPoint +comment "Returns the start point of this Geometry."; + +command EndPoint(w:wkb) :wkb +address wkbEndPoint +comment "Returns the end point of this Geometry."; + command prelude():void address geom_prelude; command epilogue():void address geom_epilogue; 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 @@ -99,3 +99,5 @@ CREATE FUNCTION SymDifference(a Geometry CREATE FUNCTION Centroid(g Geometry) RETURNS Geometry external name geom."Centroid"; +CREATE FUNCTION StartPoint(g Geometry) RETURNS Geometry external name geom."StartPoint"; +CREATE FUNCTION EndPoint(g Geometry) RETURNS Geometry external name geom."EndPoint"; diff --git a/geom/sql/Tests/All b/geom/sql/Tests/All --- a/geom/sql/Tests/All +++ b/geom/sql/Tests/All @@ -34,8 +34,8 @@ T13 T14 T15 T16 -# T17 no such unary operator 'startpoint(linestring)' -# T18 no such unary operator 'endpoint(linestring)' +T17 +T18 # T19 no such unary operator 'asbinary(geometry)' # T20 no such unary operator 'asbinary(geometry)' T21 diff --git a/geom/sql/Tests/T17.stable.err b/geom/sql/Tests/T17.stable.err --- a/geom/sql/Tests/T17.stable.err +++ b/geom/sql/Tests/T17.stable.err @@ -1,11 +1,11 @@ stderr of test 'T17` in directory 'geom/sql` itself: -# 14:29:09 > -# 14:29:09 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=38941" "--set" "mapi_usock=/var/tmp/mtest-20126/.s.monetdb.38941" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/ufs/sjoerd/Monet-devel/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" -# 14:29:09 > +# 16:02:10 > +# 16:02:10 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=35156" "--set" "mapi_usock=/var/tmp/mtest-9436/.s.monetdb.35156" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/ufs/gast730/INSTALL/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" +# 16:02:10 > -# builtin opt gdk_dbpath = /ufs/sjoerd/Monet-devel/var/monetdb5/dbfarm/demo +# builtin opt gdk_dbpath = /ufs/gast730/INSTALL/var/monetdb5/dbfarm/demo # builtin opt gdk_debug = 0 # builtin opt gdk_vmtrim = no # builtin opt monet_prompt = > @@ -17,20 +17,20 @@ stderr of test 'T17` in directory 'geom/ # builtin opt sql_debug = 0 # cmdline opt gdk_nr_threads = 0 # cmdline opt mapi_open = true -# cmdline opt mapi_port = 38941 -# cmdline opt mapi_usock = /var/tmp/mtest-20126/.s.monetdb.38941 +# cmdline opt mapi_port = 35156 +# cmdline opt mapi_usock = /var/tmp/mtest-9436/.s.monetdb.35156 # cmdline opt monet_prompt = # cmdline opt mal_listing = 2 -# cmdline opt gdk_dbpath = /ufs/sjoerd/Monet-devel/var/MonetDB/mTests_geom_sql +# cmdline opt gdk_dbpath = /ufs/gast730/INSTALL/var/MonetDB/mTests_geom_sql # cmdline opt mal_listing = 0 # cmdline opt gdk_debug = 536870922 -# 14:29:09 > -# 14:29:09 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-20126" "--port=38941" -# 14:29:09 > +# 16:02:14 > +# 16:02:14 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-9436" "--port=35156" +# 16:02:14 > -# 14:29:09 > -# 14:29:09 > "Done." -# 14:29:09 > +# 16:02:14 > +# 16:02:14 > "Done." +# 16:02:14 > diff --git a/geom/sql/Tests/T17.stable.out b/geom/sql/Tests/T17.stable.out --- a/geom/sql/Tests/T17.stable.out +++ b/geom/sql/Tests/T17.stable.out @@ -1,9 +1,9 @@ stdout of test 'T17` in directory 'geom/sql` itself: -# 07:38:56 > -# 07:38:56 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=37052" "--set" "mapi_usock=/var/tmp/mtest-3079/.s.monetdb.37052" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/export/scratch1/mk/current//Linux/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" -# 07:38:56 > +# 16:02:10 > +# 16:02:10 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=35156" "--set" "mapi_usock=/var/tmp/mtest-9436/.s.monetdb.35156" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/ufs/gast730/INSTALL/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" +# 16:02:10 > # MonetDB 5 server v11.18.0 # This is an unreleased version @@ -13,26 +13,28 @@ stdout of test 'T17` in directory 'geom/ # Copyright (c) 1993-July 2008 CWI. # Copyright (c) August 2008-2014 MonetDB B.V., all rights reserved # Visit http://www.monetdb.org/ for further information -# Listening for connection requests on mapi:monetdb://vienna.ins.cwi.nl:37052/ -# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-3079/.s.monetdb.37052 +# Listening for connection requests on mapi:monetdb://athens.ins.cwi.nl:35156/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-9436/.s.monetdb.35156 # MonetDB/GIS module loaded # MonetDB/JAQL module loaded # MonetDB/SQL module loaded Ready. +#WARNING To speedup geom.StartPoint a bulk operator implementation is needed +#WARNING To speedup geom.AsText a bulk operator implementation is needed -# 07:38:56 > -# 07:38:56 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-3079" "--port=37052" -# 07:38:56 > +# 16:02:14 > +# 16:02:14 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-9436" "--port=35156" +# 16:02:14 > #SELECT AsText(StartPoint(centerline)) FROM road_segments WHERE fid = 102; % sys.L # table_name -% intersection_centerline # name +% startpoint_centerline # name % clob # type % 48 # length [ "\"POINT (0.0000000000000000 18.0000000000000000)\"" ] -# 07:38:56 > -# 07:38:56 > "Done." -# 07:38:56 > +# 16:02:14 > +# 16:02:14 > "Done." +# 16:02:14 > diff --git a/geom/sql/Tests/T18.stable.err b/geom/sql/Tests/T18.stable.err --- a/geom/sql/Tests/T18.stable.err +++ b/geom/sql/Tests/T18.stable.err @@ -1,11 +1,11 @@ stderr of test 'T18` in directory 'geom/sql` itself: -# 14:29:09 > -# 14:29:09 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=38941" "--set" "mapi_usock=/var/tmp/mtest-20126/.s.monetdb.38941" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/ufs/sjoerd/Monet-devel/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" -# 14:29:09 > +# 16:04:25 > +# 16:04:25 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32119" "--set" "mapi_usock=/var/tmp/mtest-10183/.s.monetdb.32119" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/ufs/gast730/INSTALL/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" +# 16:04:25 > -# builtin opt gdk_dbpath = /ufs/sjoerd/Monet-devel/var/monetdb5/dbfarm/demo +# builtin opt gdk_dbpath = /ufs/gast730/INSTALL/var/monetdb5/dbfarm/demo # builtin opt gdk_debug = 0 # builtin opt gdk_vmtrim = no # builtin opt monet_prompt = > @@ -17,20 +17,20 @@ stderr of test 'T18` in directory 'geom/ # builtin opt sql_debug = 0 # cmdline opt gdk_nr_threads = 0 # cmdline opt mapi_open = true -# cmdline opt mapi_port = 38941 -# cmdline opt mapi_usock = /var/tmp/mtest-20126/.s.monetdb.38941 +# cmdline opt mapi_port = 32119 +# cmdline opt mapi_usock = /var/tmp/mtest-10183/.s.monetdb.32119 # cmdline opt monet_prompt = # cmdline opt mal_listing = 2 -# cmdline opt gdk_dbpath = /ufs/sjoerd/Monet-devel/var/MonetDB/mTests_geom_sql +# cmdline opt gdk_dbpath = /ufs/gast730/INSTALL/var/MonetDB/mTests_geom_sql # cmdline opt mal_listing = 0 # cmdline opt gdk_debug = 536870922 -# 14:29:09 > -# 14:29:09 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-20126" "--port=38941" -# 14:29:09 > +# 16:04:30 > +# 16:04:30 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-10183" "--port=32119" +# 16:04:30 > -# 14:29:09 > -# 14:29:09 > "Done." -# 14:29:09 > +# 16:04:30 > +# 16:04:30 > "Done." +# 16:04:30 > diff --git a/geom/sql/Tests/T18.stable.out b/geom/sql/Tests/T18.stable.out --- a/geom/sql/Tests/T18.stable.out +++ b/geom/sql/Tests/T18.stable.out @@ -1,9 +1,9 @@ stdout of test 'T18` in directory 'geom/sql` itself: -# 07:38:56 > -# 07:38:56 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=37052" "--set" "mapi_usock=/var/tmp/mtest-3079/.s.monetdb.37052" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/export/scratch1/mk/current//Linux/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" -# 07:38:56 > +# 16:04:25 > +# 16:04:25 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32119" "--set" "mapi_usock=/var/tmp/mtest-10183/.s.monetdb.32119" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/ufs/gast730/INSTALL/var/MonetDB/mTests_geom_sql" "--set" "mal_listing=0" +# 16:04:25 > # MonetDB 5 server v11.18.0 # This is an unreleased version @@ -13,26 +13,28 @@ stdout of test 'T18` in directory 'geom/ # Copyright (c) 1993-July 2008 CWI. # Copyright (c) August 2008-2014 MonetDB B.V., all rights reserved # Visit http://www.monetdb.org/ for further information -# Listening for connection requests on mapi:monetdb://vienna.ins.cwi.nl:37052/ -# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-3079/.s.monetdb.37052 +# Listening for connection requests on mapi:monetdb://athens.ins.cwi.nl:32119/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-10183/.s.monetdb.32119 # MonetDB/GIS module loaded # MonetDB/JAQL module loaded # MonetDB/SQL module loaded Ready. +#WARNING To speedup geom.EndPoint a bulk operator implementation is needed +#WARNING To speedup geom.AsText a bulk operator implementation is needed -# 07:38:56 > -# 07:38:56 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-3079" "--port=37052" -# 07:38:56 > +# 16:04:30 > +# 16:04:30 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-10183" "--port=32119" +# 16:04:30 > #SELECT AsText(EndPoint(centerline)) FROM road_segments WHERE fid = 102; % sys.L # table_name -% intersection_centerline # name +% endpoint_centerline # name % clob # type % 49 # length [ "\"POINT (44.0000000000000000 31.0000000000000000)\"" ] -# 07:38:56 > -# 07:38:56 > "Done." -# 07:38:56 > +# 16:04:30 > _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list