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 #[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_condition(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}