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
use maud::{html, Markup};

use crate::components::page::page;
use dbui_core::cfg::APPNAME;
use dbui_core::ctx::RequestContext;
use dbui_core::database::results::ResultSet;
use dbui_core::result::Result;

pub fn results(ctx: &RequestContext, 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.uk-text-lead.uk-text-left {
            pre { (sql) }
          }
          div.uk-margin-top {
            div.uk-card.uk-card-body.uk-card-default {
              table.uk-table.uk-table-divider.uk-table-hover.uk-text-left {
                thead {
                  tr {
                    @for c in result.columns() {
                      th { (c.name()) }
                    }
                  }
                }
                tbody {
                  @if result.data().is_empty() {
                    tr {
                      td colspan=(result.columns().len()) { "No rows returned" }
                    }
                  }
                  @for row in result.data() {
                    tr {
                      @for cell in row {
                        td {
                          (cell.as_ref().unwrap_or(&"∅".to_string()))
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  };
  Ok(html! {
    (page(ctx, APPNAME, content)?)
  })
}