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 %}