use crate::diesel::types::Geometry;
use diesel::sql_types::{Binary, Double, Integer, Nullable, Text};
diesel::define_sql_function! {
fn st_geomfromtext(wkt: Text) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
#[sql_name = "ST_GeomFromText"]
fn st_geomfromtext_srid(wkt: Text, srid: Integer) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_astext(geom: Nullable<Geometry>) -> Nullable<Text>;
}
diesel::define_sql_function! {
fn st_asewkt(geom: Nullable<Geometry>) -> Nullable<Text>;
}
diesel::define_sql_function! {
fn st_asbinary(geom: Nullable<Geometry>) -> Nullable<Binary>;
}
diesel::define_sql_function! {
fn st_asewkb(geom: Nullable<Geometry>) -> Nullable<Binary>;
}
diesel::define_sql_function! {
fn st_geomfromwkb(wkb: Nullable<Binary>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
#[sql_name = "ST_GeomFromWKB"]
fn st_geomfromwkb_srid(wkb: Nullable<Binary>, srid: Integer) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_geomfromewkb(ewkb: Nullable<Binary>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_asgeojson(geom: Nullable<Geometry>) -> Nullable<Text>;
}
diesel::define_sql_function! {
fn st_geomfromgeojson(json: Text) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_point(x: Double, y: Double) -> Geometry;
}
diesel::define_sql_function! {
#[sql_name = "ST_Point"]
fn st_point_srid(x: Double, y: Double, srid: Integer) -> Geometry;
}
diesel::define_sql_function! {
fn st_makeenvelope(xmin: Double, ymin: Double, xmax: Double, ymax: Double) -> Geometry;
}
diesel::define_sql_function! {
#[sql_name = "ST_MakeEnvelope"]
fn st_makeenvelope_srid(
xmin: Double,
ymin: Double,
xmax: Double,
ymax: Double,
srid: Integer,
) -> Geometry;
}
diesel::define_sql_function! {
fn st_tileenvelope(zoom: Integer, x: Integer, y: Integer) -> Geometry;
}
diesel::define_sql_function! {
fn st_makeline(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_makepolygon(shell: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_collect(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_srid(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
fn st_setsrid(geom: Nullable<Geometry>, srid: Integer) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_geometrytype(geom: Nullable<Geometry>) -> Nullable<Text>;
}
diesel::define_sql_function! {
fn st_x(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_y(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_z(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_isempty(geom: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_ndims(geom: Nullable<Geometry>) -> Nullable<diesel::sql_types::SmallInt>;
}
diesel::define_sql_function! {
fn st_coorddim(geom: Nullable<Geometry>) -> Nullable<diesel::sql_types::SmallInt>;
}
diesel::define_sql_function! {
fn st_zmflag(geom: Nullable<Geometry>) -> Nullable<diesel::sql_types::SmallInt>;
}
diesel::define_sql_function! {
fn st_memsize(geom: Nullable<Geometry>) -> Nullable<diesel::sql_types::BigInt>;
}
diesel::define_sql_function! {
fn st_isvalid(geom: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_isvalidreason(geom: Nullable<Geometry>) -> Nullable<Text>;
}
diesel::define_sql_function! {
fn st_numpoints(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
fn st_npoints(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
fn st_numgeometries(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
fn st_numinteriorrings(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
fn st_numrings(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
fn st_dimension(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
fn st_envelope(geom: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_pointn(geom: Nullable<Geometry>, n: Integer) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_startpoint(geom: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_endpoint(geom: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_exteriorring(geom: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_interiorringn(geom: Nullable<Geometry>, n: Integer) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_geometryn(geom: Nullable<Geometry>, n: Integer) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_xmin(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_xmax(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_ymin(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_ymax(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_area(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_length(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_perimeter(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_distance(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_distancesphere(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_distancespheroid(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_centroid(geom: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_pointonsurface(geom: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_hausdorffdistance(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_union(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_intersection(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_difference(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_symdifference(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_buffer(geom: Nullable<Geometry>, distance: Double) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_intersects(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_contains(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_within(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
#[sql_name = "ST_Within"]
fn inside_area(geom: Nullable<Geometry>, area: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_covers(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_coveredby(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_disjoint(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
#[sql_name = "ST_Disjoint"]
fn outside_area(geom: Nullable<Geometry>, area: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_equals(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_dwithin(a: Nullable<Geometry>, b: Nullable<Geometry>, distance: Double) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_dwithinsphere(a: Nullable<Geometry>, b: Nullable<Geometry>, distance: Double) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_dwithinspheroid(a: Nullable<Geometry>, b: Nullable<Geometry>, distance: Double) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_touches(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_crosses(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_overlaps(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_relate(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Text>;
}
diesel::define_sql_function! {
#[sql_name = "ST_Relate"]
fn st_relate_match_geoms(a: Nullable<Geometry>, b: Nullable<Geometry>, pattern: Text) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_relatematch(matrix: Text, pattern: Text) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
#[sql_name = "st_relatematch"]
fn st_relate_match(matrix: Text, pattern: Text) -> Nullable<diesel::sql_types::Bool>;
}
diesel::define_sql_function! {
fn st_lengthsphere(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_azimuth(origin: Nullable<Geometry>, target: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
fn st_project(origin: Nullable<Geometry>, distance: Double, azimuth: Double) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
fn st_closestpoint(a: Nullable<Geometry>, b: Nullable<Geometry>) -> Nullable<Geometry>;
}
diesel::define_sql_function! {
#[sql_name = "ST_MakePoint"]
fn st_makepoint(x: Double, y: Double) -> Geometry;
}
diesel::define_sql_function! {
#[sql_name = "GeometryType"]
fn geometry_type(geom: Nullable<Geometry>) -> Nullable<Text>;
}
diesel::define_sql_function! {
#[sql_name = "ST_NumInteriorRing"]
fn st_numinteriorring(geom: Nullable<Geometry>) -> Nullable<Integer>;
}
diesel::define_sql_function! {
#[sql_name = "ST_Length2D"]
fn st_length2d(geom: Nullable<Geometry>) -> Nullable<Double>;
}
diesel::define_sql_function! {
#[sql_name = "ST_Perimeter2D"]
fn st_perimeter2d(geom: Nullable<Geometry>) -> Nullable<Double>;
}