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