# Вынос inline SQL из SqlHelperSQLite в EmbeddedResource .sql Убираем единственный inline-SQL в SQLite-пути — lookup тела хранимой функции в `GetStoredFunctionContent` ([SqlHelperSQLite.cs:305](SqlHelperAbstract/SqlHelperSQLite.cs#L305)). Публичный API не меняется, Postgres не трогаем (по договорённости). ## Изменения **1. Новый файл `SqlHelperAbstract\Sql\sys_function_select.sql`** Текст запроса один в один как сейчас (одна строка, `:param`-синтаксис, без точки с запятой): ```sql select func_name, func_params, func_text from sys_functions where func_name = :func_name ``` **2. [Kit.Helpers.csproj](Kit.Helpers.csproj) — подключить как EmbeddedResource** ```xml ``` **3. Новый загрузчик `SqlHelperAbstract\SqlTexts.cs`** (namespace `Kit.Helpers.SqlHelperAbstract`) - Внутренний статический класс с единственным свойством `SelectStoredFunction`. - Читает ресурс из `typeof(SqlTexts).Assembly` (поиск имени ресурса по суффиксу `sys_function_select.sql` — устойчиво к смене root namespace), кэширует в `ConcurrentDictionary`, текст `Trim()`-ится. **4. Правка [SqlHelperSQLite.cs:305](SqlHelperAbstract/SqlHelperSQLite.cs#L305)** ```csharp 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-проект в решении.