sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jso...@apache.org
Subject [sis] 01/03: SQL/MM : cleaning code
Date Wed, 27 Nov 2019 11:23:36 GMT
This is an automated email from the ASF dual-hosted git repository.

jsorel pushed a commit to branch feat/sqlmm
in repository https://gitbox.apache.org/repos/asf/sis.git

commit fb76a3d0cc7d7ebd0e108b1071883fb77c027389
Author: jsorel <johann.sorel@geomatys.com>
AuthorDate: Wed Nov 27 10:19:30 2019 +0100

    SQL/MM : cleaning code
---
 .../sis/internal/filter/FilterGeometryUtils.java   |   2 -
 .../apache/sis/internal/filter/sqlmm/SQLMM.java    | 249 ++++++++++++++++++++-
 .../apache/sis/internal/filter/sqlmm/ST_Point.java |   3 +-
 .../sis/internal/filter/sqlmm/ST_Transform.java    |   8 +
 ...d.java => AbstractAccessorSpatialFunction.java} |   4 +-
 ...hod.java => AbstractBinarySpatialFunction.java} |   6 +-
 .../filter/sqlmm/todo/AbstractSpatialFunction.java |  32 ++-
 .../filter/sqlmm/todo/AbstractSpatialMethod.java   |  90 --------
 .../sqlmm/todo/CurvePolygon_ST_ExteriorRing.java   |   2 +-
 .../sqlmm/todo/CurvePolygon_ST_InteriorRingN.java  |   2 +-
 .../todo/CurvePolygon_ST_NumInteriorRings.java     |   2 +-
 .../filter/sqlmm/todo/Curve_ST_EndPoint.java       |   2 +-
 .../filter/sqlmm/todo/Curve_ST_IsClosed.java       |   2 +-
 .../filter/sqlmm/todo/Curve_ST_IsRing.java         |   2 +-
 .../filter/sqlmm/todo/Curve_ST_Length.java         |   2 +-
 .../filter/sqlmm/todo/Curve_ST_StartPoint.java     |   2 +-
 .../filter/sqlmm/todo/GeomColl_ST_GeometryN.java   |   2 +-
 .../sqlmm/todo/GeomColl_ST_NumGeometries.java      |   2 +-
 .../filter/sqlmm/todo/Line_ST_NumPoints.java       |   2 +-
 .../internal/filter/sqlmm/todo/Line_ST_PointN.java |   4 +-
 .../filter/sqlmm/todo/Point_ST_ExplicitPoint.java  |   2 +-
 .../sis/internal/filter/sqlmm/todo/Point_ST_X.java |   2 +-
 .../sis/internal/filter/sqlmm/todo/Point_ST_Y.java |   2 +-
 .../sis/internal/filter/sqlmm/todo/Point_ST_Z.java |   2 +-
 .../internal/filter/sqlmm/todo/ST_AsBinary.java    |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_AsGML.java   |  33 +--
 .../sis/internal/filter/sqlmm/todo/ST_AsText.java  |   2 +-
 .../internal/filter/sqlmm/todo/ST_Boundary.java    |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_Buffer.java  |   2 +-
 .../internal/filter/sqlmm/todo/ST_Contains.java    |   2 +-
 .../internal/filter/sqlmm/todo/ST_ConvexHull.java  |   2 +-
 .../internal/filter/sqlmm/todo/ST_CoordDim.java    |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_Crosses.java |   2 +-
 .../internal/filter/sqlmm/todo/ST_Difference.java  |   2 +-
 .../internal/filter/sqlmm/todo/ST_Dimension.java   |   2 +-
 .../internal/filter/sqlmm/todo/ST_Disjoint.java    |   2 +-
 .../internal/filter/sqlmm/todo/ST_Distance.java    |   2 +-
 .../internal/filter/sqlmm/todo/ST_Envelope.java    |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_Equals.java  |   2 +-
 .../filter/sqlmm/todo/ST_GeometryType.java         |   2 +-
 .../filter/sqlmm/todo/ST_Intersection.java         |   2 +-
 .../internal/filter/sqlmm/todo/ST_Intersects.java  |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_Is3D.java    |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_IsEmpty.java |   2 +-
 .../internal/filter/sqlmm/todo/ST_IsSimple.java    |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_IsValid.java |   2 +-
 .../internal/filter/sqlmm/todo/ST_Overlaps.java    |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_Point.java   |   7 +-
 .../sis/internal/filter/sqlmm/todo/ST_Relate.java  |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_SRID.java    |   2 +-
 .../filter/sqlmm/todo/ST_SymDifference.java        |   2 +-
 .../internal/filter/sqlmm/todo/ST_ToGeomColl.java  |   2 +-
 .../filter/sqlmm/todo/ST_ToLineString.java         |   2 +-
 .../internal/filter/sqlmm/todo/ST_ToMultiLine.java |   2 +-
 .../filter/sqlmm/todo/ST_ToMultiPoint.java         |   2 +-
 .../filter/sqlmm/todo/ST_ToMultiPolygon.java       |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_ToPoint.java |   2 +-
 .../internal/filter/sqlmm/todo/ST_ToPolygon.java   |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_Touches.java |   2 +-
 .../internal/filter/sqlmm/todo/ST_Transform.java   |  80 -------
 .../sis/internal/filter/sqlmm/todo/ST_Union.java   |   2 +-
 .../sis/internal/filter/sqlmm/todo/ST_Within.java  |   2 +-
 .../internal/filter/sqlmm/todo/ST_XFromBinary.java |  90 ++------
 .../internal/filter/sqlmm/todo/ST_XFromGML.java    |  77 ++-----
 .../internal/filter/sqlmm/todo/ST_XFromText.java   |  91 ++------
 .../filter/sqlmm/todo/SpatialFunctionFactory.java  | 123 ----------
 .../filter/sqlmm/todo/SpatialMethodFactory.java    | 150 -------------
 .../filter/sqlmm/todo/Surface_ST_Area.java         |   2 +-
 .../filter/sqlmm/todo/Surface_ST_Centroid.java     |   2 +-
 .../filter/sqlmm/todo/Surface_ST_Perimeter.java    |   2 +-
 .../sqlmm/todo/Surface_ST_PointOnSurface.java      |   2 +-
 71 files changed, 406 insertions(+), 751 deletions(-)

diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/FilterGeometryUtils.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/FilterGeometryUtils.java
index c78ac33..0577685 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/FilterGeometryUtils.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/FilterGeometryUtils.java
@@ -16,8 +16,6 @@
  */
 package org.apache.sis.internal.filter;
 
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.measure.Unit;
 import org.apache.sis.coverage.grid.GridCoverage;
 import org.apache.sis.filter.CRSMatching;
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/SQLMM.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/SQLMM.java
index 171506c..ef9a6d3 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/SQLMM.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/SQLMM.java
@@ -23,8 +23,69 @@ import org.opengis.filter.expression.Function;
 import org.opengis.util.FactoryException;
 import org.apache.sis.internal.feature.FunctionRegister;
 import org.apache.sis.internal.feature.Resources;
+import org.apache.sis.internal.filter.sqlmm.todo.CurvePolygon_ST_ExteriorRing;
+import org.apache.sis.internal.filter.sqlmm.todo.CurvePolygon_ST_InteriorRingN;
+import org.apache.sis.internal.filter.sqlmm.todo.CurvePolygon_ST_NumInteriorRings;
+import org.apache.sis.internal.filter.sqlmm.todo.Curve_ST_EndPoint;
+import org.apache.sis.internal.filter.sqlmm.todo.Curve_ST_IsClosed;
+import org.apache.sis.internal.filter.sqlmm.todo.Curve_ST_IsRing;
+import org.apache.sis.internal.filter.sqlmm.todo.Curve_ST_Length;
+import org.apache.sis.internal.filter.sqlmm.todo.Curve_ST_StartPoint;
+import org.apache.sis.internal.filter.sqlmm.todo.GeomColl_ST_GeometryN;
+import org.apache.sis.internal.filter.sqlmm.todo.GeomColl_ST_NumGeometries;
+import org.apache.sis.internal.filter.sqlmm.todo.Line_ST_NumPoints;
+import org.apache.sis.internal.filter.sqlmm.todo.Line_ST_PointN;
+import org.apache.sis.internal.filter.sqlmm.todo.Point_ST_ExplicitPoint;
+import org.apache.sis.internal.filter.sqlmm.todo.Point_ST_X;
+import org.apache.sis.internal.filter.sqlmm.todo.Point_ST_Y;
+import org.apache.sis.internal.filter.sqlmm.todo.Point_ST_Z;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_AsBinary;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_AsGML;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_AsText;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Boundary;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Contains;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ConvexHull;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_CoordDim;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Crosses;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Difference;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Dimension;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Disjoint;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Distance;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Equals;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_GeomCollection;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_GeometryType;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Intersection;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Intersects;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Is3D;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_IsEmpty;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_IsSimple;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_IsValid;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_MultiLineString;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_MultiPoint;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_MultiPolygon;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Overlaps;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Polygon;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Relate;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_SRID;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_SymDifference;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ToGeomColl;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ToLineString;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ToMultiLine;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ToMultiPoint;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ToMultiPolygon;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ToPoint;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_ToPolygon;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Touches;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Union;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_Within;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_XFromBinary;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_XFromGML;
+import org.apache.sis.internal.filter.sqlmm.todo.ST_XFromText;
+import org.apache.sis.internal.filter.sqlmm.todo.Surface_ST_Area;
+import org.apache.sis.internal.filter.sqlmm.todo.Surface_ST_Centroid;
+import org.apache.sis.internal.filter.sqlmm.todo.Surface_ST_Perimeter;
+import org.apache.sis.internal.filter.sqlmm.todo.Surface_ST_PointOnSurface;
 import org.apache.sis.util.ArgumentChecks;
-import org.locationtech.jts.geom.GeometryFactory;
 
 
 /**
@@ -42,11 +103,6 @@ import org.locationtech.jts.geom.GeometryFactory;
 public final class SQLMM implements FunctionRegister {
 
     /**
-     * JTS factory used by multiple functions.
-     */
-    static final GeometryFactory GF = new GeometryFactory();
-
-    /**
      * Creates the default register.
      */
     public SQLMM() {
@@ -66,14 +122,102 @@ public final class SQLMM implements FunctionRegister {
     @Override
     public Collection<String> getNames() {
         return Arrays.asList(
+                CurvePolygon_ST_ExteriorRing.NAME,
+                CurvePolygon_ST_InteriorRingN.NAME,
+                CurvePolygon_ST_NumInteriorRings.NAME,
+                Curve_ST_EndPoint.NAME,
+                Curve_ST_IsClosed.NAME,
+                Curve_ST_IsRing.NAME,
+                Curve_ST_Length.NAME,
+                Curve_ST_StartPoint.NAME,
+                GeomColl_ST_GeometryN.NAME,
+                GeomColl_ST_NumGeometries.NAME,
+                Line_ST_NumPoints.NAME,
+                Line_ST_PointN.NAME,
+                Point_ST_ExplicitPoint.NAME,
+                Point_ST_X.NAME,
+                Point_ST_Y.NAME,
+                Point_ST_Z.NAME,
+                ST_AsBinary.NAME,
+                ST_AsGML.NAME,
+                ST_AsText.NAME,
+                ST_Boundary.NAME,
                 ST_Buffer.NAME,
                 ST_Centroid.NAME,
+                ST_Contains.NAME,
+                ST_ConvexHull.NAME,
+                ST_CoordDim.NAME,
+                ST_Crosses.NAME,
+                ST_Difference.NAME,
+                ST_Dimension.NAME,
+                ST_Disjoint.NAME,
+                ST_Distance.NAME,
                 ST_Envelope.NAME,
-                ST_Point.NAME,
+                ST_Equals.NAME,
+                ST_GeomCollection.NAME,
+                ST_GeometryType.NAME,
+                ST_Intersection.NAME,
+                ST_Intersects.NAME,
+                ST_Is3D.NAME,
+                ST_IsEmpty.NAME,
+                ST_IsSimple.NAME,
+                ST_IsValid.NAME,
                 ST_LineString.NAME,
+                ST_MultiLineString.NAME,
+                ST_MultiPoint.NAME,
+                ST_MultiPolygon.NAME,
+                ST_Overlaps.NAME,
+                ST_Point.NAME,
+                ST_Polygon.NAME,
+                ST_Relate.NAME,
                 ST_Simplify.NAME,
                 ST_SimplifyPreserveTopology.NAME,
-                ST_Transform.NAME);
+                ST_SRID.NAME,
+                ST_SymDifference.NAME,
+                ST_ToGeomColl.NAME,
+                ST_ToLineString.NAME,
+                ST_ToMultiLine.NAME,
+                ST_ToMultiPoint.NAME,
+                ST_ToMultiPolygon.NAME,
+                ST_ToPoint.NAME,
+                ST_ToPolygon.NAME,
+                ST_Touches.NAME,
+                ST_Transform.NAME,
+                ST_Union.NAME,
+                ST_Within.NAME,
+                ST_XFromBinary.BdMPoly.NAME,
+                ST_XFromBinary.BdPoly.NAME,
+                ST_XFromBinary.GeomColl.NAME,
+                ST_XFromBinary.Geom.NAME,
+                ST_XFromBinary.Line.NAME,
+                ST_XFromBinary.MLine.NAME,
+                ST_XFromBinary.MPoint.NAME,
+                ST_XFromBinary.MPoly.NAME,
+                ST_XFromBinary.Point.NAME,
+                ST_XFromBinary.Poly.NAME,
+                ST_XFromGML.GeomColl.NAME,
+                ST_XFromGML.Geom.NAME,
+                ST_XFromGML.Line.NAME,
+                ST_XFromGML.MLine.NAME,
+                ST_XFromGML.MPoint.NAME,
+                ST_XFromGML.MPoly.NAME,
+                ST_XFromGML.Point.NAME,
+                ST_XFromGML.Poly.NAME,
+                ST_XFromText.BdMPoly.NAME,
+                ST_XFromText.BdPoly.NAME,
+                ST_XFromText.GeomColl.NAME,
+                ST_XFromText.Geom.NAME,
+                ST_XFromText.Line.NAME,
+                ST_XFromText.MLine.NAME,
+                ST_XFromText.MPoint.NAME,
+                ST_XFromText.MPoly.NAME,
+                ST_XFromText.Point.NAME,
+                ST_XFromText.Poly.NAME,
+                Surface_ST_Area.NAME,
+                Surface_ST_Centroid.NAME,
+                Surface_ST_Perimeter.NAME,
+                Surface_ST_PointOnSurface.NAME
+        );
     }
 
     /**
@@ -94,14 +238,101 @@ public final class SQLMM implements FunctionRegister {
         }
         try {
             switch (name) {
+                case CurvePolygon_ST_ExteriorRing.NAME:                    return new CurvePolygon_ST_ExteriorRing(parameters);
+                case CurvePolygon_ST_InteriorRingN.NAME:                    return new CurvePolygon_ST_InteriorRingN(parameters);
+                case CurvePolygon_ST_NumInteriorRings.NAME:                    return new CurvePolygon_ST_NumInteriorRings(parameters);
+                case Curve_ST_EndPoint.NAME:                    return new Curve_ST_EndPoint(parameters);
+                case Curve_ST_IsClosed.NAME:                    return new Curve_ST_IsClosed(parameters);
+                case Curve_ST_IsRing.NAME:                    return new Curve_ST_IsRing(parameters);
+                case Curve_ST_Length.NAME:                    return new Curve_ST_Length(parameters);
+                case Curve_ST_StartPoint.NAME:                    return new Curve_ST_StartPoint(parameters);
+                case GeomColl_ST_GeometryN.NAME:                    return new GeomColl_ST_GeometryN(parameters);
+                case GeomColl_ST_NumGeometries.NAME:                    return new GeomColl_ST_NumGeometries(parameters);
+                case Line_ST_NumPoints.NAME:                    return new Line_ST_NumPoints(parameters);
+                case Line_ST_PointN.NAME:                    return new Line_ST_PointN(parameters);
+                case Point_ST_ExplicitPoint.NAME:                    return new Point_ST_ExplicitPoint(parameters);
+                case Point_ST_X.NAME:                    return new Point_ST_X(parameters);
+                case Point_ST_Y.NAME:                    return new Point_ST_Y(parameters);
+                case Point_ST_Z.NAME:                    return new Point_ST_Z(parameters);
+                case ST_AsBinary.NAME:                    return new ST_AsBinary(parameters);
+                case ST_AsGML.NAME:                    return new ST_AsGML(parameters);
+                case ST_AsText.NAME:                    return new ST_AsText(parameters);
+                case ST_Boundary.NAME:                    return new ST_Boundary(parameters);
                 case ST_Buffer.NAME:                    return new ST_Buffer(parameters);
                 case ST_Centroid.NAME:                  return new ST_Centroid(parameters);
+                case ST_Contains.NAME:                    return new ST_Contains(parameters);
+                case ST_ConvexHull.NAME:                    return new ST_ConvexHull(parameters);
+                case ST_CoordDim.NAME:                    return new ST_CoordDim(parameters);
+                case ST_Crosses.NAME:                    return new ST_Crosses(parameters);
+                case ST_Difference.NAME:                    return new ST_Difference(parameters);
+                case ST_Dimension.NAME:                    return new ST_Dimension(parameters);
+                case ST_Disjoint.NAME:                    return new ST_Disjoint(parameters);
+                case ST_Distance.NAME:                    return new ST_Distance(parameters);
                 case ST_Envelope.NAME:                  return new ST_Envelope(parameters);
-                case ST_Point.NAME:                     return new ST_Point(parameters);
+                case ST_Equals.NAME:                    return new ST_Equals(parameters);
+                case ST_GeomCollection.NAME:                    return new ST_GeomCollection(parameters);
+                case ST_GeometryType.NAME:                    return new ST_GeometryType(parameters);
+                case ST_Intersection.NAME:                    return new ST_Intersection(parameters);
+                case ST_Intersects.NAME:                    return new ST_Intersects(parameters);
+                case ST_Is3D.NAME:                    return new ST_Is3D(parameters);
+                case ST_IsEmpty.NAME:                    return new ST_IsEmpty(parameters);
+                case ST_IsSimple.NAME:                    return new ST_IsSimple(parameters);
+                case ST_IsValid.NAME:                    return new ST_IsValid(parameters);
                 case ST_LineString.NAME:                return new ST_LineString(parameters);
+                case ST_MultiLineString.NAME:                    return new ST_MultiLineString(parameters);
+                case ST_MultiPoint.NAME:                    return new ST_MultiPoint(parameters);
+                case ST_MultiPolygon.NAME:                    return new ST_MultiPolygon(parameters);
+                case ST_Overlaps.NAME:                    return new ST_Overlaps(parameters);
+                case ST_Point.NAME:                     return new ST_Point(parameters);
+                case ST_Polygon.NAME:                    return new ST_Polygon(parameters);
+                case ST_Relate.NAME:                    return new ST_Relate(parameters);
                 case ST_Simplify.NAME:                  return new ST_Simplify(parameters);
                 case ST_SimplifyPreserveTopology.NAME:  return new ST_SimplifyPreserveTopology(parameters);
+                case ST_SRID.NAME:                    return new ST_SRID(parameters);
+                case ST_SymDifference.NAME:                    return new ST_SymDifference(parameters);
+                case ST_ToGeomColl.NAME:                    return new ST_ToGeomColl(parameters);
+                case ST_ToLineString.NAME:                    return new ST_ToLineString(parameters);
+                case ST_ToMultiLine.NAME:                    return new ST_ToMultiLine(parameters);
+                case ST_ToMultiPoint.NAME:                    return new ST_ToMultiPoint(parameters);
+                case ST_ToMultiPolygon.NAME:                    return new ST_ToMultiPolygon(parameters);
+                case ST_ToPoint.NAME:                    return new ST_ToPoint(parameters);
+                case ST_ToPolygon.NAME:                    return new ST_ToPolygon(parameters);
+                case ST_Touches.NAME:                    return new ST_Touches(parameters);
                 case ST_Transform.NAME:                 return new ST_Transform(parameters);
+                case ST_Union.NAME:                    return new ST_Union(parameters);
+                case ST_Within.NAME:                    return new ST_Within(parameters);
+                case ST_XFromBinary.BdMPoly.NAME:                    return new ST_XFromBinary.BdMPoly(parameters);
+                case ST_XFromBinary.BdPoly.NAME:                    return new ST_XFromBinary.BdPoly(parameters);
+                case ST_XFromBinary.GeomColl.NAME:                    return new ST_XFromBinary.GeomColl(parameters);
+                case ST_XFromBinary.Geom.NAME:                    return new ST_XFromBinary.Geom(parameters);
+                case ST_XFromBinary.Line.NAME:                    return new ST_XFromBinary.Line(parameters);
+                case ST_XFromBinary.MLine.NAME:                    return new ST_XFromBinary.MLine(parameters);
+                case ST_XFromBinary.MPoint.NAME:                    return new ST_XFromBinary.MPoint(parameters);
+                case ST_XFromBinary.MPoly.NAME:                    return new ST_XFromBinary.MPoly(parameters);
+                case ST_XFromBinary.Point.NAME:                    return new ST_XFromBinary.Point(parameters);
+                case ST_XFromBinary.Poly.NAME:                    return new ST_XFromBinary.Poly(parameters);
+                case ST_XFromGML.GeomColl.NAME:                    return new ST_XFromGML.GeomColl(parameters);
+                case ST_XFromGML.Geom.NAME:                    return new ST_XFromGML.Geom(parameters);
+                case ST_XFromGML.Line.NAME:                    return new ST_XFromGML.Line(parameters);
+                case ST_XFromGML.MLine.NAME:                    return new ST_XFromGML.MLine(parameters);
+                case ST_XFromGML.MPoint.NAME:                    return new ST_XFromGML.MPoint(parameters);
+                case ST_XFromGML.MPoly.NAME:                    return new ST_XFromGML.MPoly(parameters);
+                case ST_XFromGML.Point.NAME:                    return new ST_XFromGML.Point(parameters);
+                case ST_XFromGML.Poly.NAME:                    return new ST_XFromGML.Poly(parameters);
+                case ST_XFromText.BdMPoly.NAME:                    return new ST_XFromText.BdMPoly(parameters);
+                case ST_XFromText.BdPoly.NAME:                    return new ST_XFromText.BdPoly(parameters);
+                case ST_XFromText.GeomColl.NAME:                    return new ST_XFromText.GeomColl(parameters);
+                case ST_XFromText.Geom.NAME:                    return new ST_XFromText.Geom(parameters);
+                case ST_XFromText.Line.NAME:                    return new ST_XFromText.Line(parameters);
+                case ST_XFromText.MLine.NAME:                    return new ST_XFromText.MLine(parameters);
+                case ST_XFromText.MPoint.NAME:                    return new ST_XFromText.MPoint(parameters);
+                case ST_XFromText.MPoly.NAME:                    return new ST_XFromText.MPoly(parameters);
+                case ST_XFromText.Point.NAME:                    return new ST_XFromText.Point(parameters);
+                case ST_XFromText.Poly.NAME:                    return new ST_XFromText.Poly(parameters);
+                case Surface_ST_Area.NAME:                    return new Surface_ST_Area(parameters);
+                //case Surface_ST_Centroid.NAME:                    return new Surface_ST_Centroid(parameters);
+                case Surface_ST_Perimeter.NAME:                    return new Surface_ST_Perimeter(parameters);
+                case Surface_ST_PointOnSurface.NAME:                    return new Surface_ST_PointOnSurface(parameters);
                 default: throw new IllegalArgumentException(Resources.format(Resources.Keys.UnknownFunction_1, name));
             }
         } catch (FactoryException e) {
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java
index bbdf568..8940612 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Point.java
@@ -21,6 +21,7 @@ import org.apache.sis.feature.builder.FeatureTypeBuilder;
 import org.apache.sis.feature.builder.PropertyTypeBuilder;
 import org.apache.sis.internal.filter.NamedFunction;
 import org.apache.sis.internal.feature.FeatureExpression;
+import org.apache.sis.internal.filter.FilterGeometryUtils;
 import org.apache.sis.referencing.CRS;
 import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.Point;
@@ -107,7 +108,7 @@ final class ST_Point extends NamedFunction implements FeatureExpression {
             }
         }
 
-        final Point point = SQLMM.GF.createPoint(new Coordinate(x.doubleValue(), y.doubleValue()));
+        final Point point = FilterGeometryUtils.GF.createPoint(new Coordinate(x.doubleValue(), y.doubleValue()));
         point.setUserData(crs);
         return point;
     }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java
index 986a6e9..726f2a4 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/ST_Transform.java
@@ -39,8 +39,16 @@ import org.apache.sis.util.resources.Errors;
 
 
 /**
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Transform. <br>
+ * <p>
+ * Return an ST_Geometry value transformed to the specified spatial reference system, considering z and m
+ * coordinate values in the calculations and including them in the resultant geometry.
+ * </p>
+ *
+ * <p>
  * An expression which transforms a geometry from one CRS to another CRS.
  * This expression expects two arguments:
+ * </p>
  *
  * <ol class="verbose">
  *   <li>An expression returning a geometry object. The evaluated value shall be an instance of
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractAccessorSpatialMethod.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractAccessorSpatialFunction.java
similarity index 91%
rename from core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractAccessorSpatialMethod.java
rename to core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractAccessorSpatialFunction.java
index 9ee7600..2c4963a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractAccessorSpatialMethod.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractAccessorSpatialFunction.java
@@ -26,9 +26,9 @@ import org.opengis.filter.expression.Expression;
  *
  * @author Johann Sorel (Geomatys)
  */
-public abstract class AbstractAccessorSpatialMethod<T extends Geometry> extends AbstractSpatialMethod {
+public abstract class AbstractAccessorSpatialFunction<T extends Geometry> extends AbstractSpatialFunction {
 
-    public AbstractAccessorSpatialMethod(Expression[] parameters) {
+    public AbstractAccessorSpatialFunction(Expression[] parameters) {
         super(parameters);
     }
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractBinarySpatialMethod.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractBinarySpatialFunction.java
similarity index 91%
rename from core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractBinarySpatialMethod.java
rename to core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractBinarySpatialFunction.java
index 87521a7..773db54 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractBinarySpatialMethod.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractBinarySpatialFunction.java
@@ -31,9 +31,9 @@ import org.opengis.util.FactoryException;
  * @since 2.0
  * @module
  */
-public abstract class AbstractBinarySpatialMethod extends AbstractSpatialMethod {
+public abstract class AbstractBinarySpatialFunction extends AbstractSpatialFunction {
 
-    public AbstractBinarySpatialMethod(Expression[] parameters) {
+    public AbstractBinarySpatialFunction(Expression[] parameters) {
         super(parameters);
     }
 
@@ -52,7 +52,7 @@ public abstract class AbstractBinarySpatialMethod extends AbstractSpatialMethod
         Geometry left = FilterGeometryUtils.toGeometry(candidate, parameters.get(0));
         Geometry right = FilterGeometryUtils.toGeometry(candidate, parameters.get(1));
         try {
-            final Geometry[] geoms = toSameCRS(left, right);
+            final Geometry[] geoms = FilterGeometryUtils.toSameCRS(left, right);
             left = geoms[0];
             right = geoms[1];
         } catch (FactoryException ex) {
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractSpatialFunction.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractSpatialFunction.java
index b66a74b..00c93cd 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractSpatialFunction.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractSpatialFunction.java
@@ -16,15 +16,12 @@
  */
 package org.apache.sis.internal.filter.sqlmm.todo;
 
-import org.locationtech.jts.geom.GeometryFactory;
 import java.util.logging.Logger;
 import org.apache.sis.internal.filter.NamedFunction;
 import org.apache.sis.util.logging.Logging;
 import org.opengis.filter.expression.Expression;
 
 /**
- * Provide convinient methods to manipulation geometries.
- * this class is not thread safe.
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -34,7 +31,6 @@ import org.opengis.filter.expression.Expression;
 public abstract class AbstractSpatialFunction extends NamedFunction {
 
     protected static final Logger LOGGER = Logging.getLogger(AbstractSpatialFunction.class);
-    protected static final GeometryFactory GF = new GeometryFactory();
 
     public AbstractSpatialFunction(Expression[] parameters){
         super(parameters);
@@ -48,4 +44,32 @@ public abstract class AbstractSpatialFunction extends NamedFunction {
         return 1;
     }
 
+    public String getSyntax() {
+        final int minparams = getMinParams();
+        final int maxparams = getMaxParams();
+        final StringBuilder sb = new StringBuilder();
+        sb.append(getName());
+        sb.append('(');
+        for (int i = 0; i < minparams; i++) {
+            if (i != 0) {
+                sb.append(", ");
+            }
+            sb.append("param");
+            sb.append(i + 1);
+        }
+        if (minparams != maxparams) {
+            sb.append('[');
+            for (int i = minparams; i < maxparams; i++) {
+                if (i != 0) {
+                    sb.append(", ");
+                }
+                sb.append("param");
+                sb.append(i + 1);
+            }
+            sb.append(']');
+        }
+        sb.append(')');
+
+        return sb.toString();
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractSpatialMethod.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractSpatialMethod.java
deleted file mode 100644
index 3cedd69..0000000
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractSpatialMethod.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.internal.filter.sqlmm.todo;
-
-import org.locationtech.jts.geom.Geometry;
-import org.locationtech.jts.io.WKBWriter;
-import org.locationtech.jts.io.WKTWriter;
-import java.util.logging.Logger;
-import org.apache.sis.internal.filter.FilterGeometryUtils;
-import org.apache.sis.internal.filter.NamedFunction;
-import org.apache.sis.util.logging.Logging;
-import org.opengis.filter.expression.Expression;
-import org.opengis.referencing.operation.TransformException;
-import org.opengis.util.FactoryException;
-
-/**
- *
- * @author Johann Sorel (Geomatys)
- * @version 2.0
- * @since   2.0
- * @module
- */
-public abstract class AbstractSpatialMethod extends NamedFunction {
-
-    protected static final Logger LOGGER = Logging.getLogger(AbstractSpatialMethod.class);
-
-    public AbstractSpatialMethod(Expression[] parameters) {
-        super(parameters);
-    }
-
-    protected int getMinParams() {
-        return 1;
-    }
-
-    protected int getMaxParams() {
-        return 1;
-    }
-
-    public String getSyntax() {
-        final int minparams = getMinParams();
-        final int maxparams = getMaxParams();
-        final StringBuilder sb = new StringBuilder();
-        sb.append(getName());
-        sb.append('(');
-        for (int i = 0; i < minparams; i++) {
-            if (i != 0) {
-                sb.append(", ");
-            }
-            sb.append("param");
-            sb.append(i + 1);
-        }
-        if (minparams != maxparams) {
-            sb.append('[');
-            for (int i = minparams; i < maxparams; i++) {
-                if (i != 0) {
-                    sb.append(", ");
-                }
-                sb.append("param");
-                sb.append(i + 1);
-            }
-            sb.append(']');
-        }
-        sb.append(')');
-
-        return sb.toString();
-    }
-
-    /**
-     * Reproject geometries to the same CRS if needed and if possible.
-     */
-    protected static Geometry[] toSameCRS(final Geometry leftGeom, final Geometry rightGeom)
-            throws FactoryException, TransformException {
-        return FilterGeometryUtils.toSameCRS(leftGeom, rightGeom);
-    }
-
-}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_ExteriorRing.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_ExteriorRing.java
index a8022d0..15dd7a4 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_ExteriorRing.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_ExteriorRing.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class CurvePolygon_ST_ExteriorRing extends AbstractAccessorSpatialMethod<Polygon> {
+public final class CurvePolygon_ST_ExteriorRing extends AbstractAccessorSpatialFunction<Polygon> {
 
     public static final String NAME = "ST_ExteriorRing";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_InteriorRingN.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_InteriorRingN.java
index dc34048..c9c5d11 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_InteriorRingN.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_InteriorRingN.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class CurvePolygon_ST_InteriorRingN extends AbstractAccessorSpatialMethod<Polygon> {
+public final class CurvePolygon_ST_InteriorRingN extends AbstractAccessorSpatialFunction<Polygon> {
 
     public static final String NAME = "ST_InteriorRingN";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_NumInteriorRings.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_NumInteriorRings.java
index 447202d..3ea83a8 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_NumInteriorRings.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/CurvePolygon_ST_NumInteriorRings.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class CurvePolygon_ST_NumInteriorRings extends AbstractAccessorSpatialMethod<Polygon> {
+public final class CurvePolygon_ST_NumInteriorRings extends AbstractAccessorSpatialFunction<Polygon> {
 
     public static final String NAME = "ST_NumInteriorRings";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_EndPoint.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_EndPoint.java
index e4ad389..29a20c4 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_EndPoint.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_EndPoint.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Curve_ST_EndPoint extends AbstractAccessorSpatialMethod<LineString> {
+public final class Curve_ST_EndPoint extends AbstractAccessorSpatialFunction<LineString> {
 
     public static final String NAME = "ST_EndPoint";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsClosed.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsClosed.java
index be25536..2b17b72 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsClosed.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsClosed.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Curve_ST_IsClosed extends AbstractAccessorSpatialMethod<LineString> {
+public final class Curve_ST_IsClosed extends AbstractAccessorSpatialFunction<LineString> {
 
     public static final String NAME = "ST_IsClosed";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsRing.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsRing.java
index e94713f..c213ace 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsRing.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_IsRing.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Curve_ST_IsRing extends AbstractAccessorSpatialMethod<LineString> {
+public final class Curve_ST_IsRing extends AbstractAccessorSpatialFunction<LineString> {
 
     public static final String NAME = "ST_IsRing";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_Length.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_Length.java
index 8573d38..c262ce6 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_Length.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_Length.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Curve_ST_Length extends AbstractAccessorSpatialMethod<Geometry> {
+public final class Curve_ST_Length extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Length";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_StartPoint.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_StartPoint.java
index de83dd3..7d26435 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_StartPoint.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Curve_ST_StartPoint.java
@@ -33,7 +33,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Curve_ST_StartPoint extends AbstractAccessorSpatialMethod<LineString> {
+public final class Curve_ST_StartPoint extends AbstractAccessorSpatialFunction<LineString> {
 
     public static final String NAME = "ST_StartPoint";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_GeometryN.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_GeometryN.java
index d55cc7b..c2d4410 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_GeometryN.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_GeometryN.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class GeomColl_ST_GeometryN extends AbstractAccessorSpatialMethod<Geometry> {
+public final class GeomColl_ST_GeometryN extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_GeometryN";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_NumGeometries.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_NumGeometries.java
index a1b6a38..30434ae 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_NumGeometries.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/GeomColl_ST_NumGeometries.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class GeomColl_ST_NumGeometries extends AbstractAccessorSpatialMethod<Geometry> {
+public final class GeomColl_ST_NumGeometries extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_NumGeometries";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_NumPoints.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_NumPoints.java
index 838f96b..5f51805 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_NumPoints.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_NumPoints.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Line_ST_NumPoints extends AbstractAccessorSpatialMethod<LineString> {
+public final class Line_ST_NumPoints extends AbstractAccessorSpatialFunction<LineString> {
 
     public static final String NAME = "ST_NumPoints";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_PointN.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_PointN.java
index 7dbc784..f247113 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_PointN.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Line_ST_PointN.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Line_ST_PointN extends AbstractAccessorSpatialMethod<LineString> {
+public final class Line_ST_PointN extends AbstractAccessorSpatialFunction<LineString> {
 
     public static final String NAME = "ST_PointN";
 
@@ -63,7 +63,7 @@ public final class Line_ST_PointN extends AbstractAccessorSpatialMethod<LineStri
         final int index = Integer.parseInt(params[1].toString());
         final Point pt = geom.getPointN(index-1);
         pt.setSRID(geom.getSRID());
-        return new OSerializableGeometry(pt);
+        return pt;
     }
 
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_ExplicitPoint.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_ExplicitPoint.java
index 0cdb745..8188c60 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_ExplicitPoint.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_ExplicitPoint.java
@@ -32,7 +32,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Point_ST_ExplicitPoint extends AbstractAccessorSpatialMethod<Point> {
+public final class Point_ST_ExplicitPoint extends AbstractAccessorSpatialFunction<Point> {
 
     public static final String NAME = "ST_ExplicitPoint";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_X.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_X.java
index 65503e5..349c5e5 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_X.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_X.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Point_ST_X extends AbstractAccessorSpatialMethod<Point> {
+public final class Point_ST_X extends AbstractAccessorSpatialFunction<Point> {
 
     public static final String NAME = "ST_X";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Y.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Y.java
index 37cdc0a..5be528a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Y.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Y.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Point_ST_Y extends AbstractAccessorSpatialMethod<Point> {
+public final class Point_ST_Y extends AbstractAccessorSpatialFunction<Point> {
 
     public static final String NAME = "ST_Y";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Z.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Z.java
index 5f876f4..18c3949 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Z.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Point_ST_Z.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Point_ST_Z extends AbstractAccessorSpatialMethod<Point> {
+public final class Point_ST_Z extends AbstractAccessorSpatialFunction<Point> {
 
     public static final String NAME = "ST_Z";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsBinary.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsBinary.java
index 1501349..d09cc57 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsBinary.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsBinary.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_AsBinary extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_AsBinary extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_AsBinary";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsGML.java
index ad3187b..cfd8ff8 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsGML.java
@@ -17,16 +17,8 @@
 package org.apache.sis.internal.filter.sqlmm.todo;
 
 import org.locationtech.jts.geom.Geometry;
-import java.io.StringWriter;
 import java.text.ParseException;
-import java.util.logging.Level;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import org.geotoolkit.gml.JTStoGeometry;
-import org.geotoolkit.gml.xml.AbstractGeometry;
-import org.geotoolkit.gml.xml.GMLMarshallerPool;
 import org.opengis.filter.expression.Expression;
-import org.opengis.util.FactoryException;
 
 /**
  * SQL/MM, ISO/IEC 13249-3:2011, ST_AsGML. <br>
@@ -37,7 +29,7 @@ import org.opengis.util.FactoryException;
  * @since   2.0
  * @module
  */
-public final class ST_AsGML extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_AsGML extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_AsGML";
 
@@ -57,27 +49,8 @@ public final class ST_AsGML extends AbstractAccessorSpatialMethod<Geometry> {
 
     @Override
     public Object execute(Geometry geom, Object... params) throws ParseException {
-        Marshaller marshaller = null;
-        try{
-            final AbstractGeometry gmlgeo = JTStoGeometry.toGML("3.1.1",geom);
-
-            final StringWriter writer = new StringWriter();
-            marshaller = GMLMarshallerPool.getInstance().acquireMarshaller();
-            marshaller.marshal(gmlgeo, writer);
-            writer.flush();
-            return writer.getBuffer().toString();
-
-        }catch(FactoryException ex){
-            LOGGER.log(Level.WARNING, ex.getMessage(), ex);
-            return null;
-        }catch(JAXBException ex){
-            LOGGER.log(Level.WARNING, ex.getMessage(), ex);
-            return null;
-        }finally{
-            if(marshaller != null){
-                GMLMarshallerPool.getInstance().recycle(marshaller);
-            }
-        }
+        //TODO marshall to GML 3.1.1
+        throw new ParseException("Not implemented", 0);
     }
 
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsText.java
index 60d50f1..d689445 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_AsText.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_AsText extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_AsText extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_AsText";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Boundary.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Boundary.java
index be38e76..3415499 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Boundary.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Boundary.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Boundary extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_Boundary extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Boundary";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Buffer.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Buffer.java
index 6665c7c..f88775f 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Buffer.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Buffer.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Buffer extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_Buffer extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Buffer";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Contains.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Contains.java
index 2ec8139..9aad95a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Contains.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Contains.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Contains extends AbstractBinarySpatialMethod {
+public final class ST_Contains extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Contains";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ConvexHull.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ConvexHull.java
index d45abb8..8ceb191 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ConvexHull.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ConvexHull.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ConvexHull extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ConvexHull extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ConvexHull";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_CoordDim.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_CoordDim.java
index c6f0cf7..14bfa4c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_CoordDim.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_CoordDim.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since 2.0
  * @module
  */
-public final class ST_CoordDim extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_CoordDim extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_CoordDim";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Crosses.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Crosses.java
index cea80ef..062533a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Crosses.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Crosses.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Crosses extends AbstractBinarySpatialMethod {
+public final class ST_Crosses extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Crosses";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Difference.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Difference.java
index d3f774b..2c391bd 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Difference.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Difference.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Difference extends AbstractBinarySpatialMethod {
+public final class ST_Difference extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Difference";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Dimension.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Dimension.java
index 889b8cd..731ee2c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Dimension.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Dimension.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Dimension extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_Dimension extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Dimension";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Disjoint.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Disjoint.java
index efb6e2c..d0f99ab 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Disjoint.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Disjoint.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Disjoint extends AbstractBinarySpatialMethod {
+public final class ST_Disjoint extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Disjoint";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Distance.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Distance.java
index 8a8ac43..2b917b9 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Distance.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Distance.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Distance extends AbstractBinarySpatialMethod {
+public final class ST_Distance extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Distance";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Envelope.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Envelope.java
index 25dfbd1..25dae29 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Envelope.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Envelope.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Envelope extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_Envelope extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Envelope";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Equals.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Equals.java
index 9226eda..46d491c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Equals.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Equals.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Equals extends AbstractBinarySpatialMethod {
+public final class ST_Equals extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Equals";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeometryType.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeometryType.java
index 2ff77df..663a24a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeometryType.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeometryType.java
@@ -39,7 +39,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_GeometryType extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_GeometryType extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_GeometryType";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersection.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersection.java
index afabeeb..6dd4c34 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersection.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersection.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Intersection extends AbstractBinarySpatialMethod {
+public final class ST_Intersection extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Intersection";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersects.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersects.java
index 37b6506..c54dcf8 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersects.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Intersects.java
@@ -31,7 +31,7 @@ coordinate values in the calculations.
  * @since   2.0
  * @module
  */
-public final class ST_Intersects extends AbstractBinarySpatialMethod {
+public final class ST_Intersects extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Intersects";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Is3D.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Is3D.java
index 0db435e..64c6476 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Is3D.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Is3D.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Is3D extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_Is3D extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Is3D";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsEmpty.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsEmpty.java
index b02eec7..5cc7308 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsEmpty.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsEmpty.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_IsEmpty extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_IsEmpty extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_IsEmpty";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsSimple.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsSimple.java
index fa8e607..2c711de 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsSimple.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsSimple.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_IsSimple extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_IsSimple extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_IsSimple";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsValid.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsValid.java
index 195b218..c0064e0 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsValid.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_IsValid.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_IsValid extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_IsValid extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_IsValid";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Overlaps.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Overlaps.java
index b01d930..06bda2d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Overlaps.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Overlaps.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Overlaps extends AbstractBinarySpatialMethod {
+public final class ST_Overlaps extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Overlaps";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Point.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Point.java
index 8c8233e..1528f16 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Point.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Point.java
@@ -20,6 +20,7 @@ import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.io.ParseException;
 import java.math.BigDecimal;
+import org.apache.sis.internal.filter.FilterGeometryUtils;
 import org.opengis.filter.expression.Expression;
 
 /**
@@ -78,7 +79,7 @@ public final class ST_Point extends AbstractSpatialFunction{
                 // X,Y
                 final Number obj1 = (Number) arg0;
                 final Number obj2 = (Number) arg1;
-                geom = GF.createPoint(new Coordinate(obj1.doubleValue(), obj2.doubleValue()));
+                geom = FilterGeometryUtils.GF.createPoint(new Coordinate(obj1.doubleValue(), obj2.doubleValue()));
             }else{
                 //WKT/WKB + srid
                 try {
@@ -94,7 +95,7 @@ public final class ST_Point extends AbstractSpatialFunction{
             final Number obj1 = (Number) children.get(0).evaluate(context, candidate);
             final Number obj2 = (Number) children.get(1).evaluate(context, candidate);
             final Number obj3 = (Number) children.get(2).evaluate(context, candidate);
-            geom = GF.createPoint(new Coordinate(obj1.doubleValue(), obj2.doubleValue()));
+            geom = FilterGeometryUtils.GF.createPoint(new Coordinate(obj1.doubleValue(), obj2.doubleValue()));
             if(obj3 instanceof Float || obj3 instanceof Double || obj3 instanceof BigDecimal){
                 // Z
                 geom.getCoordinate().z = obj3.doubleValue();
@@ -107,7 +108,7 @@ public final class ST_Point extends AbstractSpatialFunction{
             final Number obj1 = (Number) children.get(0).evaluate(context, candidate);
             final Number obj2 = (Number) children.get(1).evaluate(context, candidate);
             final Number obj3 = (Number) children.get(2).evaluate(context, candidate);
-            geom = GF.createPoint(new Coordinate(obj1.doubleValue(), obj2.doubleValue(), obj3.doubleValue()));
+            geom = FilterGeometryUtils.GF.createPoint(new Coordinate(obj1.doubleValue(), obj2.doubleValue(), obj3.doubleValue()));
             geom.setSRID( ((Number) children.get(3).evaluate(context, candidate) ).intValue() );
 
         }else{
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Relate.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Relate.java
index e2bb2ba..887c88c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Relate.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Relate.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Relate extends AbstractBinarySpatialMethod {
+public final class ST_Relate extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Relate";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SRID.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SRID.java
index d054ebf..70fcf22 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SRID.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SRID.java
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_SRID extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_SRID extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_SRID";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SymDifference.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SymDifference.java
index 73d5074..466eda4 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SymDifference.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_SymDifference.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_SymDifference extends AbstractBinarySpatialMethod {
+public final class ST_SymDifference extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_SymDifference";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToGeomColl.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToGeomColl.java
index 4d0acfc..3d1e9e7 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToGeomColl.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToGeomColl.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ToGeomColl extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ToGeomColl extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ToGeomColl";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToLineString.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToLineString.java
index 9c1d21a..97f7446 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToLineString.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToLineString.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ToLineString extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ToLineString extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ToLineString";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiLine.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiLine.java
index b8690e8..4c47a48 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiLine.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiLine.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ToMultiLine extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ToMultiLine extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ToMultiLine";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPoint.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPoint.java
index 022ec9a..07f10ae 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPoint.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPoint.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ToMultiPoint extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ToMultiPoint extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ToMultiPoint";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPolygon.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPolygon.java
index 94eea09..bb8c7dc 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPolygon.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToMultiPolygon.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ToMultiPolygon extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ToMultiPolygon extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ToMultiPolygon";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPoint.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPoint.java
index 37b3ec2..7cf63ae 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPoint.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPoint.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ToPoint extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ToPoint extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ToPoint";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPolygon.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPolygon.java
index 69e4ae3..aa3ee32 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPolygon.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_ToPolygon.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_ToPolygon extends AbstractAccessorSpatialMethod<Geometry> {
+public final class ST_ToPolygon extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_ToPolygon";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Touches.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Touches.java
index bfe48b6..6a688d6 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Touches.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Touches.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Touches extends AbstractBinarySpatialMethod {
+public final class ST_Touches extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Touches";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Transform.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Transform.java
deleted file mode 100644
index c1b5624..0000000
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Transform.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.internal.filter.sqlmm.todo;
-
-import org.locationtech.jts.geom.Geometry;
-import java.text.ParseException;
-import org.opengis.filter.expression.Expression;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.referencing.operation.MathTransform;
-import org.opengis.referencing.operation.TransformException;
-import org.opengis.util.FactoryException;
-
-/**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Transform. <br>
- * Return an ST_Geometry value transformed to the specified spatial reference system, considering z and m
- * coordinate values in the calculations and including them in the resultant geometry.
- *
- * @author Johann Sorel (Geomatys)
- * @version 2.0
- * @since   2.0
- * @module
- */
-public final class ST_Transform extends AbstractAccessorSpatialMethod<Geometry> {
-
-    public static final String NAME = "ST_Transform";
-
-    public ST_Transform(Expression[] parameters) {
-        super(parameters);
-    }
-
-    @Override
-    protected int getMinParams() {
-        return 2;
-    }
-
-    @Override
-    protected int getMaxParams() {
-        return 2;
-    }
-
-    @Override
-    public String getName() {
-        return NAME;
-    }
-
-    @Override
-    protected Class<Geometry> getExpectedClass() {
-        return Geometry.class;
-    }
-    @Override
-    public Object execute(Geometry geom, Object... params) throws ParseException {
-        final int targetSRID = Integer.parseInt(params[1].toString());
-        //TODO should use local database EPSG factory
-        try{
-            final CoordinateReferenceSystem baseCRS = JTS.findCoordinateReferenceSystem(geom);
-            final CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:"+targetSRID);
-            final MathTransform trs = CRS.findMathTransform(baseCRS, targetCRS);
-            return new OSerializableGeometry(JTS.transform(geom, trs));
-        }catch(FactoryException ex){
-            throw new OException(ex.getMessage(),ex);
-        }catch(TransformException ex){
-            throw new OException(ex.getMessage(),ex);
-        }
-    }
-
-}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Union.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Union.java
index fe40494..c223190 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Union.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Union.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Union extends AbstractBinarySpatialMethod {
+public final class ST_Union extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Union";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Within.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Within.java
index 8dd0737..da76aab 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Within.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Within.java
@@ -30,7 +30,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_Within extends AbstractBinarySpatialMethod {
+public final class ST_Within extends AbstractBinarySpatialFunction {
 
     public static final String NAME = "ST_Within";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromBinary.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromBinary.java
index 07e8756..d70f882 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromBinary.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromBinary.java
@@ -80,17 +80,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_MultiPolygon value which is transformed from a BINARY LARGE
      * OBJECT value that represents the well-known binary representation of an
      * ST_MultiLineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_BdMPolyFromWKB extends ST_XFromBinary {
+    public static final class BdMPoly extends ST_XFromBinary {
 
         public static final String NAME = "ST_BdMPolyFromWKB";
 
-        public ST_BdMPolyFromWKB(Expression[] parameters) {
+        public BdMPoly(Expression[] parameters) {
             super(parameters);
         }
 
@@ -130,17 +125,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_Polygon value which is transformed from a BINARY LARGE
      * OBJECT value that represents the well-known binary representation of an
      * ST_Polygon value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_BdPolyFromWKB extends ST_XFromBinary {
+    public static final class BdPoly extends ST_XFromBinary {
 
         public static final String NAME = "ST_BdPolyFromWKB";
 
-        public ST_BdPolyFromWKB(Expression[] parameters) {
+        public BdPoly(Expression[] parameters) {
             super(parameters);
         }
 
@@ -179,17 +169,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_GeomCollection value which is transformed from a BINARY
      * LARGE OBJECT value that represents the well-known binary representation
      * of an ST_GeomCollection value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_GeomCollFromWKB extends ST_XFromBinary {
+    public static final class GeomColl extends ST_XFromBinary {
 
         public static final String NAME = "ST_GeomCollFromWKB";
 
-        public ST_GeomCollFromWKB(Expression[] parameters) {
+        public GeomColl(Expression[] parameters) {
             super(parameters);
         }
 
@@ -209,17 +194,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_Geometry value which is transformed from a BINARY LARGE
      * OBJECT value that represents the well-known binary representation of an
      * ST_Geometry value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_GeomFromWKB extends ST_XFromBinary {
+    public static final class Geom extends ST_XFromBinary {
 
         public static final String NAME = "ST_GeomFromWKB";
 
-        public ST_GeomFromWKB(Expression[] parameters) {
+        public Geom(Expression[] parameters) {
             super(parameters);
         }
 
@@ -239,17 +219,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_LineString value which is transformed from a BINARY LARGE
      * OBJECT value that represents the well-known binary representation of an
      * ST_LineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_LineFromWKB extends ST_XFromBinary {
+    public static final class Line extends ST_XFromBinary {
 
         public static final String NAME = "ST_LineFromWKB";
 
-        public ST_LineFromWKB(Expression[] parameters) {
+        public Line(Expression[] parameters) {
             super(parameters);
         }
 
@@ -269,17 +244,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_MultiLineString value which is transformed from a BINARY
      * LARGE OBJECT value that represents the well-known binary representation
      * of an ST_MultiLineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MLineFromWKB extends ST_XFromBinary {
+    public static final class MLine extends ST_XFromBinary {
 
         public static final String NAME = "ST_MLineFromWKB";
 
-        public ST_MLineFromWKB(Expression[] parameters) {
+        public MLine(Expression[] parameters) {
             super(parameters);
         }
 
@@ -299,17 +269,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_MultiPoint value which is transformed from a BINARY LARGE
      * OBJECT value that represents the well-known binary representation of an
      * ST_MultiPoint value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MPointFromWKB extends ST_XFromBinary {
+    public static final class MPoint extends ST_XFromBinary {
 
         public static final String NAME = "ST_MPointFromWKB";
 
-        public ST_MPointFromWKB(Expression[] parameters) {
+        public MPoint(Expression[] parameters) {
             super(parameters);
         }
 
@@ -329,17 +294,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_MultiPolygon value which is transformed from a BINARY LARGE
      * OBJECT value that represents the well-known binary representation of an
      * ST_MultiPolygon value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MPolyFromWKB extends ST_XFromBinary {
+    public static final class MPoly extends ST_XFromBinary {
 
         public static final String NAME = "ST_MPolyFromWKB";
 
-        public ST_MPolyFromWKB(Expression[] parameters) {
+        public MPoly(Expression[] parameters) {
             super(parameters);
         }
 
@@ -359,17 +319,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_Point value which is transformed from a BINARY LARGE OBJECT
      * value that represents the well-known binary representation of an ST_Point
      * value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_PointFromWKB extends ST_XFromBinary {
+    public static final class Point extends ST_XFromBinary {
 
         public static final String NAME = "ST_PointFromWKB";
 
-        public ST_PointFromWKB(Expression[] parameters) {
+        public Point(Expression[] parameters) {
             super(parameters);
         }
 
@@ -389,17 +344,12 @@ public abstract class ST_XFromBinary extends AbstractSpatialFunction {
      * Return an ST_Polygon value which is transformed from a BINARY LARGE
      * OBJECT value that represents the well-known binary representation of an
      * ST_Polygon value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_PolyFromWKB extends ST_XFromBinary {
+    public static final class Poly extends ST_XFromBinary {
 
         public static final String NAME = "ST_PolyFromWKB";
 
-        public ST_PolyFromWKB(Expression[] parameters) {
+        public Poly(Expression[] parameters) {
             super(parameters);
         }
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromGML.java
index 223eb1e..953d487 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromGML.java
@@ -52,6 +52,7 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
 
     protected abstract Class getExpectedClass();
 
+    @Override
     public String getSyntax() {
         return getName() + " ( <gml> [,<srid>] )";
     }
@@ -86,19 +87,14 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
     /**
      * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollFromGML. <br>
      * Return an ST_GeomCollection value which is transformed from a CHARACTER
-     * LARGE OBJECT value that represents the GML representationof an
+     * LARGE OBJECT value that represents the GML representation of an
      * ST_GeomCollection value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_GeomCollFromGML extends ST_XFromGML {
+    public static final class GeomColl extends ST_XFromGML {
 
         public static final String NAME = "ST_GeomCollFromGML";
 
-        public ST_GeomCollFromGML(Expression[] parameters) {
+        public GeomColl(Expression[] parameters) {
             super(parameters);
         }
 
@@ -116,18 +112,13 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
     /**
      * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomFromGML. <br>
      * Return an ST_Geometry value which is transformed from a CHARACTER LARGE
-     * OBJECT value that represents the GML representationof an ST_Geometry.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
+     * OBJECT value that represents the GML representation of an ST_Geometry.     *
      */
-    public static final class ST_GeomFromGML extends ST_XFromGML {
+    public static final class Geom extends ST_XFromGML {
 
         public static final String NAME = "ST_GeomFromGML";
 
-        public ST_GeomFromGML(Expression[] parameters) {
+        public Geom(Expression[] parameters) {
             super(parameters);
         }
 
@@ -147,17 +138,12 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
      * Return an ST_LineString value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the GML representation of an ST_LineString
      * value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_LineFromGML extends ST_XFromGML {
+    public static final class Line extends ST_XFromGML {
 
         public static final String NAME = "ST_LineFromGML";
 
-        public ST_LineFromGML(Expression[] parameters) {
+        public Line(Expression[] parameters) {
             super(parameters);
         }
 
@@ -177,17 +163,12 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
      * Return an ST_MultiLineString value which is transformed from a CHARACTER
      * LARGE OBJECT value that represents the GML representation of an
      * ST_MultiLineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MLineFromGML extends ST_XFromGML {
+    public static final class MLine extends ST_XFromGML {
 
         public static final String NAME = "ST_MLineFromGML";
 
-        public ST_MLineFromGML(Expression[] parameters) {
+        public MLine(Expression[] parameters) {
             super(parameters);
         }
 
@@ -207,17 +188,12 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
      * Return an ST_MultiPoint value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the GML representation of an ST_MultiPoint
      * value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MPointFromGML extends ST_XFromGML {
+    public static final class MPoint extends ST_XFromGML {
 
         public static final String NAME = "ST_MPointFromGML";
 
-        public ST_MPointFromGML(Expression[] parameters) {
+        public MPoint(Expression[] parameters) {
             super(parameters);
         }
 
@@ -237,17 +213,12 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
      * Return an ST_MultiPolygon value which is transformed from a CHARACTER
      * LARGE OBJECT value that represents the GML representation of an
      * ST_MultiPolygon value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MPolyFromGML extends ST_XFromGML {
+    public static final class MPoly extends ST_XFromGML {
 
         public static final String NAME = "ST_MPolyFromGML";
 
-        public ST_MPolyFromGML(Expression[] parameters) {
+        public MPoly(Expression[] parameters) {
             super(parameters);
         }
 
@@ -266,17 +237,12 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
      * SQL/MM, ISO/IEC 13249-3:2011, ST_PointFromGML. <br>
      * Return an ST_Point value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the GML representation of an ST_Point.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_PointFromGML extends ST_XFromGML {
+    public static final class Point extends ST_XFromGML {
 
         public static final String NAME = "ST_PointFromGML";
 
-        public ST_PointFromGML(Expression[] parameters) {
+        public Point(Expression[] parameters) {
             super(parameters);
         }
 
@@ -296,17 +262,12 @@ public abstract class ST_XFromGML extends AbstractSpatialFunction {
      * Return an ST_Polygon value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the GML representation of an ST_Polygon
      * value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_PolyFromGML extends ST_XFromGML {
+    public static final class Poly extends ST_XFromGML {
 
         public static final String NAME = "ST_PolyFromGML";
 
-        public ST_PolyFromGML(Expression[] parameters) {
+        public Poly(Expression[] parameters) {
             super(parameters);
         }
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromText.java
index 6928765..6ea0b02 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_XFromText.java
@@ -53,6 +53,7 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
 
     protected abstract Class getExpectedClass();
 
+    @Override
     public String getSyntax() {
         return getName() + " ( <text> [,<srid>] )";
     }
@@ -79,17 +80,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_MultiPolygon value which is transformed from a CHARACTER
      * LARGE OBJECT value that represents the well-known text representation of
      * an ST_MultiLineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_BdMPolyFromText extends ST_XFromText {
+    public static final class BdMPoly extends ST_XFromText {
 
         public static final String NAME = "ST_BdMPolyFromText";
 
-        public ST_BdMPolyFromText(Expression[] parameters) {
+        public BdMPoly(Expression[] parameters) {
             super(parameters);
         }
 
@@ -129,17 +125,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_Polygon value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the well-known text representation of an
      * ST_MultiLineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_BdPolyFromText extends ST_XFromText {
+    public static final class BdPoly extends ST_XFromText {
 
         public static final String NAME = "ST_BdPolyFromText";
 
-        public ST_BdPolyFromText(Expression[] parameters) {
+        public BdPoly(Expression[] parameters) {
             super(parameters);
         }
 
@@ -178,17 +169,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_GeomCollection value which is transformed from a CHARACTER
      * LARGE OBJECT value that represents the well-known text representation of
      * an ST_GeomCollection value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_GeomCollFromText extends ST_XFromText {
+    public static final class GeomColl extends ST_XFromText {
 
         public static final String NAME = "ST_GeomCollFromText";
 
-        public ST_GeomCollFromText(Expression[] parameters) {
+        public GeomColl(Expression[] parameters) {
             super(parameters);
         }
 
@@ -208,17 +194,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_Geometry value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the well-known text representation of an
      * ST_Geometry value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_GeomFromText extends ST_XFromText {
+    public static final class Geom extends ST_XFromText {
 
         public static final String NAME = "ST_GeomFromText";
 
-        public ST_GeomFromText(Expression[] parameters) {
+        public Geom(Expression[] parameters) {
             super(parameters);
         }
 
@@ -238,17 +219,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_LineString value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the well-known text representation of an
      * ST_LineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_LineFromText extends ST_XFromText {
+    public static final class Line extends ST_XFromText {
 
         public static final String NAME = "ST_LineFromText";
 
-        public ST_LineFromText(Expression[] parameters) {
+        public Line(Expression[] parameters) {
             super(parameters);
         }
 
@@ -268,17 +244,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_MultiLineString value which is transformed from a CHARACTER
      * LARGE OBJECT value that represents the well-known text representation of
      * an ST_MultiLineString value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MLineFromText extends ST_XFromText {
+    public static final class MLine extends ST_XFromText {
 
         public static final String NAME = "ST_MLineFromText";
 
-        public ST_MLineFromText(Expression[] parameters) {
+        public MLine(Expression[] parameters) {
             super(parameters);
         }
 
@@ -298,17 +269,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_MultiPoint value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the well-known text representation of an
      * ST_MultiPoint value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MPointFromText extends ST_XFromText {
+    public static final class MPoint extends ST_XFromText {
 
         public static final String NAME = "ST_MPointFromText";
 
-        public ST_MPointFromText(Expression[] parameters) {
+        public MPoint(Expression[] parameters) {
             super(parameters);
         }
 
@@ -329,17 +295,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_MultiPolygon value which is transformed from a CHARACTER
      * LARGE OBJECT value that represents the well-known text representation of
      * an ST_MultiPolygon value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_MPolyFromText extends ST_XFromText {
+    public static final class MPoly extends ST_XFromText {
 
         public static final String NAME = "ST_MPolyFromText";
 
-        public ST_MPolyFromText(Expression[] parameters) {
+        public MPoly(Expression[] parameters) {
             super(parameters);
         }
 
@@ -359,17 +320,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_Point value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the well-known text representation of an
      * ST_Point value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_PointFromText extends ST_XFromText {
+    public static final class Point extends ST_XFromText {
 
         public static final String NAME = "ST_PointFromText";
 
-        public ST_PointFromText(Expression[] parameters) {
+        public Point(Expression[] parameters) {
             super(parameters);
         }
 
@@ -389,17 +345,12 @@ public abstract class ST_XFromText extends AbstractSpatialFunction {
      * Return an ST_Polygon value which is transformed from a CHARACTER LARGE
      * OBJECT value that represents the well-known text representation of an
      * ST_Polygon value.
-     *
-     * @author Johann Sorel (Geomatys)
-     * @version 2.0
-     * @since 2.0
-     * @module
      */
-    public static final class ST_PolyFromText extends ST_XFromText {
+    public static final class Poly extends ST_XFromText {
 
         public static final String NAME = "ST_PolyFromText";
 
-        public ST_PolyFromText(Expression[] parameters) {
+        public Poly(Expression[] parameters) {
             super(parameters);
         }
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/SpatialFunctionFactory.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/SpatialFunctionFactory.java
deleted file mode 100644
index 6b061e3..0000000
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/SpatialFunctionFactory.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.internal.filter.sqlmm.todo;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.logging.Logger;
-import org.apache.sis.util.logging.Logging;
-
-/**
- * SQL/MM spatial function factory.
- *
- * @author Johann Sorel (Geomatys)
- * @version 2.0
- * @since   2.0
- * @module
- */
-public class SpatialFunctionFactory implements OSQLFunctionFactory{
-
-    static final Logger LOGGER = Logging.getLogger("org.geotoolkit.data.orientdb.function");
-
-    private static final Map<String,Object> FUNCTIONS = new HashMap<String, Object>();
-    private static final Map<String,Object> FUNCTIONS_UPPERCASE = new HashMap<String, Object>();
-    static {
-
-        //geometric constructor function
-        FUNCTIONS.put(ST_Point.NAME, ST_Point.class);
-        FUNCTIONS.put(ST_LineString.NAME, ST_LineString.class);
-        FUNCTIONS.put(ST_Polygon.NAME, ST_Polygon.class);
-        FUNCTIONS.put(ST_GeomCollection.NAME, ST_GeomCollection.class);
-        FUNCTIONS.put(ST_MultiPoint.NAME, ST_MultiPoint.class);
-        FUNCTIONS.put(ST_MultiLineString.NAME, ST_MultiLineString.class);
-        FUNCTIONS.put(ST_MultiPolygon.NAME, ST_MultiPolygon.class);
-
-        FUNCTIONS.put(ST_GeomFromText.NAME, ST_GeomFromText.class);
-        FUNCTIONS.put(ST_PointFromText.NAME, ST_PointFromText.class);
-        FUNCTIONS.put(ST_LineFromText.NAME, ST_LineFromText.class);
-        FUNCTIONS.put(ST_PolyFromText.NAME, ST_PolyFromText.class);
-        FUNCTIONS.put(ST_BdPolyFromText.NAME, ST_BdPolyFromText.class);
-        FUNCTIONS.put(ST_GeomCollFromText.NAME, ST_GeomCollFromText.class);
-        FUNCTIONS.put(ST_MPointFromText.NAME, ST_MPointFromText.class);
-        FUNCTIONS.put(ST_MLineFromText.NAME, ST_MLineFromText.class);
-        FUNCTIONS.put(ST_MPolyFromText.NAME, ST_MPolyFromText.class);
-        FUNCTIONS.put(ST_BdMPolyFromText.NAME, ST_BdMPolyFromText.class);
-
-        FUNCTIONS.put(ST_GeomFromWKB.NAME, ST_GeomFromWKB.class);
-        FUNCTIONS.put(ST_PointFromWKB.NAME, ST_PointFromWKB.class);
-        FUNCTIONS.put(ST_LineFromWKB.NAME, ST_LineFromWKB.class);
-        FUNCTIONS.put(ST_PolyFromWKB.NAME, ST_PolyFromWKB.class);
-        FUNCTIONS.put(ST_BdPolyFromWKB.NAME, ST_BdPolyFromWKB.class);
-        FUNCTIONS.put(ST_GeomCollFromWKB.NAME, ST_GeomCollFromWKB.class);
-        FUNCTIONS.put(ST_MPointFromWKB.NAME, ST_MPointFromWKB.class);
-        FUNCTIONS.put(ST_MLineFromWKB.NAME, ST_MLineFromWKB.class);
-        FUNCTIONS.put(ST_MPolyFromWKB.NAME, ST_MPolyFromWKB.class);
-        FUNCTIONS.put(ST_BdMPolyFromWKB.NAME, ST_BdMPolyFromWKB.class);
-
-        FUNCTIONS.put(ST_GeomFromGML.NAME, ST_GeomFromGML.class);
-        FUNCTIONS.put(ST_PointFromGML.NAME, ST_PointFromGML.class);
-        FUNCTIONS.put(ST_LineFromGML.NAME, ST_LineFromGML.class);
-        FUNCTIONS.put(ST_PolyFromGML.NAME, ST_PolyFromGML.class);
-        FUNCTIONS.put(ST_GeomCollFromGML.NAME, ST_GeomCollFromGML.class);
-        FUNCTIONS.put(ST_MPointFromGML.NAME, ST_MPointFromGML.class);
-        FUNCTIONS.put(ST_MLineFromGML.NAME, ST_MLineFromGML.class);
-        FUNCTIONS.put(ST_MPolyFromGML.NAME, ST_MPolyFromGML.class);
-
-        for(Entry<String,Object> entry : FUNCTIONS.entrySet()){
-            FUNCTIONS_UPPERCASE.put(entry.getKey().toUpperCase(), entry.getValue());
-        }
-
-    }
-
-    @Override
-    public Set<String> getFunctionNames() {
-        return FUNCTIONS.keySet();
-    }
-
-    @Override
-    public OSQLFunction createFunction(String name) {
-        name = name.toUpperCase();
-        final Object obj = FUNCTIONS_UPPERCASE.get(name);
-
-        if (obj == null) {
-            throw new OCommandExecutionException("Unknowned function name :" + name);
-        }
-
-        if (obj instanceof OSQLFunction) {
-            return (OSQLFunction) obj;
-        } else {
-            //it's a class
-            final Class clazz = (Class) obj;
-            try {
-                return (OSQLFunction) clazz.newInstance();
-            } catch (Exception e) {
-                throw new OCommandExecutionException("Error in creation of function " + name
-                        + "(). Probably there is not an empty constructor or the constructor generates errors", e);
-            }
-        }
-
-    }
-
-    @Override
-    public boolean hasFunction(String name) {
-        name = name.toUpperCase();
-        return FUNCTIONS_UPPERCASE.containsKey(name);
-    }
-
-}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/SpatialMethodFactory.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/SpatialMethodFactory.java
deleted file mode 100644
index 84dcf8e..0000000
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/SpatialMethodFactory.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.internal.filter.sqlmm.todo;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * SQL/MM (ISO 13249-3) spatial methods.
- * TODO this should be OSQLMethods but methods can't use indexes so spatial queries would be slow.
- *
- * @author Johann Sorel (Geomatys)
- * @version 2.0
- * @since   2.0
- * @module
- */
-public class SpatialMethodFactory implements OSQLMethodFactory {
-
-    private static final Map<String,Object> METHODS = new HashMap<String, Object>();
-    private static final Map<String,Object> METHODS_UPPERCASE = new HashMap<String, Object>();
-
-    public SpatialMethodFactory() {
-
-        //geometry methods
-        METHODS.put(ST_GeometryType.NAME, ST_GeometryType.class);
-        METHODS.put(ST_Dimension.NAME, ST_Dimension.class);
-        METHODS.put(ST_CoordDim.NAME, ST_CoordDim.class);
-        METHODS.put(ST_SRID.NAME, ST_SRID.class);
-        METHODS.put(ST_Transform.NAME, ST_Transform.class);
-        METHODS.put(ST_IsEmpty.NAME, ST_IsEmpty.class);
-        METHODS.put(ST_IsSimple.NAME, ST_IsSimple.class);
-        METHODS.put(ST_IsValid.NAME, ST_IsValid.class);
-        METHODS.put(ST_Is3D.NAME, ST_Is3D.class);
-        METHODS.put(ST_Boundary.NAME, ST_Boundary.class);
-        METHODS.put(ST_Envelope.NAME, ST_Envelope.class);
-        METHODS.put(ST_ConvexHull.NAME, ST_ConvexHull.class);
-        METHODS.put(ST_Buffer.NAME, ST_Buffer.class);
-        METHODS.put(ST_Intersection.NAME, ST_Intersection.class);
-        METHODS.put(ST_Union.NAME, ST_Union.class);
-        METHODS.put(ST_Difference.NAME, ST_Difference.class);
-        METHODS.put(ST_SymDifference.NAME, ST_SymDifference.class);
-        METHODS.put(ST_Distance.NAME, ST_Distance.class);
-        METHODS.put(ST_Disjoint.NAME, ST_Disjoint.class);
-        METHODS.put(ST_Equals.NAME, ST_Equals.class);
-        METHODS.put(ST_Intersects.NAME, ST_Intersects.class);
-        METHODS.put(ST_Relate.NAME, ST_Relate.class);
-        METHODS.put(ST_Contains.NAME, ST_Contains.class);
-        METHODS.put(ST_Crosses.NAME, ST_Crosses.class);
-        METHODS.put(ST_Overlaps.NAME, ST_Overlaps.class);
-        METHODS.put(ST_Touches.NAME, ST_Touches.class);
-        METHODS.put(ST_Within.NAME, ST_Within.class);
-        METHODS.put(ST_ToGeomColl.NAME, ST_ToGeomColl.class);
-        METHODS.put(ST_ToLineString.NAME, ST_ToLineString.class);
-        METHODS.put(ST_ToMultiLine.NAME, ST_ToMultiLine.class);
-        METHODS.put(ST_ToMultiPoint.NAME, ST_ToMultiPoint.class);
-        METHODS.put(ST_ToMultiPolygon.NAME, ST_ToMultiPolygon.class);
-        METHODS.put(ST_ToPoint.NAME, ST_ToPoint.class);
-        METHODS.put(ST_ToPolygon.NAME, ST_ToPolygon.class);
-        METHODS.put(ST_AsText.NAME, ST_AsText.class);
-        METHODS.put(ST_AsBinary.NAME, ST_AsBinary.class);
-        METHODS.put(ST_AsGML.NAME, ST_AsGML.class);
-
-        //point methods
-        METHODS.put(Point_ST_X.NAME, Point_ST_X.class);
-        METHODS.put(Point_ST_Y.NAME, Point_ST_Y.class);
-        METHODS.put(Point_ST_Z.NAME, Point_ST_Z.class);
-        METHODS.put(Point_ST_ExplicitPoint.NAME, Point_ST_ExplicitPoint.class);
-
-        //curve methods
-        METHODS.put(Curve_ST_Length.NAME, Curve_ST_Length.class);
-        METHODS.put(Curve_ST_StartPoint.NAME, Curve_ST_StartPoint.class);
-        METHODS.put(Curve_ST_EndPoint.NAME, Curve_ST_EndPoint.class);
-        METHODS.put(Curve_ST_IsClosed.NAME, Curve_ST_IsClosed.class);
-        METHODS.put(Curve_ST_IsRing.NAME, Curve_ST_IsRing.class);
-
-        //line methods
-        METHODS.put(Line_ST_NumPoints.NAME, Line_ST_NumPoints.class);
-        METHODS.put(Line_ST_PointN.NAME, Line_ST_PointN.class);
-
-        //surface methods
-        METHODS.put(Surface_ST_Area.NAME, Surface_ST_Area.class);
-        METHODS.put(Surface_ST_Centroid.NAME, Surface_ST_Centroid.class);
-        METHODS.put(Surface_ST_Perimeter.NAME, Surface_ST_Perimeter.class);
-        METHODS.put(Surface_ST_PointOnSurface.NAME, Surface_ST_PointOnSurface.class);
-
-        //curvepolygon methods
-        METHODS.put(CurvePolygon_ST_NumInteriorRings.NAME, CurvePolygon_ST_NumInteriorRings.class);
-        METHODS.put(CurvePolygon_ST_InteriorRingN.NAME, CurvePolygon_ST_InteriorRingN.class);
-        METHODS.put(CurvePolygon_ST_ExteriorRing.NAME, CurvePolygon_ST_ExteriorRing.class);
-
-        //geomcollection methods
-        METHODS.put(GeomColl_ST_NumGeometries.NAME, GeomColl_ST_NumGeometries.class);
-        METHODS.put(GeomColl_ST_GeometryN.NAME, GeomColl_ST_GeometryN.class);
-
-
-        for(Map.Entry<String,Object> entry : METHODS.entrySet()){
-            METHODS_UPPERCASE.put(entry.getKey().toUpperCase(), entry.getValue());
-        }
-    }
-
-    @Override
-    public boolean hasMethod(String name) {
-        name = name.toUpperCase();
-        return METHODS_UPPERCASE.containsKey(name);
-    }
-
-    @Override
-    public Set<String> getMethodNames() {
-        return METHODS.keySet();
-    }
-
-    @Override
-    public OSQLMethod createMethod(String name) throws OCommandExecutionException {
-        name = name.toUpperCase();
-        final Object obj = METHODS_UPPERCASE.get(name);
-
-        if (obj == null) {
-            throw new OCommandExecutionException("Unknowned method name :" + name);
-        }
-
-        if (obj instanceof OSQLMethod) {
-            return (OSQLMethod) obj;
-        } else {
-            //it's a class
-            final Class clazz = (Class) obj;
-            try {
-                return (OSQLMethod) clazz.newInstance();
-            } catch (Exception e) {
-                throw new OCommandExecutionException("Error in creation of method " + name
-                        + "(). Probably there is not an empty constructor or the constructor generates errors", e);
-            }
-        }
-    }
-
-}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Area.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Area.java
index 7830971..a02a6b0 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Area.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Area.java
@@ -31,7 +31,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Surface_ST_Area extends AbstractAccessorSpatialMethod<Geometry> {
+public final class Surface_ST_Area extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Area";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Centroid.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Centroid.java
index 122855e..4ad77b0 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Centroid.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Centroid.java
@@ -32,7 +32,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Surface_ST_Centroid extends AbstractAccessorSpatialMethod<Geometry> {
+public final class Surface_ST_Centroid extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Centroid";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Perimeter.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Perimeter.java
index 7331be9..436d8ce 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Perimeter.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_Perimeter.java
@@ -32,7 +32,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Surface_ST_Perimeter extends AbstractAccessorSpatialMethod<Geometry> {
+public final class Surface_ST_Perimeter extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_Perimeter";
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_PointOnSurface.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_PointOnSurface.java
index 76ba16b..6f021f7 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_PointOnSurface.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/Surface_ST_PointOnSurface.java
@@ -32,7 +32,7 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class Surface_ST_PointOnSurface extends AbstractAccessorSpatialMethod<Geometry> {
+public final class Surface_ST_PointOnSurface extends AbstractAccessorSpatialFunction<Geometry> {
 
     public static final String NAME = "ST_PointOnSurface";
 


Mime
View raw message