sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jso...@apache.org
Subject [sis] 01/02: SQL/MM : cleaning code
Date Tue, 26 Nov 2019 16:36:09 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 fb1c2aeb919e733e511092b5f321dcbdc6622a2f
Author: jsorel <johann.sorel@geomatys.com>
AuthorDate: Tue Nov 26 17:20:25 2019 +0100

    SQL/MM : cleaning code
---
 .../filter/sqlmm/todo/AbstractGeomConstructor.java |  2 +-
 .../filter/sqlmm/todo/AbstractGeomFromBinary.java  |  2 +-
 .../filter/sqlmm/todo/AbstractGeomFromGML.java     |  2 +-
 .../filter/sqlmm/todo/AbstractGeomFromText.java    |  2 +-
 .../sqlmm/todo/CurvePolygon_ST_ExteriorRing.java   |  2 +-
 .../sqlmm/todo/CurvePolygon_ST_InteriorRingN.java  |  2 +-
 .../todo/CurvePolygon_ST_NumInteriorRings.java     | 14 ++++++++++--
 .../filter/sqlmm/todo/Curve_ST_EndPoint.java       | 16 ++++++++++---
 .../filter/sqlmm/todo/Curve_ST_IsClosed.java       | 14 ++++++++++--
 .../filter/sqlmm/todo/Curve_ST_IsRing.java         | 14 ++++++++++--
 .../filter/sqlmm/todo/Curve_ST_Length.java         |  3 ++-
 .../filter/sqlmm/todo/Curve_ST_StartPoint.java     | 16 ++++++++++---
 .../filter/sqlmm/todo/GeomColl_ST_GeometryN.java   | 26 +++++++++++++++++++---
 .../sqlmm/todo/GeomColl_ST_NumGeometries.java      | 14 ++++++++++--
 .../filter/sqlmm/todo/Line_ST_NumPoints.java       | 14 ++++++++++--
 .../internal/filter/sqlmm/todo/Line_ST_PointN.java | 24 ++++++++++++++++++--
 .../filter/sqlmm/todo/Point_ST_ExplicitPoint.java  | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/Point_ST_X.java | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/Point_ST_Y.java | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/Point_ST_Z.java | 14 ++++++++++--
 .../internal/filter/sqlmm/todo/ST_AsBinary.java    | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_AsGML.java   | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_AsText.java  | 14 ++++++++++--
 .../filter/sqlmm/todo/ST_BdMPolyFromText.java      | 17 +++++++++++---
 .../filter/sqlmm/todo/ST_BdMPolyFromWKB.java       | 16 ++++++++++---
 .../filter/sqlmm/todo/ST_BdPolyFromText.java       | 17 +++++++++++---
 .../filter/sqlmm/todo/ST_BdPolyFromWKB.java        | 17 +++++++++++---
 .../internal/filter/sqlmm/todo/ST_Boundary.java    | 16 ++++++++++---
 .../sis/internal/filter/sqlmm/todo/ST_Buffer.java  | 26 +++++++++++++++++++---
 .../internal/filter/sqlmm/todo/ST_Contains.java    |  9 ++++++--
 .../internal/filter/sqlmm/todo/ST_ConvexHull.java  | 16 ++++++++++---
 .../internal/filter/sqlmm/todo/ST_CoordDim.java    | 19 +++++++++++-----
 .../sis/internal/filter/sqlmm/todo/ST_Crosses.java | 12 ++++++----
 .../internal/filter/sqlmm/todo/ST_Difference.java  | 11 ++++++---
 .../internal/filter/sqlmm/todo/ST_Dimension.java   | 14 ++++++++++--
 .../internal/filter/sqlmm/todo/ST_Disjoint.java    |  9 ++++++--
 .../internal/filter/sqlmm/todo/ST_Distance.java    |  9 ++++++--
 .../internal/filter/sqlmm/todo/ST_Envelope.java    | 16 ++++++++++---
 .../sis/internal/filter/sqlmm/todo/ST_Equals.java  |  9 ++++++--
 .../filter/sqlmm/todo/ST_GeomCollFromGML.java      | 13 +++++++++--
 .../filter/sqlmm/todo/ST_GeomCollFromText.java     | 13 +++++++++--
 .../filter/sqlmm/todo/ST_GeomCollFromWKB.java      | 15 ++++++++++---
 .../filter/sqlmm/todo/ST_GeomCollection.java       | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_GeomFromGML.java | 13 +++++++++--
 .../filter/sqlmm/todo/ST_GeomFromText.java         | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_GeomFromWKB.java | 13 +++++++++--
 .../filter/sqlmm/todo/ST_GeometryType.java         | 14 ++++++++++--
 .../filter/sqlmm/todo/ST_Intersection.java         | 11 ++++++---
 .../internal/filter/sqlmm/todo/ST_Intersects.java  |  9 ++++++--
 .../sis/internal/filter/sqlmm/todo/ST_Is3D.java    | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_IsEmpty.java | 14 ++++++++++--
 .../internal/filter/sqlmm/todo/ST_IsSimple.java    | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_IsValid.java | 14 ++++++++++--
 .../internal/filter/sqlmm/todo/ST_LineFromGML.java | 13 +++++++++--
 .../filter/sqlmm/todo/ST_LineFromText.java         | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_LineFromWKB.java | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_LineString.java  | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MLineFromGML.java         | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MLineFromText.java        | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MLineFromWKB.java         | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MPointFromGML.java        | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MPointFromText.java       | 14 ++++++++++--
 .../filter/sqlmm/todo/ST_MPointFromWKB.java        | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MPolyFromGML.java         | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MPolyFromText.java        | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MPolyFromWKB.java         | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MultiLineString.java      | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_MultiPoint.java  | 13 +++++++++--
 .../filter/sqlmm/todo/ST_MultiPolygon.java         | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_Overlaps.java    |  9 ++++++--
 .../sis/internal/filter/sqlmm/todo/ST_Point.java   | 21 +++++++++++++----
 .../filter/sqlmm/todo/ST_PointFromGML.java         | 13 +++++++++--
 .../filter/sqlmm/todo/ST_PointFromText.java        | 13 +++++++++--
 .../filter/sqlmm/todo/ST_PointFromWKB.java         | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_PolyFromGML.java | 13 +++++++++--
 .../filter/sqlmm/todo/ST_PolyFromText.java         | 13 +++++++++--
 .../internal/filter/sqlmm/todo/ST_PolyFromWKB.java | 15 ++++++++++---
 .../sis/internal/filter/sqlmm/todo/ST_Polygon.java | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_Relate.java  | 19 ++++++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_SRID.java    | 14 ++++++++++--
 .../filter/sqlmm/todo/ST_SymDifference.java        |  9 ++++++--
 .../internal/filter/sqlmm/todo/ST_ToGeomColl.java  | 14 ++++++++++--
 .../filter/sqlmm/todo/ST_ToLineString.java         | 14 ++++++++++--
 .../internal/filter/sqlmm/todo/ST_ToMultiLine.java | 14 ++++++++++--
 .../filter/sqlmm/todo/ST_ToMultiPoint.java         | 14 ++++++++++--
 .../filter/sqlmm/todo/ST_ToMultiPolygon.java       | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_ToPoint.java | 14 ++++++++++--
 .../internal/filter/sqlmm/todo/ST_ToPolygon.java   | 14 ++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_Touches.java |  9 ++++++--
 .../internal/filter/sqlmm/todo/ST_Transform.java   | 23 +++++++++++++++++--
 .../sis/internal/filter/sqlmm/todo/ST_Union.java   |  9 ++++++--
 .../sis/internal/filter/sqlmm/todo/ST_Within.java  |  9 ++++++--
 .../filter/sqlmm/todo/Surface_ST_Area.java         | 14 ++++++++++--
 .../filter/sqlmm/todo/Surface_ST_Centroid.java     | 14 ++++++++++--
 .../filter/sqlmm/todo/Surface_ST_Perimeter.java    | 14 ++++++++++--
 .../sqlmm/todo/Surface_ST_PointOnSurface.java      | 14 ++++++++++--
 96 files changed, 1053 insertions(+), 207 deletions(-)

diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomConstructor.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomConstructor.java
index 70c8daf..2b0e111 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomConstructor.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomConstructor.java
@@ -43,7 +43,7 @@ public abstract class AbstractGeomConstructor extends AbstractSpatialFunction {
         return 2;
     }
 
-    public abstract Class getExpectedClass();
+    protected abstract Class getExpectedClass();
 
     public String getSyntax() {
         return getName() + "( wkt [,srid] ) or " + getName() + "( wkb [,srid] )";
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromBinary.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromBinary.java
index 27c97b6..5de6e39 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromBinary.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromBinary.java
@@ -43,7 +43,7 @@ public abstract class AbstractGeomFromBinary extends AbstractSpatialFunction {
         return 2;
     }
 
-    public abstract Class getExpectedClass();
+    protected abstract Class getExpectedClass();
 
     public String getSyntax() {
         return getName() + " ( <wkb> [,<srid>] )";
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromGML.java
index 51ba67b..690b9d1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromGML.java
@@ -43,7 +43,7 @@ public abstract class AbstractGeomFromGML extends AbstractSpatialFunction {
         return 2;
     }
 
-    public abstract Class getExpectedClass();
+    protected abstract Class getExpectedClass();
 
     public String getSyntax() {
         return getName() + " ( <gml> [,<srid>] )";
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromText.java
index a7d4d48..17e4e07 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/AbstractGeomFromText.java
@@ -43,7 +43,7 @@ public abstract class AbstractGeomFromText extends AbstractSpatialFunction {
         return 2;
     }
 
-    public abstract Class getExpectedClass();
+    protected abstract Class getExpectedClass();
 
     public String getSyntax() {
         return getName() + " ( <text> [,<srid>] )";
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 ac0df49..a8022d0 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ExteriorRing. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ExteriorRing. <br>
  * Observe the ST_PrivateExteriorRing attribute of an ST_CurvePolygon value.
  *
  * @author Johann Sorel (Geomatys)
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 05d767f..dc34048 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_InteriorRingN. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_InteriorRingN. <br>
  * Return the specified element in the ST_PrivateInteriorRings attribute of an ST_CurvePolygon value.
  *
  * @author Johann Sorel (Geomatys)
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 3bf0a08..447202d 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_NumInteriorRings. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_NumInteriorRings. <br>
  * Return the cardinality of the ST_PrivateInteriorRings attribute of an ST_CurvePolygon value.
  *
  * This class should be for all curvepolygon types, but JTS only has Polygon.
@@ -36,7 +36,17 @@ public final class CurvePolygon_ST_NumInteriorRings extends AbstractAccessorSpat
     public static final String NAME = "ST_NumInteriorRings";
 
     public CurvePolygon_ST_NumInteriorRings(Expression[] parameters) {
-        super(NAME,Polygon.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Polygon> getExpectedClass() {
+        return Polygon.class;
     }
 
     @Override
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 2edd038..e4ad389 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_EndPoint. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_EndPoint. <br>
  * Return an ST_Point value that is the end point of an ST_Curve value including existing z and m coordinate
  * values in the resultant geometry.
  *
@@ -36,13 +36,23 @@ public final class Curve_ST_EndPoint extends AbstractAccessorSpatialMethod<LineS
     public static final String NAME = "ST_EndPoint";
 
     public Curve_ST_EndPoint(Expression[] parameters) {
-        super(NAME,LineString.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
     }
 
     @Override
     public Object execute(LineString geom, Object... params) throws ParseException {
         final Point pt = geom.getEndPoint();
-        return new OSerializableGeometry(pt);
+        return pt;
     }
 
 }
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 adc9b21..be25536 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_IsClosed. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_IsClosed. <br>
  * Test if an ST_Curve value is closed, ignoring z and m coordinate values in the calculations.
  *
  * This class should be for all curve types, but JTS only has LineString.
@@ -36,7 +36,17 @@ public final class Curve_ST_IsClosed extends AbstractAccessorSpatialMethod<LineS
     public static final String NAME = "ST_IsClosed";
 
     public Curve_ST_IsClosed(Expression[] parameters) {
-        super(NAME,LineString.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
     }
 
     @Override
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 9d4a7e2..e94713f 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_IsRing. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_IsRing. <br>
  * Test if an ST_Curve value is a ring, ignoring z and m coordinate values in the calculations.
  *
  * This class should be for all curve types, but JTS only has LineString.
@@ -36,7 +36,17 @@ public final class Curve_ST_IsRing extends AbstractAccessorSpatialMethod<LineStr
     public static final String NAME = "ST_IsRing";
 
     public Curve_ST_IsRing(Expression[] parameters) {
-        super(NAME,LineString.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
     }
 
     @Override
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 de66987..8573d38 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
@@ -18,9 +18,10 @@ package org.apache.sis.internal.filter.sqlmm.todo;
 
 import org.locationtech.jts.geom.Geometry;
 import java.text.ParseException;
+import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Length. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Length. <br>
  * Return the length measurement of an ST_Curve value, ignoring z and m coordinate values in the calculations.
  *
  * This class should be for all curve types, but JTS only has LineString, MultiLineString.
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 6262610..de83dd3 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_StartPoint. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_StartPoint. <br>
  * Return an ST_Point value that is the start point of an ST_Curve value including existing z and m coordinate
  * values in the resultant geometry.
  *
@@ -38,13 +38,23 @@ public final class Curve_ST_StartPoint extends AbstractAccessorSpatialMethod<Lin
     public static final String NAME = "ST_StartPoint";
 
     public Curve_ST_StartPoint(Expression[] parameters) {
-        super(NAME,LineString.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
     }
 
     @Override
     public Object execute(LineString geom, Object... params) throws ParseException {
         final Point pt = geom.getStartPoint();
-        return new OSerializableGeometry(pt);
+        return pt;
     }
 
 }
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 26c5a97..d55cc7b 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeometryN. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_GeometryN. <br>
  * Return the specified ST_Geometry value in the ST_PrivateGeometries attribute of an ST_GeomCollection
  * value.
  *
@@ -35,7 +35,27 @@ public final class GeomColl_ST_GeometryN extends AbstractAccessorSpatialMethod<G
     public static final String NAME = "ST_GeometryN";
 
     public GeomColl_ST_GeometryN(Expression[] parameters) {
-        super(NAME,2,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected int getMinParams() {
+        return 2;
+    }
+
+    @Override
+    protected int getMaxParams() {
+        return 2;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
@@ -43,7 +63,7 @@ public final class GeomColl_ST_GeometryN extends AbstractAccessorSpatialMethod<G
         final int index = Integer.parseInt(params[1].toString());
         final Geometry sub = geom.getGeometryN(index-1);
         sub.setSRID(geom.getSRID());
-        return new OSerializableGeometry(sub);
+        return sub;
     }
 
 }
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 006aa31..a1b6a38 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_NumGeometries. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_NumGeometries. <br>
  * Return the cardinality of the ST_PrivateGeometries attribute of an ST_GeomCollection value.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class GeomColl_ST_NumGeometries extends AbstractAccessorSpatialMeth
     public static final String NAME = "ST_NumGeometries";
 
     public GeomColl_ST_NumGeometries(Expression[] parameters) {
-        super(NAME, Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 46d0ace..838f96b 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_NumPoints. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_NumPoints. <br>
  * Return the cardinality of the ST_PrivatePoints attribute of an ST_LineString value.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class Line_ST_NumPoints extends AbstractAccessorSpatialMethod<LineS
     public static final String NAME = "ST_NumPoints";
 
     public Line_ST_NumPoints(Expression[] parameters) {
-        super(NAME,LineString.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
     }
 
     @Override
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 272fb0e..7dbc784 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PointN. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_PointN. <br>
  * Return the specified element in the ST_PrivatePoints attribute of an ST_LineString value.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,27 @@ public final class Line_ST_PointN extends AbstractAccessorSpatialMethod<LineStri
     public static final String NAME = "ST_PointN";
 
     public Line_ST_PointN(Expression[] parameters) {
-        super(NAME,2,LineString.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected int getMinParams() {
+        return 2;
+    }
+
+    @Override
+    protected int getMaxParams() {
+        return 2;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
     }
 
     @Override
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 eba3bce..0cdb745 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
@@ -24,7 +24,7 @@ import java.util.List;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ExplicitPoint. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ExplicitPoint. <br>
  * Return the coordinate values as a DOUBLE PRECISION LIST value.
  *
  * @author Johann Sorel (Geomatys)
@@ -37,7 +37,17 @@ public final class Point_ST_ExplicitPoint extends AbstractAccessorSpatialMethod<
     public static final String NAME = "ST_ExplicitPoint";
 
     public Point_ST_ExplicitPoint(Expression[] parameters) {
-        super(NAME,Point.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Point> getExpectedClass() {
+        return Point.class;
     }
 
     @Override
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 8ae9278..65503e5 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_X. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_X. <br>
  * Observe the x coordinate value of an ST_Point value.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class Point_ST_X extends AbstractAccessorSpatialMethod<Point> {
     public static final String NAME = "ST_X";
 
     public Point_ST_X(Expression[] parameters) {
-        super(NAME,Point.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Point> getExpectedClass() {
+        return Point.class;
     }
 
     @Override
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 6bba0b8..37cdc0a 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Y. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Y. <br>
  * Observe the y coordinate value of an ST_Point value.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class Point_ST_Y extends AbstractAccessorSpatialMethod<Point> {
     public static final String NAME = "ST_Y";
 
     public Point_ST_Y(Expression[] parameters) {
-        super(NAME,Point.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Point> getExpectedClass() {
+        return Point.class;
     }
 
     @Override
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 687283f..5f876f4 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Z. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Z. <br>
  * Observe the z coordinate value of an ST_Point value.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class Point_ST_Z extends AbstractAccessorSpatialMethod<Point> {
     public static final String NAME = "ST_Z";
 
     public Point_ST_Z(Expression[] parameters) {
-        super(NAME,Point.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Point> getExpectedClass() {
+        return Point.class;
     }
 
     @Override
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 147dec4..1501349 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
@@ -23,7 +23,7 @@ import org.apache.sis.internal.filter.FilterGeometryUtils;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_AsBinary. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_AsBinary. <br>
  * Return the well-known binary representation of an ST_Geometry value.
  *
  * @author Johann Sorel (Geomatys)
@@ -36,7 +36,17 @@ public final class ST_AsBinary extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_AsBinary";
 
     public ST_AsBinary(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 5b35a4d..ad3187b 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
@@ -29,7 +29,7 @@ import org.opengis.filter.expression.Expression;
 import org.opengis.util.FactoryException;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_AsGML. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_AsGML. <br>
  * Return the GML representation of an ST_Geometry value.
  *
  * @author Johann Sorel (Geomatys)
@@ -42,7 +42,17 @@ public final class ST_AsGML extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_AsGML";
 
     public ST_AsGML(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 17b5bfc..60d50f1 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
@@ -23,7 +23,7 @@ import org.apache.sis.internal.filter.FilterGeometryUtils;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_AsText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_AsText. <br>
  * Return the well-known text representation of an ST_Geometry value.
  *
  * @author Johann Sorel (Geomatys)
@@ -36,7 +36,17 @@ public final class ST_AsText extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_AsText";
 
     public ST_AsText(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromText.java
index 37549e2..5d666ac 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromText.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.internal.filter.sqlmm.todo;
 
+import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.geom.LinearRing;
 import org.locationtech.jts.geom.MultiLineString;
 import org.locationtech.jts.geom.MultiPolygon;
@@ -23,7 +24,7 @@ import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_BdMPolyFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_BdMPolyFromText. <br>
  * 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.
  *
@@ -37,11 +38,21 @@ public final class ST_BdMPolyFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_BdMPolyFromText";
 
     public ST_BdMPolyFromText(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
     @Override
-    protected OSerializableGeometry evaluateNow(Object candidate) {
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
+
+    @Override
+    public Geometry evaluate(Object candidate) {
         final OSerializableGeometry sergeo = super.evaluateNow(context,candidate);
         final MultiLineString mls = (MultiLineString) sergeo.getGeometry();
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromWKB.java
index baedaf7..fdc9abf 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdMPolyFromWKB.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.internal.filter.sqlmm.todo;
 
+import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.geom.LinearRing;
 import org.locationtech.jts.geom.MultiLineString;
 import org.locationtech.jts.geom.MultiPolygon;
@@ -23,7 +24,7 @@ import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_BdMPolyFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_BdMPolyFromWKB. <br>
  * 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.
  *
@@ -37,12 +38,21 @@ public final class ST_BdMPolyFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_BdMPolyFromWKB";
 
     public ST_BdMPolyFromWKB(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
 
     @Override
-    protected OSerializableGeometry evaluate(Object candidate) {
+    public Geometry evaluate(Object candidate) {
         final OSerializableGeometry sergeo = super.evaluateNow(context,candidate);
         final MultiLineString mls = (MultiLineString) sergeo.getGeometry();
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromText.java
index eb8765e..3422644 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromText.java
@@ -16,13 +16,14 @@
  */
 package org.apache.sis.internal.filter.sqlmm.todo;
 
+import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.geom.LinearRing;
 import org.locationtech.jts.geom.MultiLineString;
 import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_BdPolyFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_BdPolyFromText. <br>
  * 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.
  *
@@ -36,11 +37,21 @@ public final class ST_BdPolyFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_BdPolyFromText";
 
     public ST_BdPolyFromText(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
     @Override
-    public OSerializableGeometry evaluateNow(Object candidate) {
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
+
+    @Override
+    public Geometry evaluate(Object candidate) {
         final OSerializableGeometry sergeo = super.evaluateNow(context,candidate);
         final MultiLineString mls = (MultiLineString) sergeo.getGeometry();
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromWKB.java
index 8339bc1..a20b196 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_BdPolyFromWKB.java
@@ -16,13 +16,14 @@
  */
 package org.apache.sis.internal.filter.sqlmm.todo;
 
+import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.geom.LinearRing;
 import org.locationtech.jts.geom.MultiLineString;
 import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_BdPolyFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_BdPolyFromWKB. <br>
  * 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.
  *
@@ -36,11 +37,21 @@ public final class ST_BdPolyFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_BdPolyFromWKB";
 
     public ST_BdPolyFromWKB(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
     @Override
-    public OSerializableGeometry evaluate(Object candidate) {
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
+    
+    @Override
+    public Geometry evaluate(Object candidate) {
         final OSerializableGeometry sergeo = super.evaluateNow(context,candidate);
         final MultiLineString mls = (MultiLineString) sergeo.getGeometry();
 
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 a162f22..be38e76 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Boundary. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Boundary. <br>
  * Return the boundary of the ST_Geometry value, ignoring z and m coordinate values in the calculations and
  * not including them in the resultant geometry.
  *
@@ -35,14 +35,24 @@ public final class ST_Boundary extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_Boundary";
 
     public ST_Boundary(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @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 Geometry bound = geom.getBoundary();
         bound.setSRID(geom.getSRID());
-        return new OSerializableGeometry(bound);
+        return bound;
     }
 
 }
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 f66f2d5..6665c7c 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Buffer. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Buffer. <br>
  * Return the ST_Geometry value that represents all points whose distance from any point of an ST_Geometry
  * value is less than or equal to a specified distance, ignoring z and m coordinate values in the calculations and
  * not including them in the resultant geometry.
@@ -36,7 +36,27 @@ public final class ST_Buffer extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_Buffer";
 
     public ST_Buffer(Expression[] parameters) {
-        super(NAME,2,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected int getMinParams() {
+        return 2;
+    }
+
+    @Override
+    protected int getMaxParams() {
+        return 2;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
@@ -44,7 +64,7 @@ public final class ST_Buffer extends AbstractAccessorSpatialMethod<Geometry> {
         final double distance = Double.parseDouble(params[1].toString());
         final Geometry res = geom.buffer(distance);
         res.setSRID(geom.getSRID());
-        return new OSerializableGeometry(res);
+        return res;
     }
 
 }
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 724b042..2ec8139 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Contains. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Contains. <br>
  * Test if an ST_Geometry value spatially 2D contains another ST_Geometry value, ignoring z and m coordinate
  * values in the calculations.
  *
@@ -35,7 +35,12 @@ public final class ST_Contains extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Contains";
 
     public ST_Contains(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 c2023bb..d45abb8 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ConvexHull. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ConvexHull. <br>
  * Return the convex hull of the ST_Geometry value, ignoring z and m coordinate values in the calculations and
  * not including them in the resultant geometry.
  *
@@ -35,14 +35,24 @@ public final class ST_ConvexHull extends AbstractAccessorSpatialMethod<Geometry>
     public static final String NAME = "ST_ConvexHull";
 
     public ST_ConvexHull(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @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 Geometry res = geom.convexHull();
         res.setSRID(geom.getSRID());
-        return new OSerializableGeometry(res);
+        return res;
     }
 
 }
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 ff4e87c..c6f0cf7 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
@@ -22,12 +22,12 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_CoordDim. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_CoordDim. <br>
  * Return the coordinate dimension of the ST_Geometry value.
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
- * @since   2.0
+ * @since 2.0
  * @module
  */
 public final class ST_CoordDim extends AbstractAccessorSpatialMethod<Geometry> {
@@ -35,16 +35,25 @@ public final class ST_CoordDim extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_CoordDim";
 
     public ST_CoordDim(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @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 Coordinate c = geom.getCoordinate();
-        if(c != null){
+        if (c != null) {
             return Double.isNaN(c.z) ? 2 : 3;
         }
-
         return null;
     }
 
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 2fa0221..cea80ef 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
@@ -21,10 +21,9 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Crosses. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Crosses. <br>
  * Test if an ST_Geometry value spatially 2D crosses another ST_Geometry value, ignoring z and m coordinate
-values in the calculations.
-
+ * values in the calculations.
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -36,7 +35,12 @@ public final class ST_Crosses extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Crosses";
 
     public ST_Crosses(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 96d88fc..d3f774b 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Difference. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Difference. <br>
  * Return an ST_Geometry value that represents the point set difference of two ST_Geometry values, ignoring z
  * and m coordinate values in the calculations and not including them in the resultant geometry.
  *
@@ -35,14 +35,19 @@ public final class ST_Difference extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Difference";
 
     public ST_Difference(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
     public Object execute(Geometry left, Geometry right, Object... params) throws ParseException {
         final Geometry res = left.difference(right);
         res.setSRID(left.getSRID());
-        return new OSerializableGeometry(res);
+        return res;
     }
 
 }
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 e8b29a4..889b8cd 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Dimension. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Dimension. <br>
  * Return the dimension of the ST_Geometry value.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class ST_Dimension extends AbstractAccessorSpatialMethod<Geometry>
     public static final String NAME = "ST_Dimension";
 
     public ST_Dimension(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 1ee8acf..efb6e2c 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Disjoint. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Disjoint. <br>
  * Test if an ST_Geometry value is spatially 2D disjoint from another ST_Geometry value, ignoring z and m
  * coordinate values in the calculations.
  *
@@ -35,7 +35,12 @@ public final class ST_Disjoint extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Disjoint";
 
     public ST_Disjoint(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 09a5686..8a8ac43 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Distance. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Distance. <br>
  * Return the distance between two geometry values, ignoring z and m coordinate values in the calculations.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,12 @@ public final class ST_Distance extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Distance";
 
     public ST_Distance(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 35bb67b..25dfbd1 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Envelope. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Envelope. <br>
  * Return the bounding rectangle for the ST_Geometry value, ignoring z and m coordinate values in the
  * calculations and not including them in the resultant geometry.
  *
@@ -35,14 +35,24 @@ public final class ST_Envelope extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_Envelope";
 
     public ST_Envelope(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @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 Geometry env = geom.getEnvelope();
         env.setSRID(geom.getSRID());
-        return new OSerializableGeometry(env);
+        return env;
     }
 
 }
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 f7bd472..9226eda 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Equals. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Equals. <br>
  * Test if an ST_Geometry value is spatially 2D equal to another ST_Geometry value, ignoring z and m
  * coordinate values in the calculations.
  *
@@ -35,7 +35,12 @@ public final class ST_Equals extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Equals";
 
     public ST_Equals(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromGML.java
index 92c9307..3bc2d2e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.GeometryCollection;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollFromGML. <br/>
+ * 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 ST_GeomCollection value.
  *
@@ -34,7 +34,16 @@ public final class ST_GeomCollFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_GeomCollFromGML";
 
     public ST_GeomCollFromGML(Expression[] parameters){
-        super(NAME, GeometryCollection.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<GeometryCollection> getExpectedClass() {
+        return GeometryCollection.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromText.java
index fd49ec4..587b6a1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.GeometryCollection;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollFromText. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_GeomCollFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_GeomCollFromText";
 
     public ST_GeomCollFromText(Expression[] parameters){
-        super(NAME, GeometryCollection.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<GeometryCollection> getExpectedClass() {
+        return GeometryCollection.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromWKB.java
index cf9d9d5..739feca 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollFromWKB.java
@@ -16,11 +16,11 @@
  */
 package org.apache.sis.internal.filter.sqlmm.todo;
 
-import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryCollection;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollFromWKB. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_GeomCollFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_GeomCollFromWKB";
 
     public ST_GeomCollFromWKB(Expression[] parameters){
-        super(NAME,Geometry.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<GeometryCollection> getExpectedClass() {
+        return GeometryCollection.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollection.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollection.java
index 33405f1..1a61c87 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollection.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomCollection.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.GeometryCollection;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollection. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomCollection. <br>
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -32,7 +32,16 @@ public final class ST_GeomCollection extends AbstractGeomConstructor{
     public static final String NAME = "ST_GeomCollection";
 
     public ST_GeomCollection(Expression[] parameters){
-        super(NAME, GeometryCollection.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<GeometryCollection> getExpectedClass() {
+        return GeometryCollection.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromGML.java
index 6c7e9de..5ac64bc 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Geometry;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomFromGML. <br/>
+ * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_GeomFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_GeomFromGML";
 
     public ST_GeomFromGML(Expression[] parameters){
-        super(NAME,Geometry.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromText.java
index 59dc8a6..849c5cb 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Geometry;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomFromText. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_GeomFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_GeomFromText";
 
     public ST_GeomFromText(Expression[] parameters){
-        super(NAME,Geometry.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromWKB.java
index 2157cd7..9574ddc 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_GeomFromWKB.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Geometry;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_GeomFromWKB. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_GeomFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_GeomFromWKB";
 
     public ST_GeomFromWKB(Expression[] parameters){
-        super(NAME,Geometry.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
+    }
 }
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 dbf374c..2ff77df 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
@@ -31,7 +31,7 @@ import java.util.Map.Entry;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_GeometryType. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_GeometryType. <br>
  * Returns the geometry type name.
  *
  * @author Johann Sorel (Geomatys)
@@ -56,7 +56,17 @@ public final class ST_GeometryType extends AbstractAccessorSpatialMethod<Geometr
     }
 
     public ST_GeometryType(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 10608d2..afabeeb 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Intersection. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Intersection. <br>
  * Return an ST_Geometry value that represents the point set intersection of two ST_Geometry values, ignoring
  * z and m coordinate values in the calculations and not including them in the resultant geometry.
  *
@@ -35,14 +35,19 @@ public final class ST_Intersection extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Intersection";
 
     public ST_Intersection(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
     public Object execute(Geometry left, Geometry right, Object... params) throws ParseException {
         final Geometry res = left.intersection(right);
         res.setSRID(left.getSRID());
-        return new OSerializableGeometry(res);
+        return res;
     }
 
 }
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 38bcc20..37b6506 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Intersects. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Intersects. <br>
  * Test if an ST_Geometry value spatially 2D intersects another ST_Geometry value, ignoring z and m
 coordinate values in the calculations.
 
@@ -36,7 +36,12 @@ public final class ST_Intersects extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Intersects";
 
     public ST_Intersects(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 6b63336..0db435e 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Is3D. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Is3D. <br>
  * Test if an ST_Geometry value has z coordinate values.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_Is3D extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_Is3D";
 
     public ST_Is3D(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 f4696f2..b02eec7 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_IsEmpty. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_IsEmpty. <br>
  * Test if an ST_Geometry value corresponds to the empty set.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class ST_IsEmpty extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_IsEmpty";
 
     public ST_IsEmpty(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 8f6fc68..fa8e607 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_IsSimple. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_IsSimple. <br>
  * Test if an ST_Geometry value has no anomalous geometric points, such as self intersection, ignoring z
  * coordinate values in the determination.
  *
@@ -35,7 +35,17 @@ public final class ST_IsSimple extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_IsSimple";
 
     public ST_IsSimple(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 5646d16..195b218 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_IsValid. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_IsValid. <br>
  * Test if an ST_Geometry value is well formed.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class ST_IsValid extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_IsValid";
 
     public ST_IsValid(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromGML.java
index 5f81128..9aa5b89 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.LineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_LineFromGML. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_LineFromGML. <br>
  * Return an ST_LineString value which is transformed from a CHARACTER LARGE OBJECT value that
  * represents the GML representation of an ST_LineString value.
  *
@@ -34,7 +34,16 @@ public final class ST_LineFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_LineFromGML";
 
     public ST_LineFromGML(Expression[] parameters){
-        super(NAME, LineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromText.java
index 9d5c864..0b3e09f 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.LineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_LineFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_LineFromText. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_LineFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_LineFromText";
 
     public ST_LineFromText(Expression[] parameters){
-        super(NAME, LineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromWKB.java
index c503996..4d37ef0 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineFromWKB.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.LineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_LineFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_LineFromWKB. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_LineFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_LineFromWKB";
 
     public ST_LineFromWKB(Expression[] parameters){
-        super(NAME, LineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineString.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineString.java
index c8c0dc3..a4b18c2 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineString.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_LineString.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.LineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_LineString. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_LineString. <br>
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -32,7 +32,16 @@ public final class ST_LineString extends AbstractGeomConstructor{
     public static final String NAME = "ST_LineString";
 
     public ST_LineString(Expression[] parameters){
-        super(NAME, LineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<LineString> getExpectedClass() {
+        return LineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromGML.java
index b0cee6d..eccf1fc 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiLineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromGML. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromGML. <br>
  * Return an ST_MultiLineString value which is transformed from a CHARACTER LARGE OBJECT value that
  * represents the GML representationof an ST_MultiLineString value.
  *
@@ -34,7 +34,16 @@ public final class ST_MLineFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_MLineFromGML";
 
     public ST_MLineFromGML(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromText.java
index b714a75..c7d46ad 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiLineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MLineFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MLineFromText. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_MLineFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_MLineFromText";
 
     public ST_MLineFromText(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromWKB.java
index a021e38..412321a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MLineFromWKB.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiLineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromWKB. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_MLineFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_MLineFromWKB";
 
     public ST_MLineFromWKB(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromGML.java
index 8dcc73e..3f0b242 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPoint;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromGML. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromGML. <br>
  * Return an ST_MultiPoint value which is transformed from a CHARACTER LARGE OBJECT value that
  * represents the GML representation of an ST_MultiPoint value.
  *
@@ -34,7 +34,16 @@ public final class ST_MPointFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_MPointFromGML";
 
     public ST_MPointFromGML(Expression[] parameters){
-        super(NAME, MultiPoint.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPoint> getExpectedClass() {
+        return MultiPoint.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromText.java
index f53794b..bdbe93d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPoint;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromText. <br>
  * 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.
  *
@@ -34,7 +34,17 @@ public final class ST_MPointFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_MPointFromText";
 
     public ST_MPointFromText(Expression[] parameters){
-        super(NAME, MultiPoint.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPoint> getExpectedClass() {
+        return MultiPoint.class;
     }
 
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromWKB.java
index 75e876c..f5b2467 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPointFromWKB.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPoint;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPointFromWKB. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_MPointFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_MPointFromWKB";
 
     public ST_MPointFromWKB(Expression[] parameters){
-        super(NAME, MultiPoint.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPoint> getExpectedClass() {
+        return MultiPoint.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromGML.java
index 224c0d6..74237a0 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPolygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPolyFromGML. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPolyFromGML. <br>
  * Return an ST_MultiPolygon value which is transformed from a CHARACTER LARGE OBJECT value that
  * represents the GML representationof an ST_MultiPolygon value.
  *
@@ -34,7 +34,16 @@ public final class ST_MPolyFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_MPolyFromGML";
 
     public ST_MPolyFromGML(Expression[] parameters){
-        super(NAME, MultiPolygon.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPolygon> getExpectedClass() {
+        return MultiPolygon.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromText.java
index c2cc4b3..d093b28 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPolygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPolyFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPolyFromText. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_MPolyFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_MPolyFromText";
 
     public ST_MPolyFromText(Expression[] parameters){
-        super(NAME, MultiPolygon.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPolygon> getExpectedClass() {
+        return MultiPolygon.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromWKB.java
index 49114f0..375673d 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MPolyFromWKB.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPolygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MPolyFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MPolyFromWKB. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_MPolyFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_MPolyFromWKB";
 
     public ST_MPolyFromWKB(Expression[] parameters){
-        super(NAME, MultiPolygon.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPolygon> getExpectedClass() {
+        return MultiPolygon.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiLineString.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiLineString.java
index 1a807ab..0667ccb 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiLineString.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiLineString.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiLineString;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MultiLineString. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MultiLineString. <br>
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -32,7 +32,16 @@ public final class ST_MultiLineString extends AbstractGeomConstructor{
     public static final String NAME = "ST_MultiLineString";
 
     public ST_MultiLineString(Expression[] parameters){
-        super(NAME, MultiLineString.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiLineString> getExpectedClass() {
+        return MultiLineString.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPoint.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPoint.java
index 9caaa9b..609b64c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPoint.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPoint.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPoint;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MultiPoint. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MultiPoint. <br>
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -32,7 +32,16 @@ public final class ST_MultiPoint extends AbstractGeomConstructor{
     public static final String NAME = "ST_MultiPoint";
 
     public ST_MultiPoint(Expression[] parameters){
-        super(NAME, MultiPoint.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPoint> getExpectedClass() {
+        return MultiPoint.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPolygon.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPolygon.java
index 04794dc..3269a74 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPolygon.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_MultiPolygon.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.MultiPolygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_MultiPolygon. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_MultiPolygon. <br>
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -32,7 +32,16 @@ public final class ST_MultiPolygon extends AbstractGeomConstructor{
     public static final String NAME = "ST_MultiPolygon";
 
     public ST_MultiPolygon(Expression[] parameters){
-        super(NAME, MultiPolygon.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<MultiPolygon> getExpectedClass() {
+        return MultiPolygon.class;
+    }
 }
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 17a5c06..b01d930 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Overlaps. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Overlaps. <br>
  * Test if an ST_Geometry value spatially 2D overlaps another ST_Geometry value, ignoring z and m coordinate
  * values in the calculations.
  *
@@ -35,7 +35,12 @@ public final class ST_Overlaps extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Overlaps";
 
     public ST_Overlaps(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 3675df3..8c8233e 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
@@ -23,7 +23,7 @@ import java.math.BigDecimal;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Point. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Point. <br>
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -35,19 +35,32 @@ public final class ST_Point extends AbstractSpatialFunction{
     public static final String NAME = "ST_Point";
 
     public ST_Point(Expression[] parameters){
-        super(NAME,1,4);
+        super(parameters);
     }
 
     @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected int getMinParams() {
+        return 1;
+    }
+
+    @Override
+    protected int getMaxParams() {
+        return 4;
+    }
+
     public String getSyntax() {
         return "ST_Point( x ,y [,z] [,srid] ) "
           + "or ST_Point( wkt [,srid] ) "
           + "or ST_Point( wkb [,srid] )";
     }
 
-
     @Override
-    protected Object evaluateNow(OCommandContext context, Object candidate) {
+    public Object evaluate(Object candidate) {
         final int nbarg = children.size();
         final Geometry geom;
         if(nbarg == 1){
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromGML.java
index ff5c680..a97af22 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Point;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PointFromGML. <br/>
+ * 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 representationof an ST_Point.
  *
@@ -34,7 +34,16 @@ public final class ST_PointFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_PointFromGML";
 
     public ST_PointFromGML(Expression[] parameters){
-        super(NAME, Point.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Point> getExpectedClass() {
+        return Point.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromText.java
index 031b4ac..662b0ef 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Point;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PointFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_PointFromText. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_PointFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_PointFromText";
 
     public ST_PointFromText(Expression[] parameters){
-        super(NAME, Point.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Point> getExpectedClass() {
+        return Point.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromWKB.java
index 6178f71..761d5dc 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PointFromWKB.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Point;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PointFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_PointFromWKB. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_PointFromWKB extends AbstractGeomFromBinary{
     public static final String NAME = "ST_PointFromWKB";
 
     public ST_PointFromWKB(Expression[] parameters){
-        super(NAME, Point.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Point> getExpectedClass() {
+        return Point.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromGML.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromGML.java
index 18cd626..3e4bf92 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromGML.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromGML.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PolyFromGML. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_PolyFromGML. <br>
  * Return an ST_Polygon value which is transformed from a CHARACTER LARGE OBJECT value that
  * represents the GML representationof an ST_Polygon value.
  *
@@ -34,7 +34,16 @@ public final class ST_PolyFromGML extends AbstractGeomFromGML{
     public static final String NAME = "ST_PolyFromGML";
 
     public ST_PolyFromGML(Expression[] parameters){
-        super(NAME, Polygon.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Polygon> getExpectedClass() {
+        return Polygon.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromText.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromText.java
index b6a1b6d..1d81020 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromText.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromText.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PolyFromText. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_PolyFromText. <br>
  * 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.
  *
@@ -34,7 +34,16 @@ public final class ST_PolyFromText extends AbstractGeomFromText{
     public static final String NAME = "ST_PolyFromText";
 
     public ST_PolyFromText(Expression[] parameters){
-        super(NAME, Polygon.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Polygon> getExpectedClass() {
+        return Polygon.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromWKB.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromWKB.java
index 2d7893b..1eb8b47 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromWKB.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_PolyFromWKB.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PolyFromWKB. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_PolyFromWKB. <br>
  * 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.
  *
@@ -29,12 +29,21 @@ import org.opengis.filter.expression.Expression;
  * @since   2.0
  * @module
  */
-public final class ST_PolyFromWKB extends AbstractGeomFromBinary{
+public final class ST_PolyFromWKB extends AbstractGeomFromBinary {
 
     public static final String NAME = "ST_PolyFromWKB";
 
     public ST_PolyFromWKB(Expression[] parameters){
-        super(NAME, Polygon.class);
+        super(parameters);
     }
 
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Polygon> getExpectedClass() {
+        return Polygon.class;
+    }
 }
diff --git a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Polygon.java b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Polygon.java
index 5c7b31e..9102819 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Polygon.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/internal/filter/sqlmm/todo/ST_Polygon.java
@@ -20,7 +20,7 @@ import org.locationtech.jts.geom.Polygon;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Polygon. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Polygon. <br>
  *
  * @author Johann Sorel (Geomatys)
  * @version 2.0
@@ -32,7 +32,17 @@ public final class ST_Polygon extends AbstractGeomConstructor{
     public static final String NAME = "ST_Polygon";
 
     public ST_Polygon(Expression[] parameters){
-        super(NAME, Polygon.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Polygon> getExpectedClass() {
+        return Polygon.class;
     }
 
 }
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 cd159ca..e2bb2ba 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Relate. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Relate. <br>
  * Test if an ST_Geometry value is spatially 2D related to another ST_Geometry value, ignoring z and m
  * coordinate values in the calculations.
  *
@@ -35,7 +35,22 @@ public final class ST_Relate extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Relate";
 
     public ST_Relate(Expression[] parameters) {
-        super(NAME,2);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected int getMinParams() {
+        return 2;
+    }
+
+    @Override
+    protected int getMaxParams() {
+        return 2;
     }
 
     @Override
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 26115db..d054ebf 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_SRID. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_SRID. <br>
  * Observe the spatial reference system identifier of the ST_Geometry value.
  *
  * @author Johann Sorel (Geomatys)
@@ -34,7 +34,17 @@ public final class ST_SRID extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_SRID";
 
     public ST_SRID(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 95cb8eb..73d5074 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_SymDifference. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_SymDifference. <br>
  * Return an ST_Geometry value that represents the point set symmetric difference of two ST_Geometry values,
  * ignoring z and m coordinate values in the calculations and not including them in the resultant geometry.
  *
@@ -35,7 +35,12 @@ public final class ST_SymDifference extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_SymDifference";
 
     public ST_SymDifference(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 d6a2c42..4d0acfc 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ToGeomColl. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ToGeomColl. <br>
  * Cast an ST_Geometry value to a specific instantiable subtype of ST_Geometry.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_ToGeomColl extends AbstractAccessorSpatialMethod<Geometry>
     public static final String NAME = "ST_ToGeomColl";
 
     public ST_ToGeomColl(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 fd4bd49..9c1d21a 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ToLineString. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ToLineString. <br>
  * Cast an ST_Geometry value to a specific instantiable subtype of ST_Geometry.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_ToLineString extends AbstractAccessorSpatialMethod<Geometr
     public static final String NAME = "ST_ToLineString";
 
     public ST_ToLineString(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 e6c21bc..b8690e8 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ToMultiLine. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ToMultiLine. <br>
  * Cast an ST_Geometry value to a specific instantiable subtype of ST_Geometry.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_ToMultiLine extends AbstractAccessorSpatialMethod<Geometry
     public static final String NAME = "ST_ToMultiLine";
 
     public ST_ToMultiLine(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 7a41e3d..022ec9a 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ToMultiPoint. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ToMultiPoint. <br>
  * Cast an ST_Geometry value to a specific instantiable subtype of ST_Geometry.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_ToMultiPoint extends AbstractAccessorSpatialMethod<Geometr
     public static final String NAME = "ST_ToMultiPoint";
 
     public ST_ToMultiPoint(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 61b40bc..94eea09 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ToMultiPolygon. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ToMultiPolygon. <br>
  * Cast an ST_Geometry value to a specific instantiable subtype of ST_Geometry.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_ToMultiPolygon extends AbstractAccessorSpatialMethod<Geome
     public static final String NAME = "ST_ToMultiPolygon";
 
     public ST_ToMultiPolygon(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 d6b57cf..37b3ec2 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ToPoint. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ToPoint. <br>
  * Cast an ST_Geometry value to a specific instantiable subtype of ST_Geometry.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_ToPoint extends AbstractAccessorSpatialMethod<Geometry> {
     public static final String NAME = "ST_ToPoint";
 
     public ST_ToPoint(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 886bb9b..69e4ae3 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
@@ -22,7 +22,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_ToPolygon. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_ToPolygon. <br>
  * Cast an ST_Geometry value to a specific instantiable subtype of ST_Geometry.
  *
  * @author Johann Sorel (Geomatys)
@@ -35,7 +35,17 @@ public final class ST_ToPolygon extends AbstractAccessorSpatialMethod<Geometry>
     public static final String NAME = "ST_ToPolygon";
 
     public ST_ToPolygon(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 78e3a65..bfe48b6 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_touches. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_touches. <br>
  * Test if an ST_Geometry value spatially 2D touches another ST_Geometry value, ignoring z and m coordinate
  * values in the calculations.
  *
@@ -35,7 +35,12 @@ public final class ST_Touches extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Touches";
 
     public ST_Touches(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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
index 019461d..c1b5624 100644
--- 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
@@ -25,7 +25,7 @@ import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Transform. <br/>
+ * 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.
  *
@@ -39,10 +39,29 @@ public final class ST_Transform extends AbstractAccessorSpatialMethod<Geometry>
     public static final String NAME = "ST_Transform";
 
     public ST_Transform(Expression[] parameters) {
-        super(NAME,2,Geometry.class);
+        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
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 69fdfd0..fe40494 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Union. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Union. <br>
  * Return an ST_Geometry value that represents the point set union of two ST_Geometry values, ignoring z and
  * m coordinate values in the calculations and not including them in the resultant geometry.
  *
@@ -35,7 +35,12 @@ public final class ST_Union extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Union";
 
     public ST_Union(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 0eb75ee..8dd0737 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Within. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Within. <br>
  * Test if an ST_Geometry value is spatially 2D within another ST_Geometry value, ignoring z and m coordinate
  * values in the calculations.
  *
@@ -35,7 +35,12 @@ public final class ST_Within extends AbstractBinarySpatialMethod {
     public static final String NAME = "ST_Within";
 
     public ST_Within(Expression[] parameters) {
-        super(NAME);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
     }
 
     @Override
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 abfcaac..7830971 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Area. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Area. <br>
  * Return the area measurement of an ST_Surface value, ignoring z and m coordinate values in the calculations.
  *
  * This class should be for all surface types, but JTS only has Polygon and MultiPolygon.
@@ -36,7 +36,17 @@ public final class Surface_ST_Area extends AbstractAccessorSpatialMethod<Geometr
     public static final String NAME = "ST_Area";
 
     public Surface_ST_Area(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 466fd52..122855e 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Centroid. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Centroid. <br>
  * Return the 2D ST_Point value that is the mathematical centroid of the ST_Surface value, ignoring z and m
  * coordinate values in the calculations and not including them in the resultant geometry.
  *
@@ -37,7 +37,17 @@ public final class Surface_ST_Centroid extends AbstractAccessorSpatialMethod<Geo
     public static final String NAME = "ST_Centroid";
 
     public Surface_ST_Centroid(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 00c1f24..7331be9 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_Perimeter. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_Perimeter. <br>
  * Return the length measurement of the boundary of an ST_Surface value, ignoring z and m coordinate values
  * in the calculations.
  *
@@ -37,7 +37,17 @@ public final class Surface_ST_Perimeter extends AbstractAccessorSpatialMethod<Ge
     public static final String NAME = "ST_Perimeter";
 
     public Surface_ST_Perimeter(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override
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 9392227..76ba16b 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
@@ -21,7 +21,7 @@ import java.text.ParseException;
 import org.opengis.filter.expression.Expression;
 
 /**
- * SQL/MM, ISO/IEC 13249-3:2011, ST_PointOnSurface. <br/>
+ * SQL/MM, ISO/IEC 13249-3:2011, ST_PointOnSurface. <br>
  * Return an ST_Point value guaranteed to spatially intersect the ST_Surface value, ignoring z and m coordinate
  * values in the calculations and not including them in the resultant geometry.
  *
@@ -37,7 +37,17 @@ public final class Surface_ST_PointOnSurface extends AbstractAccessorSpatialMeth
     public static final String NAME = "ST_PointOnSurface";
 
     public Surface_ST_PointOnSurface(Expression[] parameters) {
-        super(NAME,Geometry.class);
+        super(parameters);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    protected Class<Geometry> getExpectedClass() {
+        return Geometry.class;
     }
 
     @Override


Mime
View raw message