VEU.WathBody/3-app/1-lib/Kit.Helpers/.zcode/plans/plan-sess_8b27371c-8307-487...

3.1 KiB
Raw Permalink Blame History

Вынос inline SQL из SqlHelperSQLite в EmbeddedResource .sql

Убираем единственный inline-SQL в SQLite-пути — lookup тела хранимой функции в GetStoredFunctionContent (SqlHelperSQLite.cs:305). Публичный API не меняется, Postgres не трогаем (по договорённости).

Изменения

1. Новый файл SqlHelperAbstract\Sql\sys_function_select.sql Текст запроса один в один как сейчас (одна строка, :param-синтаксис, без точки с запятой):

select func_name, func_params, func_text from sys_functions where func_name = :func_name

2. Kit.Helpers.csproj — подключить как EmbeddedResource

<ItemGroup>
  <!-- SQL-тексты библиотеки (SQLite): lookup хранимой функции в sys_functions. -->
  <EmbeddedResource Include="SqlHelperAbstract\Sql\*.sql" />
</ItemGroup>

3. Новый загрузчик SqlHelperAbstract\SqlTexts.cs (namespace Kit.Helpers.SqlHelperAbstract)

  • Внутренний статический класс с единственным свойством SelectStoredFunction.
  • Читает ресурс из typeof(SqlTexts).Assembly (поиск имени ресурса по суффиксу sys_function_select.sql — устойчиво к смене root namespace), кэширует в ConcurrentDictionary, текст Trim()-ится.

4. Правка SqlHelperSQLite.cs:305

command.CommandText = SqlTexts.SelectStoredFunction;

Всё остальное в GetStoredFunctionContent без изменений: привязка :func_name через AddWithValue, проверки имени, восстановление CommandText/CommandType остаются как есть.

5. Синхронизация контракта с DDL (мелочь) В 2-db\kb_sl3\sys\tables\sys_functions.sql и 2-db\org_sl3\sys\tables\sys_functions.sql есть примечание «Имя и колонки зашиты в Kit.Helpers SqlHelperSQLite — не переименовывать». Обновить формулировку: источник текста — SqlHelperAbstract\Sql\sys_function_select.sql в Kit.Helpers.

Проверка

  • dotnet build на Kit.Helpers — без ошибок/предупреждений по изменённым файлам.
  • Убедиться, что ресурс реально в сборке (GetManifestResourceNames содержит ...sys_function_select.sql) — покрывается загрузчиком: при отсутствии ресурса Single() бросит понятное исключение.
  • Существующие тесты (SqlHelperAbstract\Test) — фейк-транспорт без БД, их поведение не меняется; прогнать dotnet test, если есть test-проект в решении.