sea_schema/postgres/parser/
pg_indexes.rs1use crate::postgres::{def::*, query::UniqueIndexQueryResult};
2
3pub struct UniqueIndexQueryResultParser {
4 curr: Option<UniqueIndexQueryResult>,
5 results: Box<dyn Iterator<Item = UniqueIndexQueryResult>>,
6}
7
8pub fn parse_unique_index_query_results(
9 results: Box<dyn Iterator<Item = UniqueIndexQueryResult>>,
10) -> impl Iterator<Item = Unique> {
11 UniqueIndexQueryResultParser {
12 curr: None,
13 results,
14 }
15}
16
17impl Iterator for UniqueIndexQueryResultParser {
18 type Item = Unique;
19
20 fn next(&mut self) -> Option<Self::Item> {
21 let result = if let Some(result) = self.curr.take() {
22 result
23 } else {
24 self.results.next()?
25 };
26
27 let index_name = result.index_name;
28 let mut columns = vec![result.column_name];
29
30 for result in self.results.by_ref() {
31 if result.index_name != index_name {
32 self.curr = Some(result);
33 return Some(Unique {
34 name: index_name,
35 columns,
36 });
37 }
38
39 columns.push(result.column_name);
40 }
41
42 Some(Unique {
43 name: index_name,
44 columns,
45 })
46 }
47}