diff --git a/rust/geodatafusion/src/lib.rs b/rust/geodatafusion/src/lib.rs index 7a861c8..fae1666 100644 --- a/rust/geodatafusion/src/lib.rs +++ b/rust/geodatafusion/src/lib.rs @@ -9,3 +9,24 @@ pub(crate) mod data_types; pub(crate) mod error; pub mod udf; + +/// Register all UDFs defined in geodatafusion +pub fn register(session_context: &datafusion::prelude::SessionContext) { + crate::udf::geo::measurement::register(session_context); + + crate::udf::geo::processing::register(session_context); + + crate::udf::geo::relationships::register(session_context); + + crate::udf::geo::validation::register(session_context); + + crate::udf::geohash::register(session_context); + + crate::udf::native::accessors::register(session_context); + + crate::udf::native::bounding_box::register(session_context); + + crate::udf::native::constructors::register(session_context); + + crate::udf::native::io::register(session_context); +} diff --git a/rust/geodatafusion/src/udf/geo/measurement/mod.rs b/rust/geodatafusion/src/udf/geo/measurement/mod.rs index bf0b435..2233ab5 100644 --- a/rust/geodatafusion/src/udf/geo/measurement/mod.rs +++ b/rust/geodatafusion/src/udf/geo/measurement/mod.rs @@ -5,3 +5,9 @@ mod length; pub use area::Area; pub use distance::Distance; pub use length::Length; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(Area::default().into()); + session_context.register_udf(Distance::default().into()); + session_context.register_udf(Length::default().into()); +} diff --git a/rust/geodatafusion/src/udf/geo/processing/mod.rs b/rust/geodatafusion/src/udf/geo/processing/mod.rs index 977bdc0..780b2c2 100644 --- a/rust/geodatafusion/src/udf/geo/processing/mod.rs +++ b/rust/geodatafusion/src/udf/geo/processing/mod.rs @@ -9,3 +9,13 @@ pub use convex_hull::ConvexHull; pub use oriented_envelope::OrientedEnvelope; pub use point_on_surface::PointOnSurface; pub use simplify::{Simplify, SimplifyPreserveTopology, SimplifyVW}; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(Centroid::default().into()); + session_context.register_udf(ConvexHull::default().into()); + session_context.register_udf(OrientedEnvelope::default().into()); + session_context.register_udf(PointOnSurface::default().into()); + session_context.register_udf(Simplify::default().into()); + session_context.register_udf(SimplifyPreserveTopology::default().into()); + session_context.register_udf(SimplifyVW::default().into()); +} diff --git a/rust/geodatafusion/src/udf/geo/relationships/mod.rs b/rust/geodatafusion/src/udf/geo/relationships/mod.rs index 1b09ee5..cea1af9 100644 --- a/rust/geodatafusion/src/udf/geo/relationships/mod.rs +++ b/rust/geodatafusion/src/udf/geo/relationships/mod.rs @@ -3,3 +3,16 @@ mod topological; pub use topological::{ Contains, CoveredBy, Covers, Crosses, Disjoint, Equals, Intersects, Overlaps, Touches, Within, }; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(Contains::default().into()); + session_context.register_udf(CoveredBy::default().into()); + session_context.register_udf(Covers::default().into()); + session_context.register_udf(Crosses::default().into()); + session_context.register_udf(Disjoint::default().into()); + session_context.register_udf(Equals::default().into()); + session_context.register_udf(Intersects::default().into()); + session_context.register_udf(Overlaps::default().into()); + session_context.register_udf(Touches::default().into()); + session_context.register_udf(Within::default().into()); +} diff --git a/rust/geodatafusion/src/udf/geo/validation/mod.rs b/rust/geodatafusion/src/udf/geo/validation/mod.rs index 5d0fe50..34aecfb 100644 --- a/rust/geodatafusion/src/udf/geo/validation/mod.rs +++ b/rust/geodatafusion/src/udf/geo/validation/mod.rs @@ -3,3 +3,8 @@ mod is_valid_reason; pub use is_valid::IsValid; pub use is_valid_reason::IsValidReason; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(IsValid::default().into()); + session_context.register_udf(IsValidReason::default().into()); +} diff --git a/rust/geodatafusion/src/udf/geohash/mod.rs b/rust/geodatafusion/src/udf/geohash/mod.rs index 1d06dc2..cd50aae 100644 --- a/rust/geodatafusion/src/udf/geohash/mod.rs +++ b/rust/geodatafusion/src/udf/geohash/mod.rs @@ -6,3 +6,9 @@ mod point_from_geohash; pub use box2d_from_geohash::Box2DFromGeoHash; pub use geohash::GeoHash; pub use point_from_geohash::PointFromGeoHash; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(GeoHash::default().into()); + session_context.register_udf(Box2DFromGeoHash::default().into()); + session_context.register_udf(PointFromGeoHash::default().into()); +} diff --git a/rust/geodatafusion/src/udf/native/accessors/mod.rs b/rust/geodatafusion/src/udf/native/accessors/mod.rs index 87c7a37..4b9f868 100644 --- a/rust/geodatafusion/src/udf/native/accessors/mod.rs +++ b/rust/geodatafusion/src/udf/native/accessors/mod.rs @@ -11,3 +11,18 @@ pub use line_string::{EndPoint, StartPoint}; pub use npoints::NPoints; pub use num_interior_rings::NumInteriorRings; pub use point::{M, X, Y, Z}; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(CoordDim::default().into()); + session_context.register_udf(NDims::default().into()); + session_context.register_udf(GeometryType::default().into()); + session_context.register_udf(ST_GeometryType::default().into()); + session_context.register_udf(EndPoint::default().into()); + session_context.register_udf(StartPoint::default().into()); + session_context.register_udf(NPoints::default().into()); + session_context.register_udf(NumInteriorRings::default().into()); + session_context.register_udf(M::default().into()); + session_context.register_udf(X::default().into()); + session_context.register_udf(Y::default().into()); + session_context.register_udf(Z::default().into()); +} diff --git a/rust/geodatafusion/src/udf/native/bounding_box/mod.rs b/rust/geodatafusion/src/udf/native/bounding_box/mod.rs index e4b6188..e748db3 100644 --- a/rust/geodatafusion/src/udf/native/bounding_box/mod.rs +++ b/rust/geodatafusion/src/udf/native/bounding_box/mod.rs @@ -9,3 +9,17 @@ pub use r#box::{Box2D, Box3D}; pub use extent::Extent; pub use extrema::{XMax, XMin, YMax, YMin, ZMax, ZMin}; pub use make_box::{MakeBox2D, MakeBox3D}; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(Box2D::default().into()); + session_context.register_udf(Box3D::default().into()); + session_context.register_udaf(Extent::default().into()); + session_context.register_udf(XMax::default().into()); + session_context.register_udf(XMin::default().into()); + session_context.register_udf(YMax::default().into()); + session_context.register_udf(YMin::default().into()); + session_context.register_udf(ZMax::default().into()); + session_context.register_udf(ZMin::default().into()); + session_context.register_udf(MakeBox2D::default().into()); + session_context.register_udf(MakeBox3D::default().into()); +} diff --git a/rust/geodatafusion/src/udf/native/constructors/mod.rs b/rust/geodatafusion/src/udf/native/constructors/mod.rs index 0260867..18438bb 100644 --- a/rust/geodatafusion/src/udf/native/constructors/mod.rs +++ b/rust/geodatafusion/src/udf/native/constructors/mod.rs @@ -1,3 +1,12 @@ mod point; pub use point::{MakePoint, MakePointM, Point, PointM, PointZ, PointZM}; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(MakePoint::default().into()); + session_context.register_udf(MakePointM::default().into()); + session_context.register_udf(Point::default().into()); + session_context.register_udf(PointM::default().into()); + session_context.register_udf(PointZ::default().into()); + session_context.register_udf(PointZM::default().into()); +} diff --git a/rust/geodatafusion/src/udf/native/io/mod.rs b/rust/geodatafusion/src/udf/native/io/mod.rs index 1258c68..2a32e3a 100644 --- a/rust/geodatafusion/src/udf/native/io/mod.rs +++ b/rust/geodatafusion/src/udf/native/io/mod.rs @@ -5,3 +5,10 @@ mod wkt; pub use wkb::{AsBinary, GeomFromWKB}; pub use wkt::{AsText, GeomFromText}; + +pub fn register(session_context: &datafusion::prelude::SessionContext) { + session_context.register_udf(AsBinary::default().into()); + session_context.register_udf(GeomFromWKB::default().into()); + session_context.register_udf(AsText::default().into()); + session_context.register_udf(GeomFromText::default().into()); +}