company_banner

DataGrip 2018.3: поддержка Cassandra, генерация SQL-файлов из объектов, много улучшений в автодополнении и многое другое

    Привет! Это рассказ о том, что нового в нашем плагине для баз данных. Мы выпускаем его, как отдельный продукт DataGrip, и поставляем почти во все другие наши IDE. Будет много картинок и гифок. Для тех, кому лень их смотреть:

    • Поддержка Cassandra
    • Создание SQL-файлов из объектов схемы
    • Новые инспекции
    • Много новых штук в автодополнении
    • Работа с источником данных через одно подключение
    • Новый поиск
    • Высококонтрастная цветовая схема

    Спасибо тем, кто пробует EAP-версии и сообщает в наш трекер о проблемах: это помогает не дотащить их до релиза :) Активные пользователи уже получили бесплатные подписки на год.

    image

    Поддержка Cassandra


    Потихоньку осваиваем NoSQL-базы. Пока только те, что используют SQL-подобные языки для запросов. Мы поддержали Clickhouse в 2018.2.2, а в этом релизе добавили Cassandra.



    Автодополнение


    В этой подсистеме много нового.

    Добавили возможность вставлять псевдонимы автоматически после имён таблиц. Если предложенный нами псевдоним вас не устраивает, укажите — какие псевдонимы использовать для конкретных имён.



    В итоге, работает так:



    При использовании GROUP BY DataGrip предложит список неагрегированных столбцов.



    В предложении SELECT предлагается список всех столбцов.



    Автодополнение работает для именованных параметров.



    Ещё добавили информацию о контексте для одинаковых имён.



    Наконец-то сделали postfix completion: это когда через точку пишут что-то, относящееся к объекту.



    Например, если после SELECT написать имяТаблицы.afrom — раскроется в список столбцов и предложение FROM. Или, на наш взгляд самое удобное, можно дописать .cast к колонке или переменной.

    Лучше один раз увидеть:



    Автодополнение стало лучше для оконных функций: автоматически добавляется OVER() и каретка ставится в нужное место.



    Рефакторинг


    Важная штука, которую давно пора было сделать: использование псевдонима вместо таблицы. Нажмите на таблице Alt+Enter → Introduce alias. Использования таблицы будут заменены на псевдонимы.



    После предыдущего релиза мы получили подробный фидбек от speshuric. Например, он нашёл много неочевидных сценариев для Extract subquery as a CTE. Этот рефакторинг вызывается через меню Refactor → Extract → Subquery as CTE, но мы советуем привыкать к Find Action (Ctrl+Shift+A).



    Что мы сделали:

    – Новое имя для CTE не конфликтует с существующими: DBE-6496
    – Правильно определяем контекст, если запрос обёрнут в другое выражение: DBE-6503, DBE-6517
    – Не предлагаем рефакторинг в случае AS TableName: DBE-6490
    – Поддержали для MySQL 8.
    – Работает как надо с глубокими подзапросами. DBE-7332, DBE-7333

    Генерация кода


    Шаблоны кода можно привязывать к диалектам — шаблон может работать для одних баз, и не работать для других.



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

    Например, хотим создать шаблон для вытаскивания первых n строк из таблицы. В postgreSQL и SQL Server для этого используется разный синтаксис, а мы будем всегда использовать шаблон seln. Соответственно, реализуйте два шаблона в двух разных группах и присвойте им соответствующие диалекты.



    Получается так:



    Из предложения SELECT теперь можно сгенерировать создание таблицы с такой же сигнатурой. Для этого нажмите Alt+Enter → Create table definition



    И маленький фикс для шаблона INS подсказки для имён столбцов показываются автоматически.



    Анализ кода


    Добавили инспекции о небезопасных DELETE и UPDATE — предупредим, что вы потеряете данные.





    А если запустите, уточним :)



    Ещё одна инспекция найдёт неиспользуемые столбцы из подзапроса.



    А другая — неиспользуемый код.



    Объекты базы данных


    SQL Generator (Ctrl/Cmd+Alt+G) научился писать результаты в файл: для этого нажмите кнопку Save.

    По умолчанию доступны два способа организации файлов, но если вам нужны какие-то ещё, пишите в комментариях.



    Или уже сейчас, если нажать на карандашик справа, можете редактировать соответствующие скрипты на groovy. Или создавать свои.



    Поддержали расширения в PostgreSQL.



    Показываем статистику в информационном окне для источника данных (Ctrl+Q для Windows/Linux, F1 для OSX), в том числе количество различных объектов.



    А при генерации кода для удаления объекта добавили опцию Use drop cascade syntax.



    Соединение


    До нынешней версии каждая новая консоль означала новое соединение. Другие вещи, которым не требовалась консоль, тоже создавали отдельные подключения: запуск скриптов, импорт, графический интерфейс создания таблиц. В 2018.3, если включить Single connection mode в свойствах источника данных, вся работа с ним будет происходить через одно подключение.

    В результате временные объекты появятся в дереве, а ещё консоли и редакторы данных будут работать внутри одной транзакции. Это — первый шаг к полному управлению подключениями, которым мы собираемся заняться.



    А ещё сделали так, что IDE сама подсоединяется заново после простоя.

    Поиск и навигация


    Платформа IntelliJ представила новый поиск: он соединил в себе разные типы поиска, которые были разрознены: Search Everywhere, Find Action, Go to table/view/procedure/, Go to File и Go to Symbol. В DataGrip вторая вкладка называется Tables, а в других IDE — Classes. Но делает она одно и то же: ищет и объекты базы данных, и классы. Клавиша Tab переключает вкладки.

    Алгоритмы поиска мы серьёзно не меняли: если вдруг у вас раньше что-то искалось хорошо, а сейчас ищется плохо, пожалуйста пишите.



    Несколько строк сразу теперь можно найти в «поиске везде» (Find in path). Для SQL особенно полезно — запрос найдётся внутри исходников объектов.



    TODO-комментарии теперь могут быть многострочными. Чтобы в такой комментарий подцепились следующие строки, отделите их пробелом от символа комментария. Оформленные так задачи попадают в TODO Tool Window.

    На картинке понятней:



    Интерфейс


    Новая цветовая схема — очень контрастная.



    Переключать схемы так: Нажмите Ctrl+` и выберите Look and Feel.

    Появилось меню для выбора цвета источника данных в окне его свойств.



    И немного дружелюбности добавили в поле выбора строк на страницу. Раньше, чтобы результат показывал все строки, нужно было сюда написать -1 :)

    Теперь есть флажок.



    Всё!

    Более подробно тут
    Скачать триал на месяц
    Твитер, который мы читаем
    Почта, которую мы читаем
    Баг-трекер

    Команда DataGrip
    JetBrains
    181,00
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией

    Похожие публикации

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

      +1

      Пожалуйста, поддержите фильтрацию схем в настройке Object filter источника данных, или учитывайте pg_toast_*/pg_temp_* при выборе All. excl. system schemas в постгресе.


      Утомляет постоянно их вручную скрывать, когда это нужно делать на нескольких серверах, где может быть много таких таблиц.

        +1
        На это есть тикет: youtrack.jetbrains.com/issue/DBE-5781
        Нынешний фильтр, который работает для таблиц и других объектов того же уровня, фильтрует только отображение, а не инстроспекцию. То есть мы все равно считываем инфомрацию о «ненужных» объектах, показываем их в автодополнении, но не показываем в дереве.

        Вероятно, стоит подумать о том, чтобы фильтры влияли на интроспекцию тоже.
          0

          Да хоть бы на отображение, пускай считываются. Неудобство создаёт то, что эти схемы в дереве занимают места больше, чем пользовательские таблицы.

            0
            А вы раскрываете ноды с этими схемами?)
              0

              Нет, они же пустые, но когда на 500 схем приходится 400 на тосты, это немного затрудняет навигацию по списку между схемами, которые находятся до буквы p и теми, которые после неё.

                +1
                На всякий случай напомню, что если начать печатать, находясь в дереве будет работать навигация по искомой строке.
                Но фильтр, конечно, надо сделать :)
        0

        Спасибо за ваш продукт, очень приятно пользоваться!

          0
          Спасибо!
          0
          Скачал, решил переименовать пакет, а он запорол тело пакета. Хорошая программа :)
            0
            Точка с запятой пропала? Можете рассказать подробнее?
              0
              Oracle PL/SQL package.
              В теле были 3 процедуры, весь текст в ANSI кодировке. При переименовании выдало текст об ошибке и весь код пакета стал выглядеть так:

              CREATE OR REPLACE PACKAGE pkg_common_payments IS
              / -- вот этого символа не было
                0
                Сори, пакет не был ANSI, он содержал Unicode символы азерб. алфавита.
                  0
                  А кодировка самой базы какая?
                    0
                    AL32UTF8
                      0
                      Пришлите пожалуйста скриншот connection window (лучше всех табов), попытаемся воспроизвести. Если у вас OCI, то ещё надо значение переменной окружения NLS_LANG. И версию сервера и драйвера.

                      Можно на maxim.sobolevskiy@jetbrains.com
            0
            Активные пользователи уже получили бесплатные подписки на год.

            А я вот купил подписку и целый год не могу пользоватья продуктом потому что после покупки выяснилось, что с одной стороны нет возможности вводить пароль к БД в момент подключения DBE-5125, а с другой стороны нет возможности сохранить этот пароль в настройках, чтобы не вводить его в момент подключения IDEA-163275. Тадам. Дедлок. Продукт можно выкидывать на помойку.

            Причем очень забавно как вы в трекере баг в проекте DG с невозможностью подключиться (DBE-5125) закрыли как дубликат фичареквеста на поддержку KWallet (IDEA-163275) в совсем другом проекте — IDEA. Что у них общего? В итоге с позиции DG — это вообще не ваш тикет, с позиции IDEA — это низкоприоритетный фичареквест, а на выходе — полная невозможность пользоваться DataGrip т.к. он тупо не подключается к БД. Костыль в виде юзания KeePass или gnome-keyring со всеми его зависимостями в KDE дистрибутиве — это всем костылям костыль.

            При второй попытке использовать DG в другом рабочем окружении, где вышеприведенная проблема себя не проявляла, я опять обломался из-за невозможности использования DG с PG при подключении через PGBouncer ответы вашего коллеги вида «а зачем вам это» доставили.

            Очень было обидно потерянных денег за такой сырой продукт с такими детскими болезнями.

            Остальными вашими продуктами пользуюсь давно и доволен, в них такой сырости не замечал.
              0
              Спасибо за фидбек! Нам нужно время, чтобы разобраться в ситуации. Если мы не решим проблему с шоустоппером для вас, мы вернем деньги.
                0
                Про несохранение пароля.
                1. Мы разлинковали тикеты, это действительно разные вещи.
                2. Для тех, кто подсоединяется к базе с пустым паролем, сделаем более удобное решение. Проблема в том, что мы не можем правильно считать сообщение о неверном пароле в неанглийской локали.
                3. В вашем случае, если вы хотите хранить пароль, действительно самым удобным и быстрым методом может быть использование KeePass. Он поддерживается в IDE, надо проставить соотвествующую опцию в настройках.
                image
                Если вы не хотите использовать KeePass, я всет-таки прошу вас расказать почему :) Не то, чтобы мы пытались вас переубедить, но нам на самом деле важно знать, почему это решение не подходит всем.

                Про pg_bouncer.
                Если выставить prepareThreshold=0 во вкладке 'Advanced', должно заработать. В идеале мы должны обрабатывать эту ситуацию, и я создал тикет youtrack.jetbrains.com/issue/DBE-7466
                  0
                  1. Это хорошо. Спасибо.
                  2. Вот только что попробовал в 2018.3 В настройках только логин, пароль пустой, галка сохранения пароля снята. Подключаюсь, а он вместо того, чтобы сразу предложить мне ввести пароль, пытается присоединиться с пустым паролем. Это было бы логично, если бы у меня стоял чекбокс сохранения пароля с пустым паролем, но при снятом чекбоксе, понятно же, что юзер — параноик и не сохраняет свои пароли в DG. И вот из-за этой попытки коннекта с пустым паролем, ошибку в которой вы не можете отловить в не en локали, становится невозможно подключиться.
                  При этом в 2017.3 (и еще какой-то более свежей версии, не помню какой) оно у меня и с en локалью не работало (KDE Plasma 16.04) — окна с предложением ввести другой пароль не появлялось, а в 2018.3 (KDE Plasma 18.04) сейчас окошко с ошибкой коннекта выскочило и предложило ввести новый пароль, что в моем случае меня спасает, но вот юзера параноики с не en локалью, получается, все так же не смогут подключиться к серверу. Что на первый взгляд легко решается — достаточно не пытаться коннектиться с пустым паролем, если в настройках отключено сохранение пароля, а сразу предлагать ввести пароль.
                  3. В моем случае я вообще стараюсь не сохранять пароли к прод серверам. Поэтому keepass для меня не был решением. В итоге я для прод серверов остался на старом конкурентном продукте, а на другой машине у меня стоял gnome-keyring и я заюзал его. И стал отслеживать сабжевые тикеты в трекере с надеждой на решение проблемы :)
                  Но теперь, как я уже заметил в пункте 2, текущая версия DG с en локальсю стала нормально отлавливать ошибку коннекта с пустым паролем и поэтому я смогу с прод серверами начать перелазить на DG. Ура!
                  Еще один момент касательно keepass: без гугления я что раньше, что сейчас не до конца понял сути этой настройки. Пункт «In native keychain» понятен — пароли хранятся в некоем системном сервисе. Но вот пункт «in keepass» с указанием пути к файлу мне непонятен. Keepass, насколько мне известно, — это одноименная софтинка. Причем без версии под Linux. Есть несколько портов вроде keepassx, keepassxc. Что означает этот пункт, что у keepass есть какой-то интерфейс, который будет использовать DG? Т.е. keepass необходимо предварительно поставить и настроить? Но тогда какой именно из портов под линукс? И зачем тогда путь к файлу? Если это вы сами работаете с «кипасовским» kdbx форматом, тогда понятно почему путь к файлу, но тогда название настройки непрезентативно. Плюс непонятно, что будет если я укажу путь к своему kdbx файлу, с которым работает мой keepassxc и где все мои пароли? Он все потрет или добавит свою группу или что?

                  Про pg_bouncer не успел нормально оттестить, помню, что раньше игра с prepareThreshold с установкой его в -1 не помогала (совет где-то на просторах инета нашел). В ближайшие дни попробую в свежей версии DG и установкой в 0, и отпишусь об успехах.
                0
                Промазал уровнем, сорри.

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

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