Skip to main content

tank_tests/
arrays2.rs

1#![allow(dead_code)]
2#![allow(unused_imports)]
3use std::{pin::pin, str::FromStr, sync::LazyLock};
4use tank::{
5    Driver, DynQuery, Entity, Executor, Interval, Query, QueryBuilder, QueryResult, RawQuery,
6    SqlWriter,
7    stream::{StreamExt, TryStreamExt},
8};
9use tokio::sync::Mutex;
10use uuid::Uuid;
11
12static MUTEX: LazyLock<Mutex<()>> = LazyLock::new(|| Mutex::new(()));
13
14#[derive(Entity, Debug, PartialEq)]
15struct Container {
16    first: [[Interval; 2]; 1],
17    second: [[[Uuid; 1]; 3]; 1],
18}
19
20pub async fn arrays2<E: Executor>(executor: &mut E) {
21    let _ = MUTEX.lock().await;
22
23    // Multiple statements
24    #[cfg(not(feature = "disable-multiple-statements"))]
25    {
26        let mut query = DynQuery::default();
27        let writer = executor.driver().sql_writer();
28        writer.write_drop_table::<Container>(&mut query, true);
29        writer.write_create_table::<Container>(&mut query, true);
30        let value = Container {
31            first: [[
32                Interval::from_years(500),
33                Interval::from_micros(1) + Interval::from_months(4),
34            ]],
35            second: [[
36                [Uuid::from_str("c1412337-cfce-444a-ac46-5e6edcc0bf23").unwrap()],
37                [Uuid::from_str("00000000-0000-0000-0000-000000000000").unwrap()],
38                [Uuid::from_str("9d7f0f5b-19d6-4298-a332-214fc85e2652").unwrap()],
39            ]],
40        };
41        writer.write_insert(&mut query, &[value], false);
42        writer.write_select(
43            &mut query,
44            &QueryBuilder::new()
45                .select(Container::columns())
46                .from(Container::table())
47                .where_expr(true)
48                .limit(Some(1)),
49        );
50        let rows = pin!(executor.run(query).try_filter_map(|v| async move {
51            Ok(match v {
52                QueryResult::Row(v) => Some(v),
53                QueryResult::Affected(..) => None,
54            })
55        }));
56        let rows = rows
57            .map(|v| v.and_then(Container::from_row))
58            .try_collect::<Vec<_>>()
59            .await
60            .expect("Coult not execute the query");
61        assert_eq!(
62            rows,
63            [Container {
64                first: [[
65                    Interval::from_years(500),
66                    Interval::from_micros(1) + Interval::from_months(4),
67                ]],
68                second: [[
69                    [Uuid::from_str("c1412337-cfce-444a-ac46-5e6edcc0bf23").unwrap()],
70                    [Uuid::from_str("00000000-0000-0000-0000-000000000000").unwrap()],
71                    [Uuid::from_str("9d7f0f5b-19d6-4298-a332-214fc85e2652").unwrap()],
72                ]],
73            }]
74        )
75    }
76}