<commit_before><sect1 id="zend.db.profiler" xmlns:xi="http://www.w3.org/2001/XInclude">

    <title>Zend_Db_Profiler</title>

    <sect2 id="zend.db.profiler.introduction">

        <title>Wprowadzenie</title>

        <para>
            <code>Zend_Db_Profiler</code> może być włączony aby pozwolić na
            profilowanie zapytań. Profilowanie umożliwia zbadanie czasu trwania
            zapytań pozwalając na inspekcję przeprowadzonych zapytań bez potrzeby
            dodawania dodatkowego kodu do klas. Zaawansowane użycie pozwala także
            programiście decydować o tym, jakich typów zapytania mają być profilowane.
        </para>

        <para>
            Włącz profiler przekazując odpowiednią dyrektywę do konstruktora
            adaptera, lub wywołując później metodę adaptera.
        </para>

        <programlisting role="php"><![CDATA[
$params = array (
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => '<PASSWORD>',
    'dbname'   => 'test',
    'profiler' => true  // włącz profiler; ustaw false aby wyłączyć (domyślne wyłączony)
);

$db = Zend_Db::factory('PDO_MYSQL', $params);

// wyłącz profiler:
$db->getProfiler()->setEnabled(false);

// włącz profiler:
$db->getProfiler()->setEnabled(true);
]]>
        </programlisting>

        <para>
            Wartość opcji '<code>profiler</code>' jest dość elastyczna. Jest
            ona interpretowana zależnie id jej typu. W większości przypadków
            powinieneś użyć wartości logicznej, ale inne typy pozwalają na
            dostosowanie zachowania profilera do własnych potrzeb.
        </para>

        <para>
            Parametr logiczny włącza profiler jeśli ma wartość
            <code>true</code>, lub wyłącza jeśli ma wartość <code>false</code>.
            Klasą profilera domyślnie jest klasa <code>Zend_Db_Profiler</code>.
            <programlisting role="php"><![CDATA[
$params['profiler'] = true;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>
        </para>

        <para>
            Przekazanie instancji obiektu profilera powoduje jej użycie przez
            sterownik bazy danych. Musi to być obiekt klasy
            <code>Zend_Db_Profiler</code> lub klasy ją rozszerzającej. Aktywacja
            profilera odbywa się osobno.
            <programlisting role="php"><![CDATA[
$profiler = MyProject_Db_Profiler();
$profiler->setEnabled(true);
$params['profiler'] = $profiler;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>
        </para>

        <para>
            Argument może być tablicą asocjacyjną zawierającą wszystkie lub
            jeden z kluczy '<code>enabled</code>', '<code>instance</code>', oraz
            '<code>class</code>'. Klucz '<code>enabled</code>' odpowiada wartości
            logicznej, a '<code>instance</code>' wartości instancji, obie są
            opisane powyżej. Klucz '<code>class</code>' jest używany do podania
            nazwy klasy jaka ma być użyta we własnym profilerze. Musi być to
            obiekt klasy <code>Zend_Db_Profiler</code> lub klasy ją rozszerzającej.
            Instancja klasy jest tworzona bez żadnych argumentów. Opcja
            '<code>class</code>' jest ingorowana jeśli podana jest opcja
            '<code>instance</code>'.
            <programlisting role="php"><![CDATA[
$params['profiler'] = array(
    'enabled' => true,
    'class'   => 'MyProject_Db_Profiler'
);
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>
        </para>

        <para>
            Ostatecznie, argument może być obiektem klasy <code>Zend_Config</code>
            zawierającym właściwości, które są traktowane jako klucze tablicy
            opisane powyżej. Przykładowo plik "config.ini" może zawierać
            następujące dane:
            <programlisting role="ini"><![CDATA[
[main]
db.profiler.class   = "MyProject_Db_Profiler"
db.profiler.enabled = true
]]>
            </programlisting>

            Konfiguracja może być przekazana za pomocą takiego kodu PHP:

            <programlisting role="php"><![CDATA[
$config = new Zend_Config_Ini('config.ini', 'main');
$params['profiler'] = $config->db->profiler;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>

            Właściwość '<code>instance</code>' może być użyta w następujący sposób:
            <programlisting role="php"><![CDATA[
$profiler = new MyProject_Db_Profiler();
$profiler->setEnabled(true);
$configData = array(
    'instance' => $profiler
);
$config = new Zend_Config($configData);
$params['profiler'] = $config;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>

        </para>

    </sect2>

    <sect2 id="zend.db.profiler.using">

        <title>Użycie profilera</title>

        <para>
            W dowolnym momencie możesz pobrać profiler używając metody
            adaptera <code>getProfiler()</code>:
        </para>

        <programlisting role="php"><![CDATA[
$profiler = $db->getProfiler();
]]>
        </programlisting>

        <para>
            Zwraca to instancję <code>Zend_Db_Profiler</code>. Używając tej
            instancji programista może zbadać zapytania używając rozmaitych
            metod:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <code>getTotalNumQueries()</code> zwraca liczbę wszystkich
                    zapytań które były profilowane.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>getTotalElapsedSecs()</code> zwraca całkowity czas
                    trwania profilowanych zapytań.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>getQueryProfiles()</code> zwraca tablicę wszystkich
                    profilów zapytań.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>getLastQueryProfile()</code> zwraca ostatni (najnowszy)
                    profil zapytania, niezależnie od tego czy zostało ono zakończone czy
                    nie (jeśli nie zostało, to czas zakończenia będzie miał wartość null)
                </para>
            </listitem>
            <listitem>
                <para><commit_msg>Minor fixes to Zend_Db_Profiler PL documentation<commit_after><?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: yes -->
<sect1 id="zend.db.profiler" xmlns:xi="http://www.w3.org/2001/XInclude">

    <title>Zend_Db_Profiler</title>

    <sect2 id="zend.db.profiler.introduction">

        <title>Wprowadzenie</title>

        <para>
            <code>Zend_Db_Profiler</code> może być włączony aby pozwolić na
            profilowanie zapytań. Profilowanie umożliwia zbadanie czasu trwania
            zapytań pozwalając na inspekcję przeprowadzonych zapytań bez potrzeby
            dodawania nadmiarowego kodu do klas. Zaawansowane użycie pozwala także
            programiście decydować o tym, jakich typów zapytania mają być profilowane.
        </para>

        <para>
            Włącz profiler przekazując odpowiednią dyrektywę do konstruktora
            adaptera lub wywołując później metodę adaptera.
        </para>

        <programlisting role="php"><![CDATA[
$params = array (
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => '<PASSWORD>',
    'dbname'   => 'test',
    'profiler' => true  // włącz profiler; ustaw false aby wyłączyć (domyślne wyłączony)
);

$db = Zend_Db::factory('PDO_MYSQL', $params);

// wyłącz profiler:
$db->getProfiler()->setEnabled(false);

// włącz profiler:
$db->getProfiler()->setEnabled(true);
]]>
        </programlisting>

        <para>
            Wartość opcji '<code>profiler</code>' jest dość elastyczna. Jest
            ona interpretowana zależnie id jej typu. W większości przypadków
            powinieneś użyć wartości logicznej, ale inne typy pozwalają na
            dostosowanie zachowania profilera do własnych potrzeb.
        </para>

        <para>
            Parametr logiczny włącza profiler jeśli ma wartość
            <code>TRUE</code> lub wyłącza jeśli ma wartość <code>FALSE</code>.
            Klasą profilera domyślnie jest klasa <code>Zend_Db_Profiler</code>.
            <programlisting role="php"><![CDATA[
$params['profiler'] = true;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>
        </para>

        <para>
            Przekazanie instancji obiektu profilera powoduje jej użycie przez
            adapter bazy danych. Musi to być obiekt klasy
            <code>Zend_Db_Profiler</code> lub klasy ją rozszerzającej. Aktywacja
            profilera odbywa się osobno.
            <programlisting role="php"><![CDATA[
$profiler = MyProject_Db_Profiler();
$profiler->setEnabled(true);
$params['profiler'] = $profiler;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>
        </para>

        <para>
            Argument może być tablicą asocjacyjną zawierającą wszystkie lub
            jeden z kluczy '<code>enabled</code>', '<code>instance</code>', oraz
            '<code>class</code>'. Klucz '<code>enabled</code>' odpowiada wartości
            logicznej, a '<code>instance</code>' wartości instancji, obie są
            opisane powyżej. Klucz '<code>class</code>' jest używany do podania
            nazwy klasy jaka ma być użyta we własnym profilerze. Musi być to
            obiekt klasy <code>Zend_Db_Profiler</code> lub klasy ją rozszerzającej.
            Instancja klasy jest tworzona bez żadnych argumentów. Opcja
            '<code>class</code>' jest ingorowana jeśli podana jest opcja
            '<code>instance</code>'.
            <programlisting role="php"><![CDATA[
$params['profiler'] = array(
    'enabled' => true,
    'class'   => 'MyProject_Db_Profiler'
);
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>
        </para>

        <para>
            Ostatecznie, argument może być obiektem klasy <code>Zend_Config</code>
            zawierającym właściwości, które są traktowane jako klucze tablicy
            opisane powyżej. Przykładowo plik "config.ini" może zawierać
            następujące dane:
            <programlisting role="ini"><![CDATA[
[main]
db.profiler.class   = "MyProject_Db_Profiler"
db.profiler.enabled = true
]]>
            </programlisting>

            Konfiguracja może być przekazana za pomocą takiego kodu PHP:

            <programlisting role="php"><![CDATA[
$config = new Zend_Config_Ini('config.ini', 'main');
$params['profiler'] = $config->db->profiler;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>

            Właściwość '<code>instance</code>' może być użyta w następujący sposób:
            <programlisting role="php"><![CDATA[
$profiler = new MyProject_Db_Profiler();
$profiler->setEnabled(true);
$configData = array(
    'instance' => $profiler
);
$config = new Zend_Config($configData);
$params['profiler'] = $config;
$db = Zend_Db::factory('PDO_MYSQL', $params);
]]>
            </programlisting>

        </para>

    </sect2>

    <sect2 id="zend.db.profiler.using">

        <title>Użycie profilera</title>

        <para>
            W dowolnym momencie możesz pobrać profiler używając metody
            adaptera <code>getProfiler()</code>:
        </para>

        <programlisting role="php"><![CDATA[
$profiler = $db->getProfiler();
]]>
        </programlisting>

        <para>
            Zwraca to instancję <code>Zend_Db_Profiler</code>. Używając tej
            instancji programista może zbadać zapytania używając rozmaitych
            metod:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <code>getTotalNumQueries()</code> zwraca liczbę wszystkich
                    zapytań które były profilowane.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>getTotalElapsedSecs()</code> zwraca całkowity czas
                    trwania profilowanych zapytań.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>getQueryProfiles()</code> zwraca tablicę wszystkich
                    profilów zapytań.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>getLastQueryProfile()</code> zwraca ostatni (najnowszy)
                    profil zapytania, niezależnie od tego czy zostało ono zakończone czy
                    nie (jeśli nie zostało, to czas zakończenia będzie miał wartość <constant>NULL</constant>)
                </para>
            </listitem>
            <listitem>
                <para>
{'fraction_non_alphanumeric': 0.11419249592169657, 'fraction_numerical': 0.002951914860560864, 'mean_word_length': 2.2766607279205906, 'pattern_counts': {'":': 0, '<': 244, '<?xml version=': 1, '>': 278, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 3}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4901368', 'n_tokens_mistral': 4404, 'n_tokens_neox': 4470, 'n_words': 945}