3.1 KiB
Вынос 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-проект в решении.