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 queue in &model.queues {
42 out.push_str(&ddl::render_queue(&queue.queue, &model.resolver)?);
43 out.push('\n');
44 }
45
46 for ringbuffer in &model.ringbuffers {
47 out.push_str(&ddl::render_ringbuffer(&ringbuffer.ringbuffer, &model.resolver)?);
48 out.push('\n');
49 }
50 for series in &model.series {
51 out.push_str(&ddl::render_series(&series.series, &model.resolver)?);
52 out.push('\n');
53 }
54 out.push('\n');
55 }
56
57 if options.includes_data() {
58 for table in &model.tables {
59 if let Some(rows) = &table.rows {
60 let name = ddl::qualified_name(
61 &model.resolver,
62 table.table.namespace.0,
63 &table.table.name,
64 &table.table.name,
65 )?;
66 let layout = build_layout(&table.table.columns, &model.resolver);
67 out.push_str(&render_inserts(
68 &name,
69 rows,
70 options.insert_batch_size,
71 &layout,
72 &model.resolver,
73 )?);
74 }
75 }
76 for ringbuffer in &model.ringbuffers {
77 if let Some(rows) = &ringbuffer.rows {
78 let name = ddl::qualified_name(
79 &model.resolver,
80 ringbuffer.ringbuffer.namespace.0,
81 &ringbuffer.ringbuffer.name,
82 &ringbuffer.ringbuffer.name,
83 )?;
84 let layout = build_layout(&ringbuffer.ringbuffer.columns, &model.resolver);
85 out.push_str(&render_inserts(
86 &name,
87 rows,
88 options.insert_batch_size,
89 &layout,
90 &model.resolver,
91 )?);
92 }
93 }
94 for series in &model.series {
95 if let Some(rows) = &series.rows {
96 let name = ddl::qualified_name(
97 &model.resolver,
98 series.series.namespace.0,
99 &series.series.name,
100 &series.series.name,
101 )?;
102 let layout = build_layout(&series.series.columns, &model.resolver);
103 out.push_str(&render_inserts(
104 &name,
105 rows,
106 options.insert_batch_size,
107 &layout,
108 &model.resolver,
109 )?);
110 }
111 }
112 }
113
114 Ok(out)
115}