Привет! Как водится, три раза в году мы рассказываем о том, над чем работали. Это статья о том, что нового в DataGrip 2019.3, а значит и во всех IDE от JetBrains с поддержкой баз данных.

Это будет наша первая публикация на Хабре, в комментариях к которой не спросят: «А когда планируется поддержка Монги?»
Встречайте! Что работает в этой версии:
Интроспекция: В проводнике базы данных отображаются коллекции и поля. Мы анализируем первые 10 документов из каждой коллекции, чтобы иметь представление о ее полях.
Если вы хотите увеличить это число, укажите его в JDBC-параметре fetch_documents_for_metainfo на вкладке Advanced в свойствах источника данных.

Просмотр данных: Просматривайте коллекции в табличном виде по страницам. Можно сортировать по значениям и использовать фильтр.

Древовидный просмотр: Специально для MongoDB мы сделали древовидный просмотр данных. Чтобы его включить, нажмите на шестеренку, затем View as… | Tree. Еще такой просмотр работает для массивов PostgreSQL, и мы планируем сделать так, чтобы в виде дерева можно было смотреть JSON- и XML-поля.

Консоль запросов: Сейчас нет поддержки при написании кода, но запросы работают. Для того чтобы запустить запрос, поставьте на него каретку и нажмите Ctrl/Cmd+Enter или кнопку Run на панели инструментов.
Если вы работаете в IDE с поддержкой JavaScript, запросы будут подсвечены. Подсветку в DataGrip добавим позже.

Первая версия давно ожидаемого отладчика для Oracle. Сейчас он работает с процедурами, функциями, пакетами, триггерами и анонимными блоками.
Не забудьте, что объект должен быть скомпилирован для отладки. Чтобы это сделать, используйте контекстное меню: Database tools | Recompile.

Отметьте чекбокс With “debug”. Если процедура уже скомпилирована для отладки, на ее иконке есть зеленый жучок.

Чтобы запустить отладчик в консоли, нажмите кнопку Debug на панели инструментов.

Подробности об отладчике — у нас в документации (на английском). Мнения, комментарии, пожелания пишите, пожалуйста, сюда.
Две процедуры можно сравнить, выделив их и нажав Ctrl/Cmd+D. Раньше сравнивались только сигнатуры, теперь — и исходники.

Когда вы обновляете исходный код объекта, DataGrip предупреждает, если за это время код изменился в базе. Теперь для решения конфликтов вам предложат слияние при помощи трех панелей: слева вы увидите вашу версию, справа — то, что пришло из базы, а в середине — результат их слияния.

Чтобы быть уверенным, что вы не перепишете чужой код, проверьте, что настройка Warn if editing outdated DDL включена в свойствах источника данных.
В исходном коде объектов теперь работает помощь при написании кода. Например, можно раскрыть звездочку.

Если настройка pretty-printed отключена, PostgreSQL отдает исходники с большим количеством избыточных скобок:

Мы решили включить ее по умолчанию. В нашем примере скобок не осталось :)

Но обратим внимание на то, что PostgreSQL пишет в своей документации:
Пользователи жаловались, что не всегда понятно — запрос все еще выполняется или уже завершен. Мы добавили крутящуюся иконку на панель слева и таймер в текстовый редактор.

Это новый тип визуализации данных от планировщика. Чтобы открыть флейм-чарт (или флейм-граф, кому как нравится), нажмите кнопку слева:

Выглядит так:

Инспекции
DataGrip предупредит, если вы:
… используете оператор COALESCE без надобности: например, если первый аргумент никогда не бывает NULL. Вам предложат удалить ненужный код.

… вставляете NULL в столбец, для которого это запрещено.

… не перечислили все столбцы в предложении INSERT.

… используете оператор «равно» для сравнения с NULL. Это сравнение ложно, потому что NULL это «неизвестно». Так как два значения, которые «неизвестны», сравнить нельзя, надо использовать специальный оператор IS NULL.

… используете предложение ORDER BY в подзапросе. Эта инспекция работает только в SQL Server.

… используете одновременно TOP и OFFSET. Это тоже инспекция для SQL Server.

Конвертация конструкций
Сравнение с AND можно конвертировать в BETWEEN, и наоборот.

JOIN ON можно конвертировать в JOIN USING, и наоборот.

Текстовый редактор
Новое действие: сортировка строк по алфавиту. Может быть полезно при работе в CSV-файлами или поиске дубликатов в списке значений. Напоминаем, что вызывать любое действие можно по Ctrl/Cmd+Shift+A.

Сделали поиск по выделенному фрагменту кода. Сначала выделите область для поиска, потом нажмите Ctrl/Cmd+F. Если хотите искать по всему файлу выделенный фрагмент, нажмите сочетание клавиш еще раз.

Фильтрация объектов
Если используете фильтр объектов для проводника, например такой:

…то объекты, которые скрыты из проводника, будут считаться неизвестными для редактора кода. То есть мы предполагаем, что, если вы скрыли объекты из проводника, то и работать из SQL вы с ними не хотите.

Генерация кода
В меню Generate, которое вызывается по Alt+Ins/Cmd+N, много новых объектов: материализованные представления, коллации, перечисления и не только.

Теперь, если в результате есть столбцы с одинаковыми именами, мы показываем, из какой таблицы они взяты. Это удобно еще и потому, что эти имена используются при экспорте: например, если вы создаете новую таблицу из результата, у вас не будет конфликта имен.

Действие Modify Table работает из редактора данных. Например, если вы работаете с данными таблицы и решили добавить в нее столбец, теперь это сделать проще: нажмите Ctrl/Cmd+F6 и редактируйте таблицу.

Текст ошибки соединения можно погуглить, нажав на кнопку:

На этом всё!
— Скачать триал на месяц
— Твитер, который мы читаем
— Почта, которую мы читаем: datagrip@jetbrains.com
Как всегда, ждем комментариев о том, что понравилось, и о самых важных для вас тикетах в Ютреке :)
Команда DataGrip

Поддержка MongoDB
Это будет наша первая публикация на Хабре, в комментариях к которой не спросят: «А когда планируется поддержка Монги?»
Встречайте! Что работает в этой версии:
Интроспекция: В проводнике базы данных отображаются коллекции и поля. Мы анализируем первые 10 документов из каждой коллекции, чтобы иметь представление о ее полях.
Если вы хотите увеличить это число, укажите его в JDBC-параметре fetch_documents_for_metainfo на вкладке Advanced в свойствах источника данных.

Просмотр данных: Просматривайте коллекции в табличном виде по страницам. Можно сортировать по значениям и использовать фильтр.

Древовидный просмотр: Специально для MongoDB мы сделали древовидный просмотр данных. Чтобы его включить, нажмите на шестеренку, затем View as… | Tree. Еще такой просмотр работает для массивов PostgreSQL, и мы планируем сделать так, чтобы в виде дерева можно было смотреть JSON- и XML-поля.

Консоль запросов: Сейчас нет поддержки при написании кода, но запросы работают. Для того чтобы запустить запрос, поставьте на него каретку и нажмите Ctrl/Cmd+Enter или кнопку Run на панели инструментов.
Если вы работаете в IDE с поддержкой JavaScript, запросы будут подсвечены. Подсветку в DataGrip добавим позже.

Отладчик PL/SQL для Oracle
Первая версия давно ожидаемого отладчика для Oracle. Сейчас он работает с процедурами, функциями, пакетами, триггерами и анонимными блоками.
Не забудьте, что объект должен быть скомпилирован для отладки. Чтобы это сделать, используйте контекстное меню: Database tools | Recompile.

Отметьте чекбокс With “debug”. Если процедура уже скомпилирована для отладки, на ее иконке есть зеленый жучок.

Чтобы запустить отладчик в консоли, нажмите кнопку Debug на панели инструментов.

Подробности об отладчике — у нас в документации (на английском). Мнения, комментарии, пожелания пишите, пожалуйста, сюда.
Работа с исходниками
Сравнение кода процедур
Две процедуры можно сравнить, выделив их и нажав Ctrl/Cmd+D. Раньше сравнивались только сигнатуры, теперь — и исходники.

Трехпанельное слияние
Когда вы обновляете исходный код объекта, DataGrip предупреждает, если за это время код изменился в базе. Теперь для решения конфликтов вам предложат слияние при помощи трех панелей: слева вы увидите вашу версию, справа — то, что пришло из базы, а в середине — результат их слияния.

Чтобы быть уверенным, что вы не перепишете чужой код, проверьте, что настройка Warn if editing outdated DDL включена в свойствах источника данных.
Помощь в написании кода
В исходном коде объектов теперь работает помощь при написании кода. Например, можно раскрыть звездочку.

Красивые исходники в PostgreSQL
Если настройка pretty-printed отключена, PostgreSQL отдает исходники с большим количеством избыточных скобок:

Мы решили включить ее по умолчанию. В нашем примере скобок не осталось :)

Но обратим внимание на то, что PostgreSQL пишет в своей документации:
Код в формате pretty-printed лучше читается, но формат по умолчанию, скорее всего, будет лучше понят будущими версиями PostgreSQL. Поэтому мы советуем не использовать pretty-printed код для дампов.
The pretty-printed format is more readable, but the default format is more likely to be interpreted the same way by future versions of PostgreSQL; avoid using pretty-printed output for dump purposes.
Запуск запросов
Прогресс выполнения в редакторе
Пользователи жаловались, что не всегда понятно — запрос все еще выполняется или уже завершен. Мы добавили крутящуюся иконку на панель слева и таймер в текстовый редактор.

Флейм-чарт для планировщика
Это новый тип визуализации данных от планировщика. Чтобы открыть флейм-чарт (или флейм-граф, кому как нравится), нажмите кнопку слева:

Выглядит так:

Помощь в написании кода
Инспекции
DataGrip предупредит, если вы:
… используете оператор COALESCE без надобности: например, если первый аргумент никогда не бывает NULL. Вам предложат удалить ненужный код.

… вставляете NULL в столбец, для которого это запрещено.

… не перечислили все столбцы в предложении INSERT.

… используете оператор «равно» для сравнения с NULL. Это сравнение ложно, потому что NULL это «неизвестно». Так как два значения, которые «неизвестны», сравнить нельзя, надо использовать специальный оператор IS NULL.

… используете предложение ORDER BY в подзапросе. Эта инспекция работает только в SQL Server.

… используете одновременно TOP и OFFSET. Это тоже инспекция для SQL Server.

Конвертация конструкций
Сравнение с AND можно конвертировать в BETWEEN, и наоборот.

JOIN ON можно конвертировать в JOIN USING, и наоборот.

Текстовый редактор
Новое действие: сортировка строк по алфавиту. Может быть полезно при работе в CSV-файлами или поиске дубликатов в списке значений. Напоминаем, что вызывать любое действие можно по Ctrl/Cmd+Shift+A.

Сделали поиск по выделенному фрагменту кода. Сначала выделите область для поиска, потом нажмите Ctrl/Cmd+F. Если хотите искать по всему файлу выделенный фрагмент, нажмите сочетание клавиш еще раз.

Фильтрация объектов
Если используете фильтр объектов для проводника, например такой:

…то объекты, которые скрыты из проводника, будут считаться неизвестными для редактора кода. То есть мы предполагаем, что, если вы скрыли объекты из проводника, то и работать из SQL вы с ними не хотите.

Генерация кода
В меню Generate, которое вызывается по Alt+Ins/Cmd+N, много новых объектов: материализованные представления, коллации, перечисления и не только.

Редактор данных
Теперь, если в результате есть столбцы с одинаковыми именами, мы показываем, из какой таблицы они взяты. Это удобно еще и потому, что эти имена используются при экспорте: например, если вы создаете новую таблицу из результата, у вас не будет конфликта имен.

Действие Modify Table работает из редактора данных. Например, если вы работаете с данными таблицы и решили добавить в нее столбец, теперь это сделать проще: нажмите Ctrl/Cmd+F6 и редактируйте таблицу.

И еще одна маленькая фича
Текст ошибки соединения можно погуглить, нажав на кнопку:

На этом всё!
— Скачать триал на месяц
— Твитер, который мы читаем
— Почта, которую мы читаем: datagrip@jetbrains.com
Как всегда, ждем комментариев о том, что понравилось, и о самых важных для вас тикетах в Ютреке :)
Команда DataGrip