Skip to content

Commit 7d268db

Browse files
authored
fix reviewer comments (#12948)
1 parent 25270d8 commit 7d268db

File tree

2 files changed

+63
-14
lines changed

2 files changed

+63
-14
lines changed

src/query/functions/src/scalars/geo.rs

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ pub fn register(registry: &mut FunctionRegistry) {
198198

199199
// point in ellipses
200200
registry.register_function_factory("point_in_ellipses", |_, args_type| {
201-
if args_type.len() < 6 {
201+
// The input parameters must be 2+4*n, where n is the number of ellipses.
202+
if args_type.len() < 6 || (args_type.len() - 2) % 4 != 0 {
202203
return None;
203204
}
204205
Some(Arc::new(Function {
@@ -221,20 +222,28 @@ pub fn register(registry: &mut FunctionRegistry) {
221222
return None;
222223
}
223224

224-
let (arg1, arg2) = if args_type.len() == 2 {
225+
let (arg1, arg2) = {
225226
let arg1 = match args_type.get(0)? {
226-
DataType::Tuple(tys) => vec![DataType::Number(NumberDataType::Float64); tys.len()],
227+
DataType::Tuple(tys) => {
228+
if tys.len() == 2 {
229+
vec![DataType::Number(NumberDataType::Float64); tys.len()]
230+
} else {
231+
return None;
232+
}
233+
}
227234
_ => return None,
228235
};
229236
let arg2 = match args_type.get(1)? {
230237
DataType::Array(box DataType::Tuple(tys)) => {
231-
vec![DataType::Number(NumberDataType::Float64); tys.len()]
238+
if tys.len() == 2 {
239+
vec![DataType::Number(NumberDataType::Float64); tys.len()]
240+
} else {
241+
return None;
242+
}
232243
}
233244
_ => return None,
234245
};
235246
(arg1, arg2)
236-
} else {
237-
(vec![], vec![])
238247
};
239248

240249
Some(Arc::new(Function {
@@ -260,20 +269,28 @@ pub fn register(registry: &mut FunctionRegistry) {
260269
return None;
261270
}
262271

263-
let (arg1, arg2) = if args_type.len() == 2 {
272+
let (arg1, arg2) = {
264273
let arg1 = match args_type.get(0)? {
265-
DataType::Tuple(tys) => vec![DataType::Number(NumberDataType::Float64); tys.len()],
274+
DataType::Tuple(tys) => {
275+
if tys.len() == 2 {
276+
vec![DataType::Number(NumberDataType::Float64); tys.len()]
277+
} else {
278+
return None;
279+
}
280+
}
266281
_ => return None,
267282
};
268283
let arg2 = match args_type.get(1)? {
269284
DataType::Array(box DataType::Array(box DataType::Tuple(tys))) => {
270-
vec![DataType::Number(NumberDataType::Float64); tys.len()]
285+
if tys.len() == 2 {
286+
vec![DataType::Number(NumberDataType::Float64); tys.len()]
287+
} else {
288+
return None;
289+
}
271290
}
272291
_ => return None,
273292
};
274293
(arg1, arg2)
275-
} else {
276-
(vec![], vec![])
277294
};
278295

279296
Some(Arc::new(Function {
@@ -302,20 +319,30 @@ pub fn register(registry: &mut FunctionRegistry) {
302319
let mut args = vec![];
303320

304321
let arg1 = match args_type.get(0)? {
305-
DataType::Tuple(tys) => vec![DataType::Number(NumberDataType::Float64); tys.len()],
322+
DataType::Tuple(tys) => {
323+
if tys.len() == 2 {
324+
vec![DataType::Number(NumberDataType::Float64); tys.len()]
325+
} else {
326+
return None;
327+
}
328+
}
306329
_ => return None,
307330
};
308331
args.push(DataType::Tuple(arg1));
309332

310333
let arg2: Vec<DataType> = match args_type.get(1)? {
311334
DataType::Array(box DataType::Tuple(tys)) => {
312-
vec![DataType::Number(NumberDataType::Float64); tys.len()]
335+
if tys.len() == 2 {
336+
vec![DataType::Number(NumberDataType::Float64); tys.len()]
337+
} else {
338+
return None;
339+
}
313340
}
314341

315342
_ => return None,
316343
};
317344

318-
(0..args_type.len() - 1)
345+
(1..args_type.len())
319346
.for_each(|_| args.push(DataType::Array(Box::new(DataType::Tuple(arg2.clone())))));
320347

321348
Some(Arc::new(Function {

tests/sqllogictests/suites/query/02_function/02_0060_function_geo

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,33 @@ select geohash_encode(-5.60302734375, 42.593994140625)
4646
----
4747
ezs42d000000
4848

49+
# form 1
4950
query T
5051
select point_in_polygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)])
5152
----
5253
1
5354

55+
# form 2
56+
query T
57+
select point_in_polygon((1., 1.), [[(4., 0.), (8., 4.), (4., 8.), (0., 4.)], [(3., 3.), (3., 5.), (5., 5.), (5., 3.)]])
58+
----
59+
0
60+
61+
# form 3
62+
query T
63+
select point_in_polygon((2.5, 2.5), [(4., 0.), (8., 4.), (4., 8.), (0., 4.)], [(3., 3.), (3., 5.), (5., 5.), (5., 3.)])
64+
----
65+
1
66+
67+
statement error 1065
68+
select point_in_polygon((3,), [(6, 0), (8, 4)])
69+
70+
statement error 1065
71+
select point_in_polygon((1.,), [[(4., 0.), (8., 4.), (4., 8.), (0., 4.)], [(3., 3.), (3., 5.), (5., 5.), (5., 3.)]])
72+
73+
statement error 1065
74+
select point_in_polygon((2.5,), [(4., 0.), (8., 4.), (4., 8.), (0., 4.)], [(3., 3.), (3., 5.), (5., 5.), (5., 3.)])
75+
5476
query T
5577
select great_circle_angle(-2181569507.9714413, 15253014773.129665, 0.5823419941455749, 0.5823419941455749)
5678
----

0 commit comments

Comments
 (0)