/// <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);
            }
        }
예제 #3
0
        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;
        }
예제 #4
0
        /// <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;
 }