.. _sql_editor:

Редактор запросов
======================

Редактор запросов представляет собой настраиваемый инструмент просмотра и выполнения операторов SQL. 
Одновременно может быть открыто любое количество редакторов.

Редактор поддерживает следующие функции:

* Настраиваемая подсветка синтаксиса ``SQL``;
* Подсказки ключевых слов и имен объектов базы данных;
* Выполнение нескольких запросов;
* Выполнение и отображение нескольких запросов с множеством результатов (``Result Set``);
* Вывод содержит информацию о том, как изменились значения табличных счетчиков во время выполнения запроса;
* Поддержка параметризованных запросов;
* Полная поддержка печати;
* Управление транзакциями;
* Функции текстового редактора стиля ``IDE`` - поиск, замена, вставка и т.д.;
* Экспорт результатов;
* Поддержка нескольких открытых соединений;
* Поисковая исполняемая история ``SQL-запросов``;
* Быстрый переход из редактора к просмотру объекта базы нажатием ``CTRL + Левая клавиша мыши`` по имени объекта;
* Выбор уровня изоляции транзакции.

.. figure:: img/sql_editor.png

    Редактор запросов

Редактирование результирующего набора
---------------------------------------

Для SQL запросов, в которых участвует ровно одна таблица и вывод содержит первичный ключ, 
можно редактировать данные в результирующем наборе. 
При нажатии на кнопку "Подтвердить" изменения данных применятся к таблице.

.. figure:: img/edit_result_set.png

    Редактирование результирующего набора

Параметризованные запросы
-------------------------------

В некоторых случаях нужно создать запрос, который можно использовать многократно, но каждый раз с разными входными значениями. 
Например, можно написать несколько запросов, чтобы найти данные о сотруднике с определенной фамилией. А можно написать один запрос, меняя только фамилию сотрудника.

Чтобы создать запрос, который в разное время может иметь разные входные данные, используются параметры запроса. 
Параметры могут быть именованными и неименованными. 
Неименованный параметр - это вопросительный знак (``?``), который можно указать в любом месте запроса, вместо литерального значения. Например:

.. code-block::

    SELECT * FROM employee WHERE (last_name = ?)  

После запуска такого запроса откроется диалоговое окно для ввода значения параметра (фамилии сотрудника):

.. figure:: img/unnamed_parameter.png

    Неименованный параметр 

Именованные параметры - это комбинация двоеточия и имени параметра (``:<paramname>``), которую также можно подставлять вместо литерального значения. 
Именованные параметры особенно полезны, если в запросе их несколько. Например:

.. code-block::

    SELECT * FROM employee WHERE (last_name = :surname AND first_name =:name)  

После запуска такого запроса откроется диалоговое окно для ввода значений параметров (фамилии и имени сотрудника):

.. figure:: img/named_parameter.png

    Именованные параметры

История запросов
------------------

После успешного выполнения запрос сохраняется в кэше журнала редактора. 
Количество хранящихся в истории запросов указывается в настройках редактора. 
Сохраненные запросы не теряются после перезапуска приложения или редактора запросов.

Управление транзакциями
-------------------------

Для управления транзакциями на панели инструментов находится кнопка ``Включить автокоммит``.
Она включает режим автоматической фиксации, в котором транзакции ``DDL`` и ``DML`` фиксируются после завершения.

В редакторе запросов есть возможность включить режим ``autoddl``, 
который включает автоматическое подтверждение ``DDL-операций`` после их выполнения. 
``DML-операции`` при этом будут фиксироваться, если выполняются в той же транзакции перед ``DML``.
Режим ``autoddl`` включается выполнением следующей команды в редакторе запросов:

.. code-block:: 

    set autoddl on;




 