company_banner

DataGrip 2019.3: MongoDB, дебаггер, модный прогресс-бар, много новых инспекций

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



    Поддержка 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
    JetBrains
    136,78
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией

    Комментарии 28

      +3

      Радует поддержка монги! Будем тестить, спасибо)

        +3

        Круто! Но всё-таки еще и redis из коробки хочется

          0
          FYI — есть же клёвый Redis Desktop Manager (aka RDM)
            0

            Ну есть и DBeaver и вообще Atom и VSCode. Вообще альтернатив не делать что-ли? Удобно когда всё в одном месте с привязкой к проекту


            В плане работы с базами в JetBrains удобные "консоли" с фиксацией и перевоспроизведением нужных запросов

              0
              Я лишь поделился своим выбором инструмента.
          +1
          Ого, куча вкусных изменений.
          Жалко, что когда я реально пишу запросы, никаких хоткеев не помню и приходится мышкой тыкаться в мелкие кнопки и надеяться что не перепутал их :D
            0
            Ого, Флейм-чарт для планировщика — очень круто! Только на этой недели обсуждали данную фичу в одной из статей Хабра, а вы уже сделали.
              +1
              Есть возможность выполнить из command-line то что делается из UI? особенно import/export функциональность.
                0
                Такой возможности нет. А расскажите, зачем это вам?
                  0
                  Иногда необходимо встроить генерацию скриптов/кода в процесс CI/CD. Если использовать тот же инструмент и форматы что и в UI версии, то это очень удобно. Для MS SQL server есть sqlpackage, но там не хватает возможности использования кастомных скриптов при экспорте.

                  У вас же фактически всё есть, только заменить вызов из UI, на вызов из утилиты в command line.

                  Плюс ещё бы хорошо возможность генерации скрипта для обновления схемы между двумя базами (на подобии того что есть в sqlpackage), но для баз отличных от MS SQL server.

                  т.е. есть у нас таблица в source db и такая же в destination db, но с некоторыми отличаями. Мы говорим, сделай скрипт после запуска которого схема таблицы в destination db будет идентична то что существует в source db. Удобно для деплоймента.
                    0

                    Генерация такого скрипта пригодилась бы очень многим. Если сделаете — будет просто здорово!

                0
                View as… | Tree. Еще такой просмотр работает для массивов PostgreSQL, и мы планируем сделать так, чтобы в виде дерева можно было смотреть JSON- и XML-поля.

                А когда планируете? Было бы очень здорово!

                  0
                  В 2020.1
                    +2
                    Древовидный просмотр можно сделать и для реляционных данных. Посмотрите пост про dbtree, мой pet-project.
                      0
                      Мы это тоже хотим сделать, но, скорее всего, немного позже
                  +2
                  Вам бы ещё поддержку оракловых SYS пакетов довести до ума (DBMS_… и вот это всё), чтобы работало без получасовой интроспекции системных схем и пляски с бубном при настройке областей видимости.
                    0
                    Должно работать без интроспекции, так как с 2019.2 у нас есть кэш внутренних объектов. Можете описать, что вы делаете?
                    +2
                    image
                      0
                      И да, пятое декабря только завтра :)
                        0

                        Огромное спасибо за дебаггер! *убежал пробовать*

                          0
                          Помнится, вы спрашивали, чем мне не понравился ваш браузер объектов. За прошедшее время я пообращал внимание на то, что мне не нравится, немного порефлексировал и, пользуясь случаем, хочу перечислить, что неудобно (так как я работаю с ораклом, многие вещи тут будут специфические для оракла).

                          1. Поиск по дереву объектов. Неочевидно, что он есть, потому что надо начать печатать, чтобы он появился, а для этого надо знать, что нужно начать печатать. И как следствие, тут же минус: в поле ввода нельзя вставить имя искомого объекта по Ctrl+V. Чтобы поле появилось, нужно начать печатать, то есть до Ctrl+V там уже что-то будет, а после — будет что-то не то. У вас там в панели с кнопками в Database view есть свободное место, вставьте туда статическое поле.
                          Второй минус: вы подсвечиваете найденные объекты, а я бы предпочел, чтобы все неподходящие объекты скрывались. Потому что у нас около тысячи объектов в схеме, а на экран входит штук 50 максимум, а дальше опять надо скроллить.
                          2. Очень хотелось бы кнопку перехода от объявления функции/процедуры в спецификации пакета к телу и обратно. Вот прямо очень. А уж если будет функция подсветки несовпадающих объявлений (когда в одном месте поменяли, а в другом — нет), то будет просто супер.
                          3. Катастрофически нужна кнопка перекомпиляции пакета (применимо к любому объекту с кодом, включая триггеры и вью). Пакет может сломаться потому, что он зависит от другого сломанного объекта. Когда тот другой объект становится валидным, иногда нужно вручную пнуть зависимый пакет, чтобы он перекомпилировался.
                          4. Кнопка reload обновляет данные всей схемы. Для больших схем это может занять много времени. Было бы неплохо, чтобы кнопка обновляла то, что в данный момент выбрано в дереве: если выбран какой-то пакет — то только этот пакет, если выбран весь узел packages — то все пакеты (но только пакеты), и т. д. Я видел кнопку reload, но для этого надо зайти в код пакета. Было бы удобно иметь такую функциональность и в дереве объектов.
                          5. По ctrl+click на названии функции в дереве подсвечивается эта функция. Хотелось бы, чтобы вместо этого открывался код пакета и курсор перемещался к функции.
                          6. Если какой-то объект является синонимом, то по ctrl+click подсвечивается определение синонима. Дальше пройти нельзя. Было бы неплохо иметь возможность сразу перейти к объекту. Пока цепочка очень длинная (и неочевидная): ctrl+click по названию — double click по определению синонима — ctrl+click по названию объекта в коде синонима.
                          7. Было бы неплохо видеть список столбцов, индексов и констрейнтов на таблице не только в виде DDL скрипта, но и в виде таблички.

                          Это так, навскидку, первое, что в голову пришло. Вспомню что-то еще, напишу сразу реквест у вас на сайте.

                          P. S. Как-то, работая в IDEA с гитом, увидел там список файлов, озаглавленный как «People who change the files in the active changelist also change». Я тут не понял, вы пытаетесь мне что-то продать? О_о
                          ;)
                            0
                            Круто, спасибо огромное! Прочитали внимательно, и, как видите, без спешки :)

                            1. Поиск по дереву объектов: если честно, нам не очень понятно, почему «главный поиск» по Ctrl+N (или Cmd+O) вас не устраивает. Это именно то место, где работает не только paste, но и аббревиатуры, и фильтрация.

                            2. У нас на гаттере (это такая панель слева) иконки для такого перехода. Этого недостаточно? Возможно стоить сделать действие, для которого уж назначайте любой шорткат.

                            3. Кнопки нет, но есть действие, называется Recompile, а значит можно назначить шорткат. Еще оно есть в контекстном меню.

                            4. Такого действительно пока нет. Знаем, что надо сделать — есть в планах.

                            5. Такое можно сделать на настройках: Database — general — navigation

                            6. Это надо сделать, думаю, что по сути это этот реквест: youtrack.jetbrains.com/issue/DBE-2529

                            7. Нажмите Ctrl/Cmd+F6 на таблице (хоть в дереве, хоть в скрипте). Это то, что вам нужно? Если нет, надо заводить реквест.
                              0
                              Спасибо за ответ.

                              1. Про это я забыл, видимо. В моей статье в комментариях столько советов надавали, что все и не запомнишь. Надо попробовать попользоваться.

                              2. Это только в DataGrip или в IDEA тоже должно быть? У меня IDEA, и у меня такого нет.

                              3. Нашел, но как-то это действие далеко запрятано. Оно довольно востребованное, я бы куда-то поближе вынес.

                              4. Ну это просто must have! Могу создать реквест, если это поможет ускорить реализацию планов. Тем более что я и так собирался со дня на день.

                              5. Надо попробовать, спасибо.

                              6. Да, очень похоже. Завтра залогинюсь и плюсану.

                              7. Да, оно!

                              Практика показывает, что в большинстве случаев все есть, нужно только спросить, где это находится. Это прям круто!
                                0
                                Ну я бы не сказал, что круто, когда надо спрашивать. Круто, это когда вы сами можете найти :) Хотя бывает сложно разместить много функциональности в понятных местах.

                                Поэтому я бы советовал всегда проверять, есть ли нужное вам действие вообще. Ctrl+Shift+A — это спаситель во многих таких ситуациях.

                                2. Вот эти штучки слева: habrastorage.org/webt/3g/ky/jh/3gkyjhjnmjbaszz-cmu0p3yez2g.png
                                Должно быть и в Идее, и в ДГ.

                                  0
                                  2. Вот эти штучки слева: habrastorage.org/webt/3g/ky/jh/3gkyjhjnmjbaszz-cmu0p3yez2g.png
                                  Должно быть и в Идее, и в ДГ.
                                  Попробовал еще раз. Если текст пакета находится в файле, который создан как Database Console — там это есть. Если это просто файл на диске или это код пакета, открытый из БД, — то нет.
                                    0
                                    Да, точно. Думаю, сделаем и в файлах.
                            0
                            Что насчет поддержки findOne?
                            db.collection_name.find(...).limit(1) — работает
                            db.collection_name.findOne(...) — нет

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое