MCPcopy Create free account
hub / github.com/NationalSecurityAgency/TraceAnalysis / flush

Method flush

dynamic-dataflow/core/src/database/cache.rs:65–322  ·  view source on GitHub ↗
(
        &mut self,
        conn: &mut rusqlite::Connection,
    )

Source from the content-addressed store, hash-verified

63 }
64
65 pub(super) fn flush(
66 &mut self,
67 conn: &mut rusqlite::Connection,
68 ) -> Result<(), super::DatabaseError> {
69 let mut params: Vec<&dyn rusqlite::ToSql> = Vec::new();
70
71 ////////////////////
72 // diassembly
73 ////////////////////
74
75 let tx = conn.transaction()?;
76
77 let mut param_str = " (?, ?),".repeat(50);
78 param_str.pop();
79 let mut stmt = tx.prepare_cached(
80 format!("INSERT INTO disassembly (id, text) VALUES {}", param_str).as_str(),
81 )?;
82 let records: Vec<sql::Disassembly> = self
83 .disasm_cache
84 .iter()
85 .map(|text| unsafe { std::str::from_utf8_unchecked(text) })
86 .enumerate()
87 .map(|(id, text)| sql::Disassembly {
88 id: id as i64,
89 text: Cow::from(text),
90 })
91 .collect();
92 for batch in records.chunks(50) {
93 params.clear();
94 if batch.len() == 50 {
95 params.extend(batch.iter().flat_map(|record| {
96 [
97 &record.id as &dyn rusqlite::ToSql,
98 &record.text as &dyn rusqlite::ToSql,
99 ]
100 }));
101 stmt.execute(params.as_slice())?;
102 continue;
103 }
104 param_str = " (?, ?),".repeat(batch.len());
105 param_str.pop();
106 let mut stmt = tx.prepare_cached(
107 format!("INSERT INTO disassembly (id, text) VALUES {}", param_str).as_str(),
108 )?;
109 params.extend(batch.iter().flat_map(|record| {
110 [
111 &record.id as &dyn rusqlite::ToSql,
112 &record.text as &dyn rusqlite::ToSql,
113 ]
114 }));
115 stmt.execute(params.as_slice())?;
116 }
117
118 std::mem::drop(stmt);
119 tx.commit()?;
120
121 ////////////////////
122 // operations

Callers 1

saveMethod · 0.45

Calls 13

mapMethod · 0.80
chunksMethod · 0.80
extendMethod · 0.80
as_sliceMethod · 0.80
idMethod · 0.80
spaceMethod · 0.80
offsetMethod · 0.80
to_usizeMethod · 0.80
iterMethod · 0.45
clearMethod · 0.45
lenMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected