reifydb_export/render/
mod.rs1pub mod ddl;
5pub mod dml;
6pub mod layout;
7pub mod typ;
8pub mod value;
9
10use crate::{
11 error::ExportError,
12 model::ExportModel,
13 options::ExportOptions,
14 render::{dml::render_inserts, layout::build_layout},
15};
16
17pub fn render_script(model: &ExportModel, options: &ExportOptions) -> Result<String, ExportError> {
18 let mut out = String::new();
19 out.push_str("# ReifyDB logical export\n\n");
20
21 if options.includes_schema() {
22 for namespace in &model.namespaces {
23 out.push_str(&ddl::render_namespace(namespace, options.if_not_exists));
24 out.push('\n');
25 }
26 if !model.namespaces.is_empty() {
27 out.push('\n');
28 }
29 for sumtype in &model.sumtypes {
30 out.push_str(&ddl::render_enum(sumtype, &model.resolver, options.if_not_exists)?);
31 out.push('\n');
32 }
33 for dictionary in &model.dictionaries {
34 out.push_str(&ddl::render_dictionary(dictionary, &model.resolver, options.if_not_exists)?);
35 out.push('\n');
36 }
37 for table in &model.tables {
38 out.push_str(&ddl::render_table(&table.table, &model.resolver, options.if_not_exists)?);
39 out.push('\n');
40 }
41 for ringbuffer in &model.ringbuffers {
42 out.push_str(&ddl::render_ringbuffer(&ringbuffer.ringbuffer, &model.resolver)?);
43 out.push('\n');
44 }
45 for series in &model.series {
46 out.push_str(&ddl::render_series(&series.series, &model.resolver)?);
47 out.push('\n');
48 }
49 out.push('\n');
50 }
51
52 if options.includes_data() {
53 for table in &model.tables {
54 if let Some(rows) = &table.rows {
55 let name = ddl::qualified_name(
56 &model.resolver,
57 table.table.namespace.0,
58 &table.table.name,
59 &table.table.name,
60 )?;
61 let layout = build_layout(&table.table.columns, &model.resolver);
62 out.push_str(&render_inserts(
63 &name,
64 rows,
65 options.insert_batch_size,
66 &layout,
67 &model.resolver,
68 )?);
69 }
70 }
71 for ringbuffer in &model.ringbuffers {
72 if let Some(rows) = &ringbuffer.rows {
73 let name = ddl::qualified_name(
74 &model.resolver,
75 ringbuffer.ringbuffer.namespace.0,
76 &ringbuffer.ringbuffer.name,
77 &ringbuffer.ringbuffer.name,
78 )?;
79 let layout = build_layout(&ringbuffer.ringbuffer.columns, &model.resolver);
80 out.push_str(&render_inserts(
81 &name,
82 rows,
83 options.insert_batch_size,
84 &layout,
85 &model.resolver,
86 )?);
87 }
88 }
89 for series in &model.series {
90 if let Some(rows) = &series.rows {
91 let name = ddl::qualified_name(
92 &model.resolver,
93 series.series.namespace.0,
94 &series.series.name,
95 &series.series.name,
96 )?;
97 let layout = build_layout(&series.series.columns, &model.resolver);
98 out.push_str(&render_inserts(
99 &name,
100 rows,
101 options.insert_batch_size,
102 &layout,
103 &model.resolver,
104 )?);
105 }
106 }
107 }
108
109 Ok(out)
110}