Skip to content

Commit fac5944

Browse files
Copilotanidotnet
andcommitted
Fix filters to extend NitriteFilter and properly handle non-indexed queries
Co-authored-by: anidotnet <[email protected]>
1 parent 8d4f763 commit fac5944

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

packages/nitrite_spatial/lib/src/filter.dart

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,27 @@ class IntersectsIndexFilter extends SpatialFilter {
100100
}
101101

102102
///@nodoc
103-
class WithinFilter extends Filter implements FlattenableFilter {
103+
class WithinFilter extends NitriteFilter implements FlattenableFilter {
104104
final String field;
105105
final Geometry geometry;
106106

107107
WithinFilter(this.field, this.geometry);
108108

109109
@override
110110
bool apply(Document doc) {
111-
// This should not be called directly as the filter is flattened
112-
return false;
111+
// For non-indexed queries, apply the validation filter directly
112+
var validationFilter = _GeometryValidationFilter(
113+
field,
114+
geometry,
115+
(docGeom, filterGeom) => docGeom.within(filterGeom),
116+
);
117+
// Copy context if available
118+
if (nitriteConfig != null) {
119+
validationFilter.nitriteConfig = nitriteConfig;
120+
validationFilter.collectionName = collectionName;
121+
validationFilter.objectFilter = objectFilter;
122+
}
123+
return validationFilter.apply(doc);
113124
}
114125

115126
@override
@@ -132,16 +143,27 @@ class WithinFilter extends Filter implements FlattenableFilter {
132143
}
133144

134145
///@nodoc
135-
class IntersectsFilter extends Filter implements FlattenableFilter {
146+
class IntersectsFilter extends NitriteFilter implements FlattenableFilter {
136147
final String field;
137148
final Geometry geometry;
138149

139150
IntersectsFilter(this.field, this.geometry);
140151

141152
@override
142153
bool apply(Document doc) {
143-
// This should not be called directly as the filter is flattened
144-
return false;
154+
// For non-indexed queries, apply the validation filter directly
155+
var validationFilter = _GeometryValidationFilter(
156+
field,
157+
geometry,
158+
(docGeom, filterGeom) => docGeom.intersects(filterGeom),
159+
);
160+
// Copy context if available
161+
if (nitriteConfig != null) {
162+
validationFilter.nitriteConfig = nitriteConfig;
163+
validationFilter.collectionName = collectionName;
164+
validationFilter.objectFilter = objectFilter;
165+
}
166+
return validationFilter.apply(doc);
145167
}
146168

147169
@override
@@ -164,7 +186,7 @@ class IntersectsFilter extends Filter implements FlattenableFilter {
164186
}
165187

166188
///@nodoc
167-
class NearFilter extends Filter implements FlattenableFilter {
189+
class NearFilter extends NitriteFilter implements FlattenableFilter {
168190
final String field;
169191
final Geometry circle;
170192
final Coordinate center;
@@ -185,8 +207,15 @@ class NearFilter extends Filter implements FlattenableFilter {
185207

186208
@override
187209
bool apply(Document doc) {
188-
// This should not be called directly as the filter is flattened
189-
return false;
210+
// For non-indexed queries, apply the validation filter directly
211+
var validationFilter = _NearValidationFilter(field, center, radius);
212+
// Copy context if available
213+
if (nitriteConfig != null) {
214+
validationFilter.nitriteConfig = nitriteConfig;
215+
validationFilter.collectionName = collectionName;
216+
validationFilter.objectFilter = objectFilter;
217+
}
218+
return validationFilter.apply(doc);
190219
}
191220

192221
@override
@@ -205,7 +234,7 @@ class NearFilter extends Filter implements FlattenableFilter {
205234
}
206235

207236
/// Validation filter for near queries that checks actual distance.
208-
class _NearValidationFilter extends Filter {
237+
class _NearValidationFilter extends NitriteFilter {
209238
final String field;
210239
final Coordinate center;
211240
final double radius;

packages/nitrite_spatial/test/index_test.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:dart_jts/dart_jts.dart';
22
import 'package:nitrite/nitrite.dart' as no2;
33
import 'package:nitrite/nitrite.dart' hide where;
4-
import 'package:nitrite/src/filters/filter.dart' as filter;
54
import 'package:nitrite_spatial/nitrite_spatial.dart';
65
import 'package:nitrite_spatial/src/filter.dart';
76
import 'package:test/test.dart';

0 commit comments

Comments
 (0)