/// <summary> /// 设置全局策略对象 /// </summary> public static void SetGlobalPolicy(this ILuaSqlConfigManager mgr, ISqlConfigPolicy policy) { policy.CheckNull(nameof(policy)); var policyName = EFHelper.Services.EFCoreExUtility.GetSqlConfigPolicyName(policy.GetType()); if (string.IsNullOrEmpty(policyName)) { throw new ArgumentException($"Could not find {nameof(SqlConfigPolicyAttribute)} in {policy.GetType().Name} type"); } mgr.PolicyMgr.GlobalPolicies[policyName] = policy; }
/// <summary> /// 设置sql日志记录策略执行器 /// </summary> /// <param name="mgr"></param> /// <param name="doLog">Action中的参数一:TableName;参数二:SqlName;参数三:Sql;参数四:SqlParameters</param> /// <param name="isAddLogGlobalPolicyObj">是否添加全局的策略对象</param> /// <param name="isAsync">是否异步记录</param> public static void SetLogPolicyExecutor(this ILuaSqlConfigManager mgr, Action <string, string, string, IReadOnlyList <IDataParameter> > doLog, bool isAddLogGlobalPolicyObj = true, bool isAsync = true) { var logExc = new LuaSqlExecuteLogPolicyExecutor(doLog); mgr.PolicyMgr.SetSqlExecutePolicyExecutor(() => logExc); if (isAddLogGlobalPolicyObj) { var policy = new SqlConfigExecuteLogPolicy() { IsAsync = isAsync, }; mgr.SetGlobalPolicy(policy); } }
public LuaSqlConfigExecutor(ILuaSqlConfigManager sqlConfigMgr, DbContext db, IDictionary <string, IDictionary <string, object> > luaSqlParamFuncContainer, string tableName, string sqlName, ILuaConfigSqlInfo sqlInfo, ILuaConfigTableInfo tableInfo, ISqlExecutor sqlExecutor, ISqlParamConverter sqlParamCvt, IEFCoreExtendUtility util) { _luaSqlParamFuncContainer = luaSqlParamFuncContainer; _sqlConfigMgr = sqlConfigMgr; _db = db; _sqlInfo = sqlInfo; _tableInfo = tableInfo; _tableName = tableName; _sqlName = sqlName; _sqlExecutor = sqlExecutor; _sqlParamCvt = sqlParamCvt; _util = util; }
/// <summary> /// 设置Lua Sql的相关服务 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="luasqlScriptCount">Lua脚本解析器的实例对象个数(因为Lua脚本解析器实例对象不支持多线程,因此实例只能被一个线程操作,因此多线程使用就得多个实例对象,但也不能设置过多,设置过多占内存就越多)</param> /// <returns></returns> public static IEFCoreExtendServiceBuilder AddLuaSqlDefault(this IEFCoreExtendServiceBuilder builder, int luasqlScriptCount = 10) { builder.Services.AddScoped <ILuaSqlConfigManager, LuaSqlConfigManager>(); builder.Services.AddScoped <ILuaSqlPolicyManager, LuaSqlPolicyManager>(); builder.Services.AddScoped <ILuaFuncManager, LuaFuncManager>(); var config = new LuaSqlConfig(luasqlScriptCount); builder.Services.AddScoped <ILuaSqlConfig>(sp => config); if (!_isAddBuildCallback) { _isAddBuildCallback = true; EFHelper.ServiceBuiltCallback += p => { _luamgr = p.Provider.GetService <ILuaSqlConfigManager>(); }; } return(builder); }
/// <summary> /// 获取lua sql的执行器 /// </summary> /// <typeparam name="TEntity">表的实体类型(用于获取表名)</typeparam> /// <param name="mgr"></param> /// <param name="db"></param> /// <param name="sqlName">sql名称</param> /// <returns></returns> public static ILuaSqlConfigExecutor GetExecutor <TEntity>(this ILuaSqlConfigManager mgr, DbContext db, [CallerMemberName] string sqlName = null) { return(mgr.GetExecutor(db, typeof(TEntity), sqlName)); }
/// <summary> /// 获取lua sql的执行器 /// </summary> /// <param name="mgr"></param> /// <param name="db"></param> /// <param name="tableEntityType">表的实体类型(用于获取表名)</param> /// <param name="sqlName">sql名称</param> /// <returns></returns> public static ILuaSqlConfigExecutor GetExecutor(this ILuaSqlConfigManager mgr, DbContext db, Type tableEntityType, [CallerMemberName] string sqlName = null) { return(mgr.GetExecutor(db, EFHelper.Services.EFCoreExUtility.GetTableName(tableEntityType), sqlName)); }
/// <summary> /// 从目录中获取sql的配置文件 /// </summary> /// <param name="sqlConfig"></param> /// <param name="configDirectoryPath"></param> /// <param name="encoding"></param> /// <param name="isAllDirectories"></param> /// <param name="fileType"></param> public static void LoadDirectory(this ILuaSqlConfigManager sqlConfig, string configDirectoryPath, Encoding encoding, bool isAllDirectories = true, LuaSqlConfigFileExtType fileType = LuaSqlConfigFileExtType.lua) { bool bLoad = false; string[] files; if (isAllDirectories) { files = Directory.GetFiles(configDirectoryPath, "*", SearchOption.AllDirectories); } else { files = Directory.GetFiles(configDirectoryPath); } if (files?.Length > 0) { if (fileType == LuaSqlConfigFileExtType.all) { //先查找目录下时候有全局文件,全局文件先加载(带luaglobal前缀的文件) var globalfile = files.Where(l => Path.GetFileNameWithoutExtension(l).ToLower().StartsWith(LuaSqlConfigConst.LuaGlobalFileLabel)) .OrderByDescending(l => Path.GetFileNameWithoutExtension(l)).ToList(); if (globalfile?.Count > 0) { //先加载全局文件 foreach (var g in globalfile) { sqlConfig.LoadFile(g, encoding); } foreach (var f in files) { if (!globalfile.Contains(f)) { sqlConfig.LoadFile(f, encoding); } } } else { foreach (var f in files) { sqlConfig.LoadFile(f, encoding); } } bLoad = true; } else { var fileExts = new List <string>(); if ((fileType & LuaSqlConfigFileExtType.txt) == LuaSqlConfigFileExtType.txt) { fileExts.Add(EFHelper.Services.EFCoreExUtility.GetEnumDescription(LuaSqlConfigFileExtType.txt)); } if ((fileType & LuaSqlConfigFileExtType.lua) == LuaSqlConfigFileExtType.lua) { fileExts.Add(EFHelper.Services.EFCoreExUtility.GetEnumDescription(LuaSqlConfigFileExtType.lua)); } var finfos = files.Select(l => new FileInfo(l)).Where(l => fileExts.Contains(l.Extension.ToLower())).ToList(); if (finfos?.Count > 0) { //先查找目录下时候有全局文件,全局文件先加载(带luaglobal前缀的文件) var globalfile = finfos.Where(l => Path.GetFileNameWithoutExtension(l.Name) .ToLower().StartsWith(LuaSqlConfigConst.LuaGlobalFileLabel)) .OrderByDescending(l => Path.GetFileNameWithoutExtension(l.Name)).ToList(); if (globalfile?.Count > 0) { //先加载全局文件 foreach (var g in globalfile) { sqlConfig.LoadFile(g, encoding); } foreach (var f in finfos) { if (!globalfile.Contains(f)) { sqlConfig.LoadFile(f, encoding); } } } else { foreach (var f in finfos) { sqlConfig.LoadFile(f, encoding); } } bLoad = true; } } } if (!bLoad) { throw new ArgumentException($"The directory [{configDirectoryPath}] does not exist LuaSQL configuration file.", nameof(configDirectoryPath)); } }
/// <summary> /// 加载sql的配置文件(Encoding默认为Encoding.UTF8) /// </summary> /// <param name="sqlConfig"></param> /// <param name="configFile"></param> public static void LoadFile(this ILuaSqlConfigManager sqlConfig, FileInfo configFile) { sqlConfig.LoadFile(configFile, Encoding.UTF8); }
/// <summary> /// 加载luasql的配置文件(Encoding默认为Encoding.UTF8) /// </summary> /// <param name="sqlConfig"></param> /// <param name="configFilePath"></param> public static void LoadFile(this ILuaSqlConfigManager sqlConfig, string configFilePath) { sqlConfig.LoadFile(configFilePath, Encoding.UTF8); }
/// <summary> /// 加载luasql的配置文件 /// </summary> /// <param name="sqlConfig"></param> /// <param name="configFile"></param> /// <param name="encoding"></param> public static void LoadFile(this ILuaSqlConfigManager sqlConfig, FileInfo configFile, Encoding encoding) { sqlConfig.LoadFile(configFile.FullName, encoding); }
/// <summary> /// 加载lua sql的配置文件 /// </summary> /// <param name="sqlConfig"></param> /// <param name="configFilePath"></param> /// <param name="encoding"></param> public static void LoadFile(this ILuaSqlConfigManager sqlConfig, string configFilePath, Encoding encoding) { sqlConfig.Config.Add(Path.GetFileNameWithoutExtension(configFilePath), File.ReadAllText(configFilePath, encoding)); }
/// <summary> /// 加载lua sql的配置文件 /// </summary> /// <param name="sqlConfig"></param> /// <param name="tableName">表名</param> /// <param name="luascript">lua脚本</param> public static void Add(this ILuaSqlConfigManager sqlConfig, string tableName, string luascript) { sqlConfig.Config.Add(tableName, luascript); }
/// <summary> /// 从目录中获取sql的配置文件((Encoding默认为Encoding.UTF8) /// </summary> /// <param name="sqlConfig"></param> /// <param name="configDirectory"></param> /// <param name="encoding"></param> /// <param name="isAllDirectories"></param> /// <param name="fileType"></param> public static void LoadDirectory(this ILuaSqlConfigManager sqlConfig, DirectoryInfo configDirectory, Encoding encoding, bool isAllDirectories = true, LuaSqlConfigFileExtType fileType = LuaSqlConfigFileExtType.lua) { sqlConfig.LoadDirectory(configDirectory.FullName, encoding, isAllDirectories, fileType); }
/// <summary> /// 从目录中获取sql的配置文件(Encoding默认为Encoding.UTF8) /// </summary> /// <param name="sqlConfig"></param> /// <param name="configDirectoryPath"></param> /// <param name="isAllDirectories"></param> /// <param name="fileType"></param> public static void LoadDirectory(this ILuaSqlConfigManager sqlConfig, string configDirectoryPath, bool isAllDirectories = true, LuaSqlConfigFileExtType fileType = LuaSqlConfigFileExtType.lua) { sqlConfig.LoadDirectory(configDirectoryPath, Encoding.UTF8, isAllDirectories, fileType); }
/// <summary> /// 设置全局策略对象 /// </summary> /// <param name="mgr"></param> /// <param name="policyName"></param> /// <param name="policy"></param> public static void SetGlobalPolicy(this ILuaSqlConfigManager mgr, string policyName, ISqlConfigPolicy policy) { policy.CheckNull(nameof(policy)); policyName.CheckStringIsNullOrEmpty(nameof(policyName)); mgr.PolicyMgr.GlobalPolicies[policyName] = policy; }