feat(запросы): служебное слово языка запросов в псевдониме - #17
Open
Romandredan wants to merge 1 commit into
Open
feat(запросы): служебное слово языка запросов в псевдониме#17Romandredan wants to merge 1 commit into
Romandredan wants to merge 1 commit into
Conversation
Запрос с таким псевдонимом не выполняется вовсе, но собирается и проходит статический анализ: литерал остаётся литералом до первого выполнения. Ветка кода не работает ни разу с момента написания. В боевом контуре фискальных чеков так прожил запрос с псевдонимом «Первые» - его нашёл человек, выполнивший запрос руками, а не инструменты. Списки слов измерены на платформе 8.3.27, а не выведены из синтаксиса: каждое из 66 слов подставлялось псевдонимом в «ВЫБРАТЬ ПЕРВЫЕ 1 <Т>.Ссылка КАК <поле> ИЗ Справочник.Валюты КАК <Т>», и запрос выполнялся. Ломают 31 слово в обеих позициях; Ссылка и Представление - только в позиции источника. Остальные 33, включая Итоги, Объединить, Соединение, Сумма, Количество, Значение и Дата, псевдонимом работают: вывод из синтаксиса дал бы шум, и «ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК Итоги» из типового менеджера обмена стало бы ложной находкой. Калибровка: ноль находок на 12 630 модулях типовой УТ 11.5 и на 14 расширениях проекта, при этом известное падение ловится. Тесты: воспроизводящий случай, псевдоним поля, различитель позиции и три контр-фикстуры (безопасные слова, Ссылка и Представление в списке выборки, приведение типа). Проверены мутациями - слово вне списка, общий список у источника, список источника у поля: каждая поломка роняет набор. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что добавляет
Правило
qg:QRY-ALIAS-RESERVED-WORDвtools/query-lint.mjs: псевдоним, взятый служебным словом языка запросов (КАК Первые,ИЗ Х КАК Ссылка).Такой запрос не выполняется вовсе — платформа отвергает его при разборе целиком. При этом текст собирается, статический анализ молчит, сборка расширения проходит: литерал остаётся литералом до первого выполнения. Ветка кода с таким запросом не работает ни разу с момента написания, и находит это не инструмент, а человек, однажды выполнивший запрос руками. Именно так прожил запрос в боевом контуре фискальных чеков.
Списки измерены, а не выведены из синтаксиса
Каждое из 66 кандидатов подставлялось псевдонимом в
ВЫБРАТЬ ПЕРВЫЕ 1 <Т>.Ссылка КАК <поле> ИЗ Справочник.Валюты КАК <Т>на платформе 8.3.27, и запрос выполнялся:СсылкаиПредставление— только в позиции источника; в списке выборки (Заказы.Ссылка КАК Ссылка) они законны и встречаются повсеместно, поэтому правило различает позицию;Итоги,Объединить,Соединение,Сумма,Количество,Значение,Датаи другие. Список из синтаксиса дал бы шум:ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК Итогистоит в типовом менеджере обмена через универсальный формат и выполняется.Приведение типа псевдонимом не считается:
ВЫРАЗИТЬ(Х КАК Документ.Заказ)иКАК Число(15,2)инструмент пропускает.Калибровка
Ноль находок на 12 630 модулях типовой УТ 11.5 и на 14 расширениях проекта, при этом известное падение ловится.
Тесты
node tests/run-tests.mjs— 819 пройдено, 0 провалено;node tools/validate-package.mjs— 193 файла, 0 ошибок.Новых проверок 11: воспроизводящий случай, псевдоним поля, различитель позиции и три контр-фикстуры (безопасные слова,
Ссылка/Представлениев списке выборки, приведение типа).Тесты проверены мутациями, как требует CONTRIBUTING:
ПЕРВЫЕубрано из спискаОтдельно замечу: первая редакция тестов проверяла
out.includes('QRY-ALIAS-RESERVED-WORD')и была пустой — идентификатор печатается и в чистой записи следа. Заменено на вердикт и код возврата; мутации это и вскрыли.Регистрация признака
tools/evidence-scopes.mjs(scopequery-alias-reserved-word+ идентификатор),README.md,skills/bsl-code-review/SKILL.md,references/bsl-query-reference.md(разбор с измеренными списками),references/checklist-code.md,agents/bsl-verifier.md.🤖 Generated with Claude Code