github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/views/vdatabase/Statement.html (about)

     1  <!-- Content managed by Project Forge, see [projectforge.md] for details. -->
     2  {% import (
     3    "github.com/kyleu/dbaudit/app"
     4    "github.com/kyleu/dbaudit/app/controller/cutil"
     5    "github.com/kyleu/dbaudit/app/lib/database"
     6    "github.com/kyleu/dbaudit/app/util"
     7    "github.com/kyleu/dbaudit/views/components"
     8    "github.com/kyleu/dbaudit/views/components/view"
     9    "github.com/kyleu/dbaudit/views/layout"
    10  ) %}
    11  
    12  {% code type Statement struct {
    13    layout.Basic
    14    Statement *database.DebugStatement
    15  } %}
    16  
    17  {% func (p *Statement) Body(as *app.State, ps *cutil.PageState) %}
    18    {%- code s := p.Statement -%}
    19    <div class="card">
    20      <div class="right">{%s util.MicrosToMillis(s.Timing) %} elapsed</div>
    21      <h3>{%= components.SVGRefIcon(`database`, ps) %}Statement [{%d p.Statement.Index %}]</h3>
    22      <div class="right">{%d s.Count %} rows returned</div>
    23      <em>{%s s.Message %}</em>
    24      {%- if s.Error != "" -%}
    25      <div class="mt error">{%s s.Error %}</div>
    26      {%- endif -%}
    27      <div class="mt">
    28        <ul class="accordion">
    29          <li>
    30            <input id="accordion-sql" type="checkbox" hidden="hidden" />
    31            <label for="accordion-sql">{%= components.ExpandCollapse(3, ps) %} SQL</label>
    32            <div class="bd"><div><div>
    33              {%= statementSQL(s) %}
    34            </div></div></div>
    35          </li>
    36          {%- if len(s.Values) > 0 -%}
    37          <li>
    38            <input id="accordion-values" type="checkbox" hidden="hidden" />
    39            <label for="accordion-values">{%= components.ExpandCollapse(3, ps) %} Values</label>
    40            <div class="bd"><div><div>
    41              {%= statementValues(s) %}
    42            </div></div></div>
    43          </li>
    44          {%- endif -%}
    45          <li>
    46            <input id="accordion-out" type="checkbox" hidden="hidden" />
    47            <label for="accordion-out">{%= components.ExpandCollapse(3, ps) %} Result</label>
    48            <div class="bd"><div><div>
    49              {%= statementOut(s) %}
    50            </div></div></div>
    51          </li>
    52          {%- if len(s.Extra) > 0 -%}
    53          <li>
    54            <input id="accordion-extra" type="checkbox" hidden="hidden" />
    55            <label for="accordion-extra">{%= components.ExpandCollapse(3, ps) %} Query Plan</label>
    56            <div class="bd"><div><div>
    57              {%= view.MapArray(s.Extra, nil, true, ps) %}
    58            </div></div></div>
    59          </li>
    60          {%- endif -%}
    61        </ul>
    62      </div>
    63    </div>
    64  {% endfunc %}
    65  
    66  {% func statementSQL(s *database.DebugStatement) %}
    67    {%- code out, _ := cutil.FormatLang(s.SQL, "sql") -%}
    68    {%s= out %}
    69  {% endfunc %}
    70  
    71  {% func statementValues(s *database.DebugStatement) %}
    72    <div class="overflow full-width">
    73      <table>
    74        <thead>
    75          <tr>
    76            <th>#</th>
    77            <th>Values</th>
    78          </tr>
    79        </thead>
    80        <tbody>
    81          {%- for idx, v := range s.Values -%}
    82          <tr>
    83            <td>{%d idx+1 %}</td>
    84            <td>{%= components.JSON(v) %}</td>
    85          </tr>
    86          {%- endfor -%}
    87        </tbody>
    88      </table>
    89    </div>
    90  {% endfunc %}
    91  
    92  {% func statementOut(s *database.DebugStatement) %}
    93    {%- if len(s.Out) == 0 -%}
    94    <em>no results</em>
    95    {%- else -%}
    96    <div class="overflow full-width">
    97      <table>
    98        <thead>
    99          <tr>
   100            <th class="shrink">Idx</th>
   101            <th>Result</th>
   102          </tr>
   103        </thead>
   104        <tbody>
   105          {%- for idx, v := range s.Out -%}
   106          <tr>
   107            <td>{%d idx+1 %}</td>
   108            <td>{%= components.JSON(v) %}</td>
   109          </tr>
   110          {%- endfor -%}
   111          {%- if s.Count > len(s.Out) -%}
   112          <tr>
   113            <td colspan="2">...and {%d s.Count - len(s.Out) %} additional rows</td>
   114          </tr>
   115          {%- endif -%}
   116        </tbody>
   117      </table>
   118    </div>
   119    {%- endif -%}
   120  {% endfunc %}