1- use pgx:: * ;
1+ use pgx:: prelude :: * ;
22
33mod phone_number;
44
55// Required by all `pgx` extensions. Indicates to Postgres, when it loads the shared library
66// that the library is really a Postgres extension
7- pg_module_magic ! ( ) ;
7+ pgx :: pg_module_magic!( ) ;
88
99#[ pg_extern]
1010fn hello_postgresconf ( ) -> & ' static str {
@@ -17,12 +17,8 @@ fn sum_array(input: Vec<i64>) -> i64 {
1717}
1818
1919#[ 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 ) )
2622}
2723
2824#[ derive( PostgresEnum ) ]
@@ -33,8 +29,9 @@ pub enum Species {
3329}
3430
3531#[ pg_extern]
36- fn set_of_animals ( ) -> impl std:: iter:: Iterator <
37- Item = (
32+ fn set_of_animals ( ) -> TableIterator <
33+ ' static ,
34+ (
3835 name ! ( name, & ' static str ) ,
3936 name ! ( species, Species ) ,
4037 name ! ( age, f32 ) ,
@@ -44,17 +41,22 @@ fn set_of_animals() -> impl std::iter::Iterator<
4441 let species = vec ! [ Species :: Dog , Species :: Cat , Species :: Fish ] ;
4542 let ages = vec ! [ 4.5 , 4.0 , 3.25 ] ;
4643
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+ )
5352}
5453
5554#[ 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) )
5860}
5961
6062#[ pg_extern]
@@ -82,7 +84,7 @@ mod tests {
8284 let result =
8385 Spi :: get_one :: < Vec < i64 > > ( "SELECT array_agg(g) FROM my_generate_series(1, 10) g;" )
8486 . 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 ] ) )
8688 }
8789
8890 #[ pg_test]
0 commit comments