1
- use pgx:: * ;
1
+ use pgx:: prelude :: * ;
2
2
3
3
mod phone_number;
4
4
5
5
// Required by all `pgx` extensions. Indicates to Postgres, when it loads the shared library
6
6
// that the library is really a Postgres extension
7
- pg_module_magic ! ( ) ;
7
+ pgx :: pg_module_magic!( ) ;
8
8
9
9
#[ pg_extern]
10
10
fn hello_postgresconf ( ) -> & ' static str {
@@ -17,12 +17,8 @@ fn sum_array(input: Vec<i64>) -> i64 {
17
17
}
18
18
19
19
#[ pg_extern]
20
- fn my_generate_series (
21
- start : i64 ,
22
- end : i64 ,
23
- step : default ! ( i64 , 1 ) ,
24
- ) -> impl std:: iter:: Iterator < Item = i64 > {
25
- ( start..=end) . into_iter ( ) . step_by ( step as usize )
20
+ fn my_generate_series ( start : i64 , end : i64 , step : default ! ( i64 , 1 ) ) -> SetOfIterator < ' static , i64 > {
21
+ SetOfIterator :: new ( ( start..=end) . into_iter ( ) . step_by ( step as usize ) )
26
22
}
27
23
28
24
#[ derive( PostgresEnum ) ]
@@ -33,8 +29,9 @@ pub enum Species {
33
29
}
34
30
35
31
#[ pg_extern]
36
- fn set_of_animals ( ) -> impl std:: iter:: Iterator <
37
- Item = (
32
+ fn set_of_animals ( ) -> TableIterator <
33
+ ' static ,
34
+ (
38
35
name ! ( name, & ' static str ) ,
39
36
name ! ( species, Species ) ,
40
37
name ! ( age, f32 ) ,
@@ -44,17 +41,22 @@ fn set_of_animals() -> impl std::iter::Iterator<
44
41
let species = vec ! [ Species :: Dog , Species :: Cat , Species :: Fish ] ;
45
42
let ages = vec ! [ 4.5 , 4.0 , 3.25 ] ;
46
43
47
- names
48
- . into_iter ( )
49
- . zip ( species. into_iter ( ) )
50
- . zip ( ages. into_iter ( ) )
51
- // need to map the values to convert into a single tuple of three elements
52
- . map ( |( ( name, species) , age) | ( name, species, age) )
44
+ TableIterator :: new (
45
+ names
46
+ . into_iter ( )
47
+ . zip ( species. into_iter ( ) )
48
+ . zip ( ages. into_iter ( ) )
49
+ // need to map the values to convert into a single tuple of three elements
50
+ . map ( |( ( name, species) , age) | ( name, species, age) ) ,
51
+ )
53
52
}
54
53
55
54
#[ pg_extern]
56
- fn rust_tuple ( name : & str , age : i32 ) -> ( name ! ( name, & str ) , name ! ( age, i32 ) ) {
57
- ( name, age)
55
+ fn rust_tuple (
56
+ name : & ' static str ,
57
+ age : i32 ,
58
+ ) -> TableIterator < ' static , ( name ! ( name, & ' static str ) , name ! ( age, i32 ) ) > {
59
+ TableIterator :: once ( ( name, age) )
58
60
}
59
61
60
62
#[ pg_extern]
@@ -82,7 +84,7 @@ mod tests {
82
84
let result =
83
85
Spi :: get_one :: < Vec < i64 > > ( "SELECT array_agg(g) FROM my_generate_series(1, 10) g;" )
84
86
. expect ( "SPI result was NULL" ) ;
85
- assert_eq ! ( result, vec![ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] )
87
+ assert_eq ! ( result, Some ( vec![ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) )
86
88
}
87
89
88
90
#[ pg_test]
0 commit comments