src/Sins/Doctrine/Resources/views/ORMWebProfiler/db.html.twig
{% extends '@WebProfiler/Profiler/layout.html.twig' %}
{% block toolbar %}
{% set icon %}
<img width="20" height="28" alt="Database" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQRJREFUeNpi/P//PwM1ARMDlcGogZQDlpMnT7pxc3NbA9nhQKxOpL5rQLwJiPeBsI6Ozl+YBOOOHTv+AOllQNwtLS39F2owKYZ/gRq8G4i3ggxEToggWzvc3d2Pk+1lNL4fFAs6ODi8JzdS7mMRVyDVoAMHDsANdAPiOCC+jCQvQKqBQB/BDbwBxK5AHA3E/kB8nKJkA8TMQBwLxaBIKQbi70AvTADSBiSadwFXpCikpKQU8PDwkGTaly9fHFigkaKIJid4584dkiMFFI6jkTJII0WVmpHCAixZQEXWYhDeuXMnyLsVlEQKI45qFBQZ8eRECi4DBaAlDqle/8A48ip6gAADANdQY88Uc0oGAAAAAElFTkSuQmCC" />
<span class="sf-toolbar-status{% if 50 < collector.querycount %} sf-toolbar-status-yellow{% endif %}">{{ collector.querycount }}</span>
{% if collector.querycount > 0 %}
<span class="sf-toolbar-info-piece-additional-detail">in {{ '%0.2f'|format(collector.time * 1000) }} ms</span>
{% endif %}
{% if collector.invalidEntityCount > 0 %}
<span class="sf-toolbar-info-piece-additional sf-toolbar-status sf-toolbar-status-red"> </span>
{% endif %}
{% endset %}
{% set text %}
<div class="sf-toolbar-info-piece">
<b>DB Queries</b>
<span>{{ collector.querycount }}</span>
</div>
<div class="sf-toolbar-info-piece">
<b>Query time</b>
<span>{{ '%0.2f'|format(collector.time * 1000) }} ms</span>
</div>
<div class="sf-toolbar-info-piece">
<b>Invalid entities</b>
<span class="sf-toolbar-status sf-toolbar-status-{{ collector.invalidEntityCount > 0 ? 'red' : 'green' }}">{{ collector.invalidEntityCount }}</span>
</div>
{% endset %}
{% include '@WebProfiler/Profiler/toolbar_item.html.twig' with { 'link': profiler_url } %}
{% endblock %}
{% block menu %}
<span class="label">
<span class="icon"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAcCAYAAAB/E6/TAAABLUlEQVR42u3TP0vDQBiA8UK/gDiLzi0IhU4OEunk5OQUAhGSOBUCzqWfIKSzX8DRySF0URCcMjWLIJjFD9Cpk/D6HITecEPUuzhIAz8CIdyTP/f2iqI4qaqqDx8l5Ic2uIeP/bquezCokOAFF+oCN3t4gPzSEjc4NEPaCldQbzjELTYW0RJzHDchwwem+ons6ZBpLSJ7nueJC22h0V+FzmwWV0ee59vQNV67CGVZJmEYbkNjfpY6X6I0Qo4/3RMmTdDDspuQVsJvgkP3IdMbIkIjLPBoadG2646iKJI0Ta2wxm6OdnP0/Tk6DYJgHcfxpw21RtscDTDDnaVZ26474GkkSRIrrPEv5sgMTfHe+cA2O6wPH6vOBpYQNALneHb96XTEDI6dzpEZ0VzO0Rf3pP5LMLI4tAAAAABJRU5ErkJggg==" alt="" /></span>
<strong>Doctrine</strong>
<span class="count">
<span>{{ collector.querycount }}</span>
<span>{{ '%0.0f'|format(collector.time * 1000) }} ms</span>
</span>
</span>
{% endblock %}
{% block panel %}
{{ block('queries') }}
{% endblock %}
{% block queries %}
<h2>Queries</h2>
{% for connection, queries in collector.queries %}
<h3>Connection <em>{{ connection }}</em></h3>
{% if queries is empty %}
<p>
<em>No queries.</em>
</p>
{% else %}
<p>
<button type="button" class="sf-button" onclick="expandAllQueries(this);" data-action="expand">
<span class="border-l">
<span class="border-r">
<span class="btn-bg">Expand all queries</span>
</span>
</span>
</button>
</p>
<ul class="alt" id="queriesPlaceholder-{{ loop.index }}">
{% for i, query in queries %}
<li class="{{ cycle(['odd', 'even'], i) }}" data-extra-info="{{ '%0.2f'|format(query.executionMS * 1000) }}" data-target-id="{{ i }}">
<div style="margin-top: 4px" id="queryNo-{{ i }}-{{ loop.parent.loop.index }}">
<div class="query-section" data-state="collapsed" onclick="return expandQuery(this);" title="Expand query" data-target-id="code-{{ i }}-{{ loop.parent.loop.index }}" style="cursor: pointer;">
<img alt="+" src="data:image/gif;base64,R0lGODlhEgASAMQTANft99/v+Ga44bHb8ITG52S44dXs9+z1+uPx+YvK6WC24G+944/M6W28443L6dnu+Ge54v/+/l614P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABMALAAAAAASABIAQAVS4DQBTiOd6LkwgJgeUSzHSDoNaZ4PU6FLgYBA5/vFID/DbylRGiNIZu74I0h1hNsVxbNuUV4d9SsZM2EzWe1qThVzwWFOAFCQFa1RQq6DJB4iIQA7" style="display: inline;" />
<img alt="-" src="data:image/gif;base64,R0lGODlhEgASAMQSANft94TG57Hb8GS44ez1+mC24IvK6ePx+Wa44dXs92+942e54o3L6W2844/M6dnu+P/+/l614P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABIALAAAAAASABIAQAVCoCQBTBOd6Kk4gJhGBCTPxysJb44K0qD/ER/wlxjmisZkMqBEBW5NHrMZmVKvv9hMVsO+hE0EoNAstEYGxG9heIhCADs=" style="display: none;" />
<span style="display: none">Shrink query</span>
<span id="smallcode-{{ i }}-{{ loop.parent.loop.index }}">
{{ query.sql|doctrine_minify_query|raw }}
</span>
</div>
<code id="code-{{ i }}-{{ loop.parent.loop.index }}">
{{ query.sql|doctrine_pretty_query(i, loop.parent.loop.index)|raw }}
</code>
<span id="original-query-{{ i }}-{{ loop.parent.loop.index }}" style="display: none;">
{{ query.sql|doctrine_replace_query_parameters(query.params)|raw }}
</span>
<small>
<strong>Parameters</strong>: {{ query.params|json_encode }} <br />
[<span id="expandParams-{{ i }}-{{ loop.parent.loop.index }}" onclick="javascript:toggleRunnableQuery(this);" target-data-id="original-query-{{ i }}-{{ loop.parent.loop.index }}" style="cursor: pointer;">Display runnable query</span>]<br/>
<strong>Time</strong>: {{ '%0.2f'|format(query.executionMS * 1000) }} ms
</small>
</div>
</li>
{% endfor %}
</ul>
{% endif %}
{% endfor %}
<h2>Database Connections</h2>
{% if collector.connections %}
{% include '@WebProfiler/Profiler/table.html.twig' with {data: collector.connections} only %}
{% else %}
<p>
<em>No connections.</em>
</p>
{% endif %}
<h2>Entity Managers</h2>
{% if collector.managers %}
{% include '@WebProfiler/Profiler/table.html.twig' with {data: collector.managers} only %}
{% else %}
<p>
<em>No entity managers.</em>
</p>
{% endif %}
<h2>Mapping</h2>
{% for manager, classes in collector.entities %}
<h3>Manager <em>{{ manager }}</em></h3>
{% if classes is empty %}
<p><em>No loaded entities.</em></p>
{% else %}
<table>
<thead>
<tr>
<th scope="col">Class</th>
<th scope="col">Mapping errors</th>
</tr>
</thead>
<tbody>
{% for class in classes %}
<tr>
<td>{{ class }}</td>
<td>
{% if collector.mappingErrors[manager][class] is defined %}
<ul>
{% for error in collector.mappingErrors[manager][class] %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% else %}
Valid
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% endfor %}
<script type="text/javascript">//<![CDATA[
function explain(link) {
"use strict";
var imgs = link.children,
target = link.getAttribute('data-target-id');
Sfjs.toggle(target, imgs[0], imgs[1])
.load(
target,
link.href,
null,
function(xhr, el) {
el.innerHTML = 'An error occurred while loading the details';
Sfjs.removeClass(el, 'loading');
}
);
return false;
}
function expandAllQueries(button) {
var queries = document.getElementsByClassName('query-section'),
i = queries.length,
action = button.getAttribute('data-action');
if (action == 'expand') {
button.getElementsByClassName('btn-bg')[0].innerHTML = 'Collapse all queries';
while (i--) {
if (queries[i].getAttribute('data-state') == 'collapsed') {
expandQuery(queries[i]);
}
}
} else {
button.getElementsByClassName('btn-bg')[0].innerHTML = 'Expand all queries';
while (i--) {
if (queries[i].getAttribute('data-state') == 'expanded') {
expandQuery(queries[i]);
}
}
}
button.setAttribute('data-action', action == 'expand' ? 'collapse' : 'expand');
}
function expandQuery(link) {
var sections = link.children,
target = link.getAttribute('data-target-id'),
targetId = target.replace('code', ''),
queriesParameters = document.getElementById('original-query' + targetId);
if (queriesParameters.style.display != 'none') {
queriesParameters.style.display = 'none';
document.getElementById('small' + target).style.display = 'inline';
document.getElementById('expandParams' + targetId).innerHTML = 'Display runnable query';
}
if (document.getElementById('small' + target).style.display != 'none') {
document.getElementById('small' + target).style.display = 'none';
document.getElementById(target).style.display = 'inline';
sections[0].style.display = 'none';
sections[1].style.display = 'inline';
sections[2].style.display = 'inline';
link.setAttribute('data-state', 'expanded');
} else {
document.getElementById('small' + target).style.display = 'inline';
document.getElementById(target).style.display = 'none';
sections[0].style.display = 'inline';
sections[1].style.display = 'none';
sections[2].style.display = 'none';
link.setAttribute('data-state', 'collapsed');
}
return false;
}
function toggleRunnableQuery(target) {
var targetId = target.getAttribute('target-data-id').replace('original-query', ''),
targetElement = document.getElementById(target.getAttribute('target-data-id')),
elem;
if (targetElement.style.display != 'block') {
targetElement.style.display = 'block';
target.innerHTML = 'Hide runnable query';
document.getElementById('smallcode' + targetId).style.display = 'none';
document.getElementById('code' + targetId).style.display = 'none';
elem = document.getElementById('code' + targetId).parentElement.children[0];
elem.children[0].style.display = 'inline';
elem.children[1].style.display = 'none';
elem.children[2].style.display = 'none';
} else {
targetElement.style.display = 'none';
target.innerHTML = 'Display runnable query';
document.getElementById('smallcode' + targetId).style.display = 'inline';
}
}
//]]></script>
<style>
h3 {
margin-bottom: 0px;
}
code {
display: none;
}
code pre {
padding: 5px;
}
</style>
{% endblock %}