MCPcopy Create free account
hub / github.com/f0rr0/oliphaunt / parse_results

Function parse_results

src/pglite/parse.rs:11–65  ·  view source on GitHub ↗
(
    messages: &[BackendMessage],
    default_parsers: &ParserMap,
    options: Option<&QueryOptions>,
    blob: Option<Vec<u8>>,
)

Source from the content-addressed store, hash-verified

9};
10
11pub fn parse_results(
12 messages: &[BackendMessage],
13 default_parsers: &ParserMap,
14 options: Option<&QueryOptions>,
15 blob: Option<Vec<u8>>,
16) -> Vec<Results> {
17 let mut result_sets: Vec<Results> = Vec::new();
18 let mut current_fields: Vec<FieldInfo> = Vec::new();
19 let mut current_rows: Vec<Value> = Vec::new();
20 let mut affected_rows = 0usize;
21
22 let empty_parsers = HashMap::new();
23 let (row_mode, parsers_override) = options
24 .map(|opts| (opts.row_mode, &opts.parsers))
25 .unwrap_or((None, &empty_parsers));
26
27 let parser_lookup = ParserLookup::new(default_parsers, parsers_override);
28
29 for message in messages {
30 match message {
31 BackendMessage::RowDescription(desc) => {
32 current_fields = map_fields(desc);
33 }
34 BackendMessage::DataRow(row) => {
35 if current_fields.is_empty() {
36 continue;
37 }
38 let row_value = map_row(row, &current_fields, &parser_lookup, row_mode);
39 current_rows.push(row_value);
40 }
41 BackendMessage::CommandComplete(cmd) => {
42 affected_rows += retrieve_row_count(cmd);
43 result_sets.push(Results {
44 rows: std::mem::take(&mut current_rows),
45 fields: current_fields.clone(),
46 affected_rows: Some(affected_rows),
47 blob: blob.clone(),
48 });
49 current_fields.clear();
50 }
51 _ => {}
52 }
53 }
54
55 if result_sets.is_empty() {
56 result_sets.push(Results {
57 rows: Vec::new(),
58 fields: Vec::new(),
59 affected_rows: Some(0),
60 blob,
61 })
62 }
63
64 result_sets
65}
66
67pub fn parse_describe_statement_results(messages: &[BackendMessage]) -> Vec<i32> {
68 messages

Callers 2

finish_queryMethod · 0.85
finish_execMethod · 0.85

Calls 4

map_fieldsFunction · 0.85
map_rowFunction · 0.85
retrieve_row_countFunction · 0.85
pushMethod · 0.80

Tested by

no test coverage detected