LCOV - code coverage report
Current view: top level - dashql-core/src/formatter - explain.rs Coverage Total Hit
Test: DashQL 6e74948 Lines: 89.7 % 29 26
Test Date: 2026-11-06 17:46:50

            Line data    Source code
       1              : //! EXPLAIN statements.
       2              : 
       3              : use dashql_parser::attrs;
       4              : use super::{FmtReg, Formatter, FormattingJoinPolicy, K};
       5              : use dashql_buffers::parser::Node;
       6              : 
       7              : impl<'a> Formatter<'a> {
       8          126 :     pub(super) fn format_explain(&self, node_id: usize) -> FmtReg {
       9          126 :         let f = &self.fmt;
      10          126 :         let node: &'a Node = &self.ast[node_id];
      11          126 :         let [statement, options] = attrs!(self.children(node), [K::EXT_EXPLAIN_STATEMENT, K::EXT_EXPLAIN_OPTIONS]);
      12          126 :         let Some(statement) = statement else { return self.format_unimplemented(node) };
      13          126 :         let stmt_reg = self.reg(statement);
      14          126 :         if stmt_reg == 0 {
      15            0 :             return self.format_unimplemented(node);
      16          126 :         }
      17          126 :         if let Some(options) = options.filter(|o| o.children_count() > 0) {
      18           84 :             let options_reg = self.reg(options);
      19           84 :             if options_reg == 0 {
      20            0 :                 return self.format_unimplemented(node);
      21           84 :             }
      22           84 :             let header = f.concat(&[f.text("explain "), f.parenthesized(options_reg)]);
      23           84 :             return self.space_join(&[header, stmt_reg], FormattingJoinPolicy::ForceBreak, false);
      24           42 :         }
      25           42 :         f.concat(&[f.text("explain "), stmt_reg])
      26          126 :     }
      27              : 
      28            9 :     pub(super) fn format_explain_expressions(&self, node: &'a Node) -> FmtReg {
      29            9 :         let f = &self.fmt;
      30            9 :         let [expressions] = attrs!(self.children(node), [K::EXT_EXPLAIN_EXPRESSIONS]);
      31            9 :         let Some(expressions) = expressions else { return self.format_unimplemented(node) };
      32            9 :         let expressions_reg = self.reg(expressions);
      33            9 :         if expressions_reg == 0 {
      34            0 :             return self.format_unimplemented(node);
      35            9 :         }
      36            9 :         f.concat(&[f.text("expressions "), f.parenthesized(expressions_reg)])
      37            9 :     }
      38              : }
        

Generated by: LCOV version 2.0-1