Что такое совместное редактирование SQL?

Совместное редактирование SQL позволяет нескольким людям одновременно писать и проверять запросы в браузерах. Это удобно, чтобы вместе с коллегой составить запрос, проверить миграцию или обучать SQL — без демонстрации экрана и отправки запросов в чате.

Чтобы у всех была одна и та же версия документа, изменения передаются небольшими фрагментами, а не целым текстом, и сервер определяет порядок их применения. Изменения, сделанные одновременно, согласуются друг с другом, поэтому сохраняются оба.

Описание инструмента

Этот инструмент — общий редактор SQL с подсветкой синтаксиса. Откройте его и отправьте ссылку: все участники комнаты редактируют одни и те же запросы в реальном времени, видят курсоры друг друга, а также могут одним нажатием проверить, отформатировать или сократить SQL для всех.

Проверка выполняет разбор SQL с помощью node-sql-parser. При форматировании каждый основной раздел запроса (SELECT, FROM, WHERE, JOIN и так далее) размещается на отдельной строке, при этом строки и комментарии не затрагиваются. Сокращение помещает запрос в одну строку. Новый текст заменяет только изменившиеся строки, поэтому введённый за это время текст других участников остаётся на месте.

Возможности

  • Редактирование в реальном времени — изменения всех участников появляются мгновенно и объединяются, если люди печатают одновременно
  • Курсоры и выделения — видно, где находится каждый участник; цвет курсора указан рядом с его именем
  • Проверка — проверяет, разбирается ли SQL, и показывает сообщение анализатора, если это не так
  • Форматирование и сокращение — упорядочьте запрос по разделам или поместите его в одну строку; изменения отобразятся у всех участников комнаты
  • Копирование и скачивание — сохраните копию запросов в виде файла .sql

Как это работает

Когда страница открывается, на сервере синхронизации создаётся комната, а её ссылка помещается в адресную строку. Все, кто откроет ссылку, присоединятся к одной комнате и увидят один и тот же документ.

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

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

Ограничения

  • В комнате могут находиться не более 20 человек, а документ может содержать не более 100 000 символов.
  • После закрытия комнаты данные не сохраняются. Скачайте текст, прежде чем выйдет последний участник.
  • Слишком быстрые или масштабные изменения, например многократная вставка всего документа подряд, отклоняются, и редактор перезагружает текст комнаты.
  • Если открыть ссылку на комнату в другом редакторе для совместной работы (например, комнату SQL в редакторе JavaScript), появится сообщение «Комната не найдена»: каждая комната предназначена для одного языка.
  • Проверка анализирует только синтаксис. Запросы никогда не выполняются в базе данных.