public void Execute(ILuaSqlExecutePolicyExecutorInfo info)
        {
            string defCacheType = null;

            //query和scalar才进行缓存
            if (info.ExecuteType == ConfigSqlExecuteType.query)
            {
                defCacheType = QueryCacheExtensions.CacheType;
            }
            else if (info.ExecuteType == ConfigSqlExecuteType.scalar)
            {
                defCacheType = ScalarCacheExtensions.CacheType;
            }

            if (defCacheType != null)
            {
                //执行缓存策略
                var policy = info.GetPolicy() as SqlL2QueryCachePolicy;
                //是否配置了查询缓存
                if (IsUsePolicy(policy))
                {
                    var cacheType = string.IsNullOrEmpty(policy.Type) ? defCacheType : policy.Type;
                    var rtn       = _cache.Cache(info.TableName, cacheType,
                                                 _util.CombineSqlAndParamsToString(info.Sql, info.SqlParams),
                                                 info.ToDBExecutor, policy.Expiry, info.ReturnType);
                    info.ReturnValue = rtn;

                    //执行缓存成功,那么结束
                    info.IsEnd = true;
                }
            }
        }
Example #2
0
        public void Execute(ILuaSqlExecutePolicyExecutorInfo info)
        {
            var policy = info.GetPolicy() as SqlConfigExecuteLogPolicy;

            if (IsUsePolicy(policy) && _doLog != null)
            {
                if (policy.IsAsync)
                {
                    Task.Run(() =>
                    {
                        _doLog.Invoke(info.TableName, info.SqlName, info.Sql, info.SqlParams);
                    });
                }
                else
                {
                    _doLog.Invoke(info.TableName, info.SqlName, info.Sql, info.SqlParams);
                }
            }
        }
Example #3
0
        public void Execute(ILuaSqlExecutePolicyExecutorInfo info)
        {
            //缓存清理
            if (info.ExecuteType == ConfigSqlExecuteType.nonquery
                //scalar类型也是可能执行nonquery语句的,例如:获取新增后的id:
                //  insert into TName(...) output inserted.id values(...)
                || info.ExecuteType == ConfigSqlExecuteType.scalar)
            {
                var policy = info.GetPolicy() as SqlClearCachePolicy;
                //而且配置了缓存清理,那么进行清理缓存操作
                if (IsUsePolicy(policy))
                {
                    //到数据库中执行sql
                    var dbrtn = info.ToDBExecutor();

                    object objrtn = 0;
                    if (_tInt.TryChangeValueType(dbrtn, out objrtn))
                    {
                        var result = (int)objrtn;
                        //返回值大于0,就是有处理的数据才进行清理缓存
                        if (result > 0)
                        {
                            //是否使用异步
                            if (policy.IsAsync)
                            {
                                Task.Run(() =>
                                {
                                    ClearCache(info.TableName, policy);
                                });
                            }
                            else
                            {
                                ClearCache(info.TableName, policy);
                            }
                        }
                    }

                    info.ReturnValue = dbrtn;
                    //执行之后,那么结束
                    info.IsEnd = true;
                }
            }
        }