1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// SPDX-License-Identifier: BUSL-1.1
//! Dispatch for SpatialOp variants (scan, insert, delete).
use crate::bridge::envelope::Response;
use nodedb_physical::physical_plan::SpatialOp;
use crate::data::executor::core_loop::CoreLoop;
use crate::data::executor::handlers::spatial_sync::SpatialInsertExec;
use crate::data::executor::task::ExecutionTask;
impl CoreLoop {
pub(super) fn dispatch_spatial(
&mut self,
task: &ExecutionTask,
tid: u64,
op: &SpatialOp,
) -> Response {
match op {
SpatialOp::Insert {
collection,
field,
surrogate,
geometry,
provenance,
} => self.execute_spatial_insert(SpatialInsertExec {
task,
tid,
collection,
field,
surrogate: *surrogate,
geometry,
provenance: provenance.as_ref(),
}),
SpatialOp::Delete {
collection,
field,
surrogate,
provenance,
} => self.execute_spatial_delete(
task,
tid,
collection,
field,
*surrogate,
provenance.as_ref(),
),
SpatialOp::Scan {
collection,
field,
predicate,
query_geometry,
distance_meters,
attribute_filters,
limit,
projection,
rls_filters,
prefilter,
} => self.execute_spatial_scan(super::super::handlers::spatial::SpatialScanParams {
task,
tid,
collection,
field,
predicate,
query_geometry,
distance_meters: *distance_meters,
attribute_filters,
limit: *limit,
projection,
rls_filters,
prefilter: prefilter.as_ref(),
}),
}
}
}