Перейти к содержанию

BSL191 — Использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах

Кратко

Использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах

Идентификаторы

Поле Значение
Код правила BSL191
Совместимый псевдоним FullOuterJoinQuery
Серьёзность WARNING
Включено по умолчанию Да
Реализовано Да
Теги query, design

Поведение

  • Публичный идентификатор BSL191 и псевдоним FullOuterJoinQuery стабильны.
  • Правило сообщает о случаях, описанных на этой странице.
  • Подавления и проектная конфигурация применяются до публикации результата.
  • Для выполнения правила не требуется внешний анализатор или сетевой доступ.

Настройка и подавление

Код BSL### — основной стабильный идентификатор. Совместимый псевдоним принимается в select, ignore и совместимых блоковых комментариях.

[tool.onec-hbk-bsl]
select = ["BSL191"]
ignore = ["FullOuterJoinQuery"]

Все три семейства подавлений работают для текущей строки и диапазона. Если открывающий комментарий стоит после кода, он действует только на эту строку. Используйте любой один вариант:

  • noqa:
Значение = "пример";  // noqa: BSL191
  • bsl-disable (совместимый вариант):
Значение = "пример";  // bsl-disable: BSL191
  • совместимый BSLLS-вариант:
Значение = "пример";  // BSLLS:FullOuterJoinQuery-off

Если тот же открывающий комментарий стоит на отдельной строке, он начинает диапазон. Закройте его парным маркером того же семейства:

// noqa: BSL191
// код без этой диагностики
// noqa-enable: BSL191

// bsl-disable: BSL191
// код без этой диагностики
// bsl-enable: BSL191

// BSLLS:FullOuterJoinQuery-off
// код без этой диагностики
// BSLLS:FullOuterJoinQuery-on

Чтобы отключить правило до конца файла, не добавляйте закрывающий noqa-enable, bsl-enable или BSLLS:…-on.

Открывающий и закрывающий маркеры должны принадлежать одному семейству.

Описание диагностики

Следует избегать использования конструкции ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ в запросах, особенно когда в качестве СУБД используется PostgreSQL. В тех случаях, когда это возможно, необходимо переписать запрос без использования ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ.

Примеры

Запрос из примера ниже приведет к повышенной нагрузке при использовании PostgreSQL.

Процедура Тест1()

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Товары.Номенклатура КАК Номенклатура,
                   |    ЕСТЬNULL(ПланПродаж.Сумма, 0) КАК СуммаПлан,
                   |    ЕСТЬNULL(ФактическиеПродажи.Сумма, 0) КАК СуммаФакт
                   |ИЗ
                   |    Товары КАК Товары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ ПланПродаж КАК ПланПродаж
                   |            ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ ФактическиеПродажи КАК ФактическиеПродажи // Диагностика должна сработать здесь
                   |            ПО ПланПродаж.Номенклатура = ФактическиеПродажи.Номенклатура
                   |        ПО Товары.Номенклатура = ПланПродаж.Номенклатура";

КонецПроцедуры

Источники