sql.html 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. {% load i18n %}
  2. <div class="clearfix">
  3. <ul class="stats">
  4. {% for alias, info in databases %}
  5. <li>
  6. <strong class="label"><span style="background-color: rgb({{ info.rgb_color|join:", " }})" class="color">&nbsp;</span> {{ alias }}</strong>
  7. <span class="info">{{ info.time_spent|floatformat:"2" }} ms ({% blocktrans count info.num_queries as num %}{{ num }} query{% plural %}{{ num }} queries{% endblocktrans %})</span>
  8. </li>
  9. {% endfor %}
  10. </ul>
  11. </div>
  12. {% if queries %}
  13. <table>
  14. <thead>
  15. <tr>
  16. <th class="color">&nbsp;</th>
  17. <th class="query" colspan="2">{% trans 'Query' %}</th>
  18. <th class="timeline">{% trans 'Timeline' %}</th>
  19. <th class="time">{% trans 'Time (ms)' %}</th>
  20. <th class="actions">{% trans "Action" %}</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. {% for query in queries %}
  25. <tr class="djDebugHoverable {% cycle 'djDebugOdd' 'djDebugEven' %}{% if query.is_slow %} djDebugRowWarning{% endif %}{% if query.starts_trans %} djDebugStartTransaction{% endif %}{% if query.ends_trans %} djDebugEndTransaction{% endif %}{% if query.in_trans %} djDebugInTransaction{% endif %}" id="sqlMain_{{ forloop.counter }}">
  26. <td class="color"><span style="background-color: rgb({{ query.rgb_color|join:", " }});">&nbsp;</span></td>
  27. <td class="toggle">
  28. <a class="djToggleSwitch" data-toggle-id="{{ forloop.counter }}" data-toggle-open="+" data-toggle-close="-" href="javascript:void(0)">+</a>
  29. </td>
  30. <td class="query">
  31. <div class="djDebugSqlWrap">
  32. <div class="djDebugSql">{{ query.sql|safe }}</div>
  33. </div>
  34. </td>
  35. <td class="timeline">
  36. <div class="djDebugTimeline"><div class="djDebugLineChart{% if query.is_slow %} djDebugLineChartWarning{% endif %}" style="left:{{ query.start_offset }}%;"><strong style="width:{{ query.width_ratio }}%;">{{ query.width_ratio }}%</strong></div></div>
  37. </td>
  38. <td class="time">
  39. {{ query.duration|floatformat:"2" }}
  40. </td>
  41. <td class="actions">
  42. {% if query.params %}
  43. {% if query.is_select %}
  44. <a class="remoteCall" href="/__debug__/sql_select/?sql={{ query.raw_sql|urlencode }}&amp;params={{ query.params|urlencode }}&amp;duration={{ query.duration|floatformat:"2"|urlencode }}&amp;hash={{ query.hash }}">Sel</a>
  45. <a class="remoteCall" href="/__debug__/sql_explain/?sql={{ query.raw_sql|urlencode }}&amp;params={{ query.params|urlencode }}&amp;duration={{ query.duration|floatformat:"2"|urlencode }}&amp;hash={{ query.hash }}">Expl</a>
  46. {% ifequal query.engine 'mysql' %}
  47. <a class="remoteCall" href="/__debug__/sql_profile/?sql={{ query.raw_sql|urlencode }}&amp;params={{ query.params|urlencode }}&amp;duration={{ query.duration|floatformat:"2"|urlencode }}&amp;hash={{ query.hash }}">Prof</a>
  48. {% endifequal %}
  49. {% endif %}
  50. {% endif %}
  51. </td>
  52. </tr>
  53. <tr class="djUnselected djDebugHoverable {% cycle 'djDebugOdd' 'djDebugEven' %}{% if query.is_slow %} djDebugRowWarning{% endif %} djToggleDetails_{{ forloop.counter }}" id="sqlDetails_{{ forloop.counter }}">
  54. <td colspan="2"></td>
  55. <td colspan="4">
  56. <div class="djSQLDetailsDiv">
  57. <p><strong>Connection:</strong> {{ query.alias }}</p>
  58. {% if query.iso_level %}
  59. <p><strong>Isolation Level:</strong> {{ query.iso_level }}</p>
  60. {% endif %}
  61. {% if query.trans_status %}
  62. <p><strong>Transaction Status:</strong> {{ query.trans_status }}</p>
  63. {% endif %}
  64. {% if query.stacktrace %}
  65. <pre class="stack">{{ query.stacktrace }}</pre>
  66. {% endif %}
  67. {% if query.template_info %}
  68. <table>
  69. {% for line in query.template_info.context %}
  70. <tr>
  71. <td>{{ line.num }}</td>
  72. <td><code style="font-family: monospace;{% if line.highlight %}background-color: lightgrey{% endif %}">{{ line.content }}</code></td>
  73. </tr>
  74. {% endfor %}
  75. </table>
  76. <p><strong>{{ query.template_info.name|default:"(unknown)" }}</strong></p>
  77. {% endif %}
  78. </div>
  79. </td>
  80. </tr>
  81. {% endfor %}
  82. </tbody>
  83. </table>
  84. {% else %}
  85. <p>No SQL queries were recorded during this request.</p>
  86. {% endif %}