using System.Collections.Concurrent; using System.Reflection; namespace Kit.Helpers.SqlHelperAbstract { /// /// SQL-тексты библиотеки, хранятся EmbeddedResource-файлами в SqlHelperAbstract\Sql\*.sql (см. Kit.Helpers.csproj). /// internal static class SqlTexts { private static readonly ConcurrentDictionary _cache = new(); /// Lookup «хранимой функции» в sys_functions (SQLite). public static string SelectStoredFunction => Load("sys_function_select.sql"); private static string Load(string fileName) { return _cache.GetOrAdd(fileName, key => { Assembly assembly = typeof(SqlTexts).Assembly; string resourceName = assembly.GetManifestResourceNames().SingleOrDefault(x => x.EndsWith(key, StringComparison.Ordinal)) ?? throw new InvalidOperationException($"Embedded sql resource not found: {key}"); using Stream stream = assembly.GetManifestResourceStream(resourceName) ?? throw new InvalidOperationException($"Embedded sql resource is empty: {resourceName}"); using var reader = new StreamReader(stream); return reader.ReadToEnd().Trim(); }); } } }