Collect full database data for duplication/import/export. If `include_embedded` is false, embedded views are excluded.
(
&self,
chunk_size: usize,
auto_fetch: bool,
include_embedded: bool,
)
| 1519 | /// Collect full database data for duplication/import/export. |
| 1520 | /// If `include_embedded` is false, embedded views are excluded. |
| 1521 | pub async fn get_database_data( |
| 1522 | &self, |
| 1523 | chunk_size: usize, |
| 1524 | auto_fetch: bool, |
| 1525 | include_embedded: bool, |
| 1526 | ) -> Result<DatabaseData, CollabError> { |
| 1527 | let txn = self.collab.transact(); |
| 1528 | |
| 1529 | let database_id = self.body.get_database_id(&txn)?; |
| 1530 | let inline_view_id = self.body.get_inline_view_id(&txn); |
| 1531 | let views = self |
| 1532 | .body |
| 1533 | .views |
| 1534 | .get_all_views(&txn, include_embedded) |
| 1535 | .into_iter() |
| 1536 | .filter(|view| !view.is_inline) |
| 1537 | .collect(); |
| 1538 | let fields = self.body.get_fields_in_view(&txn, &inline_view_id, None); |
| 1539 | let rows_stream = self.get_all_rows(chunk_size, None, auto_fetch).await?; |
| 1540 | let rows: Vec<Row> = rows_stream |
| 1541 | .filter_map(|result| async move { result.ok() }) |
| 1542 | .collect() |
| 1543 | .await; |
| 1544 | |
| 1545 | let mut row_metas = HashMap::with_capacity(rows.len()); |
| 1546 | for row in &rows { |
| 1547 | if let Some(row_meta) = self.get_row_meta(&row.id).await { |
| 1548 | row_metas.insert(row.id, row_meta); |
| 1549 | } |
| 1550 | } |
| 1551 | |
| 1552 | Ok(DatabaseData { |
| 1553 | database_id, |
| 1554 | fields, |
| 1555 | rows, |
| 1556 | views, |
| 1557 | row_metas, |
| 1558 | }) |
| 1559 | } |
| 1560 | |
| 1561 | pub fn get_view(&self, view_id: &str) -> Option<DatabaseView> { |
| 1562 | let txn = self.collab.transact(); |