Skip to content

Commit 1a5ee6b

Browse files
committed
refactor & add more e2e tests for array_max
1 parent 44e5b3b commit 1a5ee6b

File tree

5 files changed

+53
-52
lines changed

5 files changed

+53
-52
lines changed

e2e_test/batch/functions/array_max.slt.part

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ select array_max(array['a', 'b', 'c', 'a']);
1919
c
2020

2121
query I
22-
select array_max(array['💩', '🤔️', '🥵', '🥳', '💩']);
22+
select array_max(array['e💩a', 'f🤔️b', 'c🥵c', 'd🥳d', 'e💩e']);
2323
----
24-
🥵
24+
f🤔️b
2525

2626
query I
27-
select array_max(array['😅🤔😅', '114🥵514', '🤣🥳', '🥵💩💩🥵']);
27+
select array_max(array['2c😅🤔😅️c2', '114🥵514', '30🤣🥳03', '5🥵💩💩🥵5']);
2828
----
29-
🥵💩💩🥵
29+
5🥵💩💩🥵5
3030

3131
query error invalid digit found in string
3232
select array_max(array['a', 'b', 'c', 114514]);
@@ -44,4 +44,29 @@ select array_max(array[-2147483648, 2147483647, -2147483649]);
4444
query I
4545
select array_max(array[-9223372036854775808, 9223372036854775807, -9223372036854775809]);
4646
----
47-
9223372036854775807
47+
9223372036854775807
48+
49+
query I
50+
select array_max(array['a', '', 'c']);
51+
----
52+
c
53+
54+
query I
55+
select array_max(array[3.14, 1.14, 1.14514]);
56+
----
57+
3.14
58+
59+
query I
60+
select array_max(array[3.1415926, 191.14, 114514, 1313.1414]);
61+
----
62+
114514
63+
64+
query I
65+
select array_max(array[1e-4, 1.14514e5, 1.14514e-5]);
66+
----
67+
114514
68+
69+
query I
70+
select array_max(array[date'2002-10-30', date'2023-09-06', date'2017-06-18']);
71+
----
72+
2023-09-06

src/expr/src/vector_op/array_min.rs

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/expr/src/vector_op/array_max.rs renamed to src/expr/src/vector_op/array_min_max.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,27 @@ use risingwave_expr_macro::function;
1818

1919
use crate::Result;
2020

21+
/// FIXME: #[`function("array_min(list`) -> any")] supports
22+
/// In this way we could avoid manual macro expansion
23+
#[function("array_min(list) -> *int")]
24+
#[function("array_min(list) -> *float")]
25+
#[function("array_min(list) -> decimal")]
26+
#[function("array_min(list) -> serial")]
27+
#[function("array_min(list) -> int256")]
28+
#[function("array_min(list) -> date")]
29+
#[function("array_min(list) -> time")]
30+
#[function("array_min(list) -> timestamp")]
31+
#[function("array_min(list) -> timestamptz")]
32+
#[function("array_min(list) -> varchar")]
33+
#[function("array_min(list) -> bytea")]
34+
pub fn array_min<T: Scalar>(list: ListRef<'_>) -> Result<Option<T>> {
35+
let min_value = list.iter().flatten().map(DefaultOrdered).min();
36+
match min_value.map(|v| v.0).to_owned_datum() {
37+
Some(s) => Ok(Some(s.try_into()?)),
38+
None => Ok(None),
39+
}
40+
}
41+
2142
#[function("array_max(list) -> *int")]
2243
#[function("array_max(list) -> *float")]
2344
#[function("array_max(list) -> decimal")]

src/expr/src/vector_op/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@
1313
// limitations under the License.
1414

1515
pub mod arithmetic_op;
16-
pub mod array_max;
1716
pub mod array_access;
1817
pub mod array_distinct;
1918
pub mod array_length;
20-
pub mod array_min;
19+
pub mod array_min_max;
2120
pub mod array_positions;
2221
pub mod array_range_access;
2322
pub mod array_remove;

src/frontend/src/expr/type_inference/func.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -617,13 +617,7 @@ fn infer_type_for_special(
617617
ensure_arity!("array_max", | inputs | == 1);
618618
inputs[0].ensure_array_type()?;
619619

620-
// FIXME: This will be replaced by `as_list` later
621-
let return_type = match inputs[0].return_type() {
622-
DataType::List(t) => Some(*t),
623-
_ => None,
624-
};
625-
626-
Ok(return_type)
620+
Ok(Some(inputs[0].return_type().as_list().clone()))
627621
}
628622
ExprType::StringToArray => {
629623
ensure_arity!("string_to_array", 2 <= | inputs | <= 3);

0 commit comments

Comments
 (0)