public static object UseSqlAsFuncsFrom(CallExpr ce, Generator.Ctx ctx) { var arg0 = Generator.Generate(ce.args[0], ctx); if (OPs.KindOf(arg0) != ValueKind.Const) { ctx.Error("Constant value expected"); } var arg1 = (ce.args.Count < 2) ? null : Generator.Generate(ce.args[1], ctx); var sqlFileName = Convert.ToString(arg0); DbFuncType forKinds; if (arg1 == null) { forKinds = DbFuncType.TimeSlice | DbFuncType.TimeInterval; } else { var lst = arg1 as IList ?? new object[] { arg1 }; forKinds = DbFuncType.None; foreach (var v in lst) { forKinds |= (DbFuncType)Enum.Parse(typeof(DbFuncType), Convert.ToString(v)); } } var dbConnName = (ce.args.Count < 3) ? DefaultDbConnName : OPs.TryAsName(ce.args[2], ctx); if (string.IsNullOrEmpty(dbConnName)) { ctx.Error($"Connection name must be nonempty: {ce.args[2]}"); } var fullFileName = Path.IsPathRooted(sqlFileName) ? sqlFileName : Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Convert.ToString(sqlFileName)); var cacheKey = $"FuncDefs:{fullFileName}:{forKinds.ToString()}"; Func <object> ldfsFunc = () => { var sqlCtx = new W.Expressions.Sql.Preprocessing.PreprocessingContext() { sqlFileName = fullFileName, cacheSubdomain = "DB", dbConnValueName = dbConnName, forKinds = forKinds, ctx = ctx, cachingExpiration = TimeSpan.FromMinutes(5), defaultLocationForValueInfo = (ce.args.Count < 4) ? null : OPs.TryAsString(ce.args[3], ctx) }; return(sqlCtx.LoadingFuncs()); }; var lfds = (IEnumerable <FuncDef>)FuncDefs_Core._Cached(cacheKey, ldfsFunc, DateTimeOffset.MaxValue, TimeSpan.FromMinutes(5)); return(lfds); }