Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow empty and null geometries in validation #190

Merged
merged 1 commit into from
Jun 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions internal/geo/geo.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ func DecodeGeometry(value any, encoding string) (*orbjson.Geometry, error) {
if !ok {
return nil, fmt.Errorf("expected bytes for wkb geometry, got %T", value)
}
if len(data) == 0 {
return nil, nil
}
g, err := wkb.Unmarshal(data)
if err != nil {
return nil, err
Expand Down
42 changes: 21 additions & 21 deletions internal/validator/testdata/bad-bbox-type/expected.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,59 +47,59 @@
},
{
"title": "optional \"orientation\" must be a valid string",
"passed": true,
"run": true
"run": true,
"passed": true
},
{
"title": "optional \"edges\" must be a valid string",
"passed": true,
"run": true
"run": true,
"passed": true
},
{
"title": "optional \"bbox\" must be an array of 4 or 6 numbers",
"passed": false,
"run": true,
"passed": false,
"message": "expected \"bbox\" for column \"geometry\" to be a list, got a string: \"bogus\""
},
{
"title": "optional \"epoch\" must be a number",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must not be grouped",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be stored using the BYTE_ARRAY parquet type",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be required or optional, not repeated",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry values match the \"encoding\" metadata",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry types must be included in the \"geometry_types\" metadata (if not empty)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all polygon geometries must follow the \"orientation\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometries must fall within the \"bbox\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
}
],
"metadataOnly": false
Expand Down
44 changes: 22 additions & 22 deletions internal/validator/testdata/bad-crs-type/expected.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,58 +48,58 @@
},
{
"title": "optional \"orientation\" must be a valid string",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "optional \"edges\" must be a valid string",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "optional \"bbox\" must be an array of 4 or 6 numbers",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "optional \"epoch\" must be a number",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must not be grouped",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be stored using the BYTE_ARRAY parquet type",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "geometry columns must be required or optional, not repeated",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry values match the \"encoding\" metadata",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometry types must be included in the \"geometry_types\" metadata (if not empty)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all polygon geometries must follow the \"orientation\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
},
{
"title": "all geometries must fall within the \"bbox\" metadata (if present)",
"passed": false,
"run": false
"run": false,
"passed": false
}
],
"metadataOnly": false
Expand Down
105 changes: 105 additions & 0 deletions internal/validator/testdata/with-empty-geometry/expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{
"checks": [
{
"title": "file must include a \"geo\" metadata key",
"run": true,
"passed": true
},
{
"title": "metadata must be a JSON object",
"run": true,
"passed": true
},
{
"title": "metadata must include a \"version\" string",
"run": true,
"passed": true
},
{
"title": "metadata must include a \"primary_column\" string",
"run": true,
"passed": true
},
{
"title": "metadata must include a \"columns\" object",
"run": true,
"passed": true
},
{
"title": "column metadata must include the \"primary_column\" name",
"run": true,
"passed": true
},
{
"title": "column metadata must include a valid \"encoding\" string",
"run": true,
"passed": true
},
{
"title": "column metadata must include a \"geometry_types\" list",
"run": true,
"passed": true
},
{
"title": "optional \"crs\" must be null or a PROJJSON object",
"run": true,
"passed": true
},
{
"title": "optional \"orientation\" must be a valid string",
"run": true,
"passed": true
},
{
"title": "optional \"edges\" must be a valid string",
"run": true,
"passed": true
},
{
"title": "optional \"bbox\" must be an array of 4 or 6 numbers",
"run": true,
"passed": true
},
{
"title": "optional \"epoch\" must be a number",
"run": true,
"passed": true
},
{
"title": "geometry columns must not be grouped",
"run": true,
"passed": true
},
{
"title": "geometry columns must be stored using the BYTE_ARRAY parquet type",
"run": true,
"passed": true
},
{
"title": "geometry columns must be required or optional, not repeated",
"run": true,
"passed": true
},
{
"title": "all geometry values match the \"encoding\" metadata",
"run": true,
"passed": true
},
{
"title": "all geometry types must be included in the \"geometry_types\" metadata (if not empty)",
"run": true,
"passed": true
},
{
"title": "all polygon geometries must follow the \"orientation\" metadata (if present)",
"run": true,
"passed": true
},
{
"title": "all geometries must fall within the \"bbox\" metadata (if present)",
"run": true,
"passed": true
}
],
"metadataOnly": false
}
37 changes: 37 additions & 0 deletions internal/validator/testdata/with-empty-geometry/input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"metadata": {
"version": "1.0.0",
"primary_column": "geometry",
"columns": {
"geometry": {
"encoding": "WKB",
"geometry_types": ["Point"]
}
}
},
"data": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"name": "with geometry"
},
"geometry": {
"type": "Point",
"coordinates": [0, 0]
}
},
{
"type": "Feature",
"properties": {
"name": "empty geometry"
},
"geometry": {
"type": "Point",
"coordinates": []
}
}
]
}
}
Loading