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

38 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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