Skip to content

Commit

Permalink
Drop support for M coordinates and make GeoJSON the only geometry IO …
Browse files Browse the repository at this point in the history
…format
  • Loading branch information
Oreilles committed Oct 3, 2024
1 parent f680b3d commit 53347bb
Show file tree
Hide file tree
Showing 59 changed files with 445 additions and 1,688 deletions.
2 changes: 0 additions & 2 deletions libs/prisma-value/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ pub enum PrismaValue {
List(PrismaListValue),
Json(String),
GeoJson(String),
Geometry(String),

/// A collections of key-value pairs constituting an object.
#[serde(serialize_with = "serialize_object")]
Expand Down Expand Up @@ -333,7 +332,6 @@ impl fmt::Display for PrismaValue {
PrismaValue::Uuid(x) => x.fmt(f),
PrismaValue::Json(x) => x.fmt(f),
PrismaValue::GeoJson(x) => x.fmt(f),
PrismaValue::Geometry(x) => x.fmt(f),
PrismaValue::BigInt(x) => x.fmt(f),
PrismaValue::List(x) => {
let as_string = format!("{x:?}");
Expand Down
4 changes: 2 additions & 2 deletions prisma-fmt/tests/native_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ fn test_native_types_list_on_crdb() {

let result = prisma_fmt::native_types(serde_json::to_string(schema).unwrap());
let expected = expect![[
r#"[{"name":"Bit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Bool","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Boolean"]},{"name":"Bytes","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Bytes"]},{"name":"Char","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Date","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["DateTime"]},{"name":"Decimal","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Decimal"]},{"name":"Float4","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"Float8","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"Inet","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Int2","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Int4","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Int8","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["BigInt"]},{"name":"JsonB","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Json"]},{"name":"Oid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"CatalogSingleChar","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"String","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Time","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timestamp","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timestamptz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timetz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Uuid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"VarBit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Geometry","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry","GeoJson"]},{"name":"Geography","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry","GeoJson"]}]"#
r#"[{"name":"Bit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Bool","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Boolean"]},{"name":"Bytes","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Bytes"]},{"name":"Char","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Date","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["DateTime"]},{"name":"Decimal","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Decimal"]},{"name":"Float4","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"Float8","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"Inet","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Int2","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Int4","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Int8","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["BigInt"]},{"name":"JsonB","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Json"]},{"name":"Oid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"CatalogSingleChar","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"String","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Time","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timestamp","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timestamptz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timetz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Uuid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"VarBit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Geometry","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry"]},{"name":"Geography","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry"]}]"#
]];
expected.assert_eq(&result);
}
Expand All @@ -38,7 +38,7 @@ fn test_native_types_multifile() {

let result = prisma_fmt::native_types(serde_json::to_string(schema).unwrap());
let expected = expect![[
r#"[{"name":"SmallInt","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Integer","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"BigInt","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["BigInt"]},{"name":"Decimal","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Decimal"]},{"name":"Money","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Decimal"]},{"name":"Inet","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Oid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Citext","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Real","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"DoublePrecision","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"VarChar","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Char","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Text","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"ByteA","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Bytes"]},{"name":"Timestamp","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timestamptz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Date","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["DateTime"]},{"name":"Time","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timetz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Boolean","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Boolean"]},{"name":"Bit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"VarBit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Uuid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Xml","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Json","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Json"]},{"name":"JsonB","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Json"]},{"name":"Geometry","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry","GeoJson"]},{"name":"Geography","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry","GeoJson"]}]"#
r#"[{"name":"SmallInt","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Integer","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"BigInt","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["BigInt"]},{"name":"Decimal","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Decimal"]},{"name":"Money","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Decimal"]},{"name":"Inet","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Oid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Int"]},{"name":"Citext","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Real","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"DoublePrecision","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Float"]},{"name":"VarChar","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Char","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Text","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"ByteA","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Bytes"]},{"name":"Timestamp","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timestamptz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Date","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["DateTime"]},{"name":"Time","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Timetz","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["DateTime"]},{"name":"Boolean","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Boolean"]},{"name":"Bit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"VarBit","_number_of_args":0,"_number_of_optional_args":1,"prisma_types":["String"]},{"name":"Uuid","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Xml","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["String"]},{"name":"Json","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Json"]},{"name":"JsonB","_number_of_args":0,"_number_of_optional_args":0,"prisma_types":["Json"]},{"name":"Geometry","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry"]},{"name":"Geography","_number_of_args":0,"_number_of_optional_args":2,"prisma_types":["Geometry"]}]"#
]];
expected.assert_eq(&result);
}
1 change: 0 additions & 1 deletion psl/parser-database/src/attributes/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,6 @@ fn validate_scalar_default_literal(
(ScalarType::String, ast::Expression::StringValue(_, _))
| (ScalarType::Json, ast::Expression::StringValue(_, _))
| (ScalarType::Geometry, ast::Expression::StringValue(_, _))
| (ScalarType::GeoJson, ast::Expression::StringValue(_, _))
| (ScalarType::Bytes, ast::Expression::StringValue(_, _))
| (ScalarType::Int, ast::Expression::NumericValue(_, _))
| (ScalarType::BigInt, ast::Expression::NumericValue(_, _))
Expand Down
6 changes: 1 addition & 5 deletions psl/parser-database/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ impl ScalarFieldType {

/// True if the field's type is Geometry.
pub fn is_geometry(self) -> bool {
matches!(self, Self::BuiltInScalar(ScalarType::Geometry | ScalarType::GeoJson))
matches!(self, Self::BuiltInScalar(ScalarType::Geometry))
}
}

Expand Down Expand Up @@ -1453,7 +1453,6 @@ pub enum ScalarType {
Bytes,
Decimal,
Geometry,
GeoJson,
}

impl ScalarType {
Expand All @@ -1470,7 +1469,6 @@ impl ScalarType {
ScalarType::Bytes => "Bytes",
ScalarType::Decimal => "Decimal",
ScalarType::Geometry => "Geometry",
ScalarType::GeoJson => "GeoJson",
}
}

Expand All @@ -1492,7 +1490,6 @@ impl ScalarType {
"json" => Some(ScalarType::Json),
"bytes" => Some(ScalarType::Bytes),
"decimal" => Some(ScalarType::Decimal),
"geojson" => Some(ScalarType::GeoJson),
"geometry" => Some(ScalarType::Geometry),
_ => None,
},
Expand All @@ -1506,7 +1503,6 @@ impl ScalarType {
"Json" => Some(ScalarType::Json),
"Bytes" => Some(ScalarType::Bytes),
"Decimal" => Some(ScalarType::Decimal),
"GeoJson" => Some(ScalarType::GeoJson),
"Geometry" => Some(ScalarType::Geometry),
_ => None,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ const CAPABILITIES: ConnectorCapabilities = enumflags2::make_bitflags!(Connector
Json |
JsonFiltering |
JsonFilteringArrayPath |
EwktGeometry |
GeoJsonGeometry |
Geometry |
GeometryRawRead |
GeometryGeoJsonIO |
GeometryFiltering |
GeometryExtraDims |
GeometryExtraTypes |
Expand Down Expand Up @@ -92,13 +92,6 @@ const SCALAR_TYPE_DEFAULTS: &[(ScalarType, CockroachType)] = &[
srid: 0,
})),
),
(
ScalarType::GeoJson,
CockroachType::Geometry(Some(GeometryParams {
type_: GeometryType::Geometry,
srid: 0,
})),
),
];

pub(crate) struct CockroachDatamodelConnector;
Expand Down Expand Up @@ -200,7 +193,7 @@ impl Connector for CockroachDatamodelConnector {
fn validate_native_type_arguments(
&self,
native_type_instance: &NativeTypeInstance,
scalar_type: &ScalarType,
_scalar_type: &ScalarType,
span: ast::Span,
errors: &mut Diagnostics,
) {
Expand Down Expand Up @@ -228,21 +221,6 @@ impl Connector for CockroachDatamodelConnector {
{
errors.push_error(error.new_argument_m_out_of_range_error("M can range from 0 to 6.", span))
}
CockroachType::Geometry(Some(g)) | CockroachType::Geography(Some(g))
if *scalar_type == ScalarType::GeoJson && !g.type_.is_geojson_compatible() =>
{
errors.push_error(
error.new_argument_m_out_of_range_error(
&format!("{} isn't compatible with GeoJson.", g.type_),
span,
),
)
}
CockroachType::Geometry(Some(g)) | CockroachType::Geography(Some(g))
if *scalar_type == ScalarType::GeoJson && !matches!(g.srid, 0 | 4326) =>
{
errors.push_error(error.new_argument_m_out_of_range_error("GeoJson SRID must be 4326.", span))
}
CockroachType::Geometry(Some(g)) | CockroachType::Geography(Some(g)) if g.srid < 0 || g.srid > 999000 => {
errors.push_error(error.new_argument_m_out_of_range_error("SRID must be between 0 and 999000.", span))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ crate::native_type_definition! {
Timetz(Option<u32>) -> DateTime,
Uuid -> String,
VarBit(Option<u32>) -> String,
Geometry(Option<GeometryParams>) -> Geometry | GeoJson,
Geography(Option<GeometryParams>) -> Geometry | GeoJson,
Geometry(Option<GeometryParams>) -> Geometry,
Geography(Option<GeometryParams>) -> Geometry,
}
Loading

0 comments on commit 53347bb

Please sign in to comment.