1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
use anyhow::Result; use dbui_core::database::results::ResultSet; use dbui_core::field_type::FieldType; use dbui_service::{RequestContext, Router}; use maud::{html, Markup}; pub fn results(ctx: &RequestContext, router: &dyn Router, sql: &str, result: &ResultSet) -> Result<Markup> { let content = html! { div.uk-section.uk-section-small { div.uk-container { div.uk-text-center { h1.uk-heading-hero { "SQL Results" } } div { (crate::card(&ctx, html! { pre { (sql) } })) div.uk-margin-top { (crate::card(&ctx, html! { table.uk-table.uk-table-divider.uk-text-left { thead { tr { @for c in result.columns() { th { (c.name()) } } } } tbody { @if result.data().is_empty() { tr { td colspan=(if result.columns().is_empty() { 1 } else { result.columns().len() }) { "No rows returned" } } } @for row in result.data() { tr { @for cell in result.columns().iter().zip(row) { td { (write_field(cell.0.t(), cell.1)) } } } } } } })) } } } } }; crate::simple(ctx, router, "SQL Results", content) } fn write_field(ft: &FieldType, v: &Option<String>) -> Markup { match *ft { FieldType::Json => html! { pre { (v.as_ref().unwrap_or(&"∅".to_string())) } }, _ => html! { (v.as_ref().unwrap_or(&"∅".to_string())) } } }