sql.html 4.3 KB

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