Example #1
0
        public static TObject Excute <TObject>(IContext context, Func <MySqlCommand, TObject> doExcute, string querySql = "")
        {
            var queryConfig = context.GetConfig();

            using (var connection = new MySqlConnection(SqlEnginerConfig.GetConnection(queryConfig.Connection)))
            {
                connection.Open();
                var realSql = SqlParser.Convert(context, string.IsNullOrEmpty(querySql) ? queryConfig.Sql : querySql);
                using (var cmd = connection.CreateCommand())
                {
                    cmd.CommandText = realSql.Item1;
                    if (realSql.Item2 == null || !realSql.Item2.Any())
                    {
                        return(doExcute(cmd));
                    }

                    foreach (var ps in realSql.Item2)
                    {
                        cmd.Parameters.AddWithValue(ps.Key, ps.Value);
                    }

                    return(doExcute(cmd));
                }
            }
        }
Example #2
0
        public static ParamInfo GetGlobalParamData(IDictionary <string, object> queryParams, string key)
        {
            var keyArray = key.Split('_');
            var realKey  = keyArray[1];
            var data     = SqlEnginerConfig.GetGlobalDatas(realKey);

            if (data == null)
            {
                throw new ArgumentNullException(string.Concat("不存在", realKey, "全局对象!"));
            }

            object outData = null;

            if (!queryParams.TryGetValue(key, out outData))
            {
                var convertData = CovnertParam(data, queryParams, realKey);
                if (convertData != data)
                {
                    queryParams.Add(key, convertData);
                    data = convertData;
                }
            }
            else
            {
                data = outData;
            }

            return(new ParamInfo
            {
                Type = ParamType.Global,
                Name = key,
                Data = data
            });
        }
        public static void TriggeValuesChecked(UpdateContext updateContext, object data, UpdateConfig config, IDictionary <string, string> cols, ActionType actionType, IValueSetter valueSetter, IEnumerable <string> keys)
        {
            var rules = SqlEnginerConfig.GetMatchRules(config.Connection, config.Table, actionType, UpdateType.CheckValue).OrderBy(r => r.RangeType).ToArray();

            if (rules.Any() == false)
            {
                return;
            }

            var columns = rules.SelectMany(r => r.Columns).ToArray();

            foreach (var key in keys)
            {
                if (!cols.Any(c => c.Value == key) || key.StartsWith(SqlKeyWorld.ParamStart))
                {
                    continue;
                }

                var realKey      = cols.First(c => c.Value == key).Key;
                var matchColumns = columns.Where(c => c.Name == realKey).ToArray();
                if (matchColumns.Any() == false)
                {
                    continue;
                }

                foreach (var mc in matchColumns)
                {
                    IValueChecked valueChecked = ValueCheckedFactory.Create(mc.ValueType);
                    if (valueChecked == null || mc.Value == null)
                    {
                        continue;
                    }

                    var value = valueSetter.GetValue(data, key);
                    if (valueChecked.Checked(updateContext, mc, value, key, realKey))
                    {
                        continue;
                    }

                    var msg = mc.Name;
                    if (!string.IsNullOrEmpty(mc.Error))
                    {
                        msg = mc.Error;
                    }

                    throw new ArgumentException(msg);
                }
            }
        }
        public static void TriggeDefaultValues(UpdateContext updateContext, object data, UpdateConfig config, IDictionary <string, string> cols, IValueSetter valueSetter, IEnumerable <string> keys = null)
        {
            return;

            var valueKeys = keys.ToArray();
            ICollection <string> exceptKeys = new List <string>();

            foreach (var col in cols)
            {
                if (valueKeys.Contains(col.Value))
                {
                    continue;
                }

                exceptKeys.Add(col.Key);
            }

            if (exceptKeys.Any() == false)
            {
                return;
            }

            var rules = SqlEnginerConfig.GetMatchRules(config.Connection, config.Table, ActionType.Insert).OrderBy(r => r.RangeType).ToArray();

            foreach (var key in exceptKeys)
            {
                if (key.StartsWith(SqlKeyWorld.ParamStart))
                {
                    continue;
                }

                foreach (var rule in rules)
                {
                    var column = rule.Columns.FirstOrDefault(c => c.Name.Equals(key, StringComparison.OrdinalIgnoreCase));
                    if (column == null)
                    {
                        continue;
                    }

                    var colValue = GetColumnValue(config.Connection, config.Table, column, data);
                    valueSetter.SetField(data, colValue, cols[key]);
                    break;
                }
            }
        }
Example #5
0
        public static Tuple <MySqlConnection, MySqlTransaction> OpenTran(this UpdateContext updateContext, string connectionStr)
        {
            if (updateContext.Conns == null)
            {
                updateContext.Conns = new Dictionary <string, Tuple <MySqlConnection, MySqlTransaction> >();
            }

            Tuple <MySqlConnection, MySqlTransaction> conn;

            if (!updateContext.Conns.TryGetValue(connectionStr, out conn))
            {
                var mySqlConnectiom = new MySqlConnection(SqlEnginerConfig.GetConnection(connectionStr));
                mySqlConnectiom.Open();
                MySqlTransaction transaction = mySqlConnectiom.BeginTransaction();
                conn = Tuple.Create(mySqlConnectiom, transaction);
                updateContext.Conns.Add(connectionStr, conn);
            }

            return(conn);
        }
        public static IEnumerable <Column> QueryColumns(UpdateConfig config)
        {
            if (string.IsNullOrEmpty(config.Table))
            {
                return(Enumerable.Empty <Column>());
            }

            var queryHandler = QueryHandlerFactory.GetQueryHandler(5);
            var queryConfig  = new QueryConfig
            {
                Config     = new Newtonsoft.Json.Linq.JObject(),
                Connection = config.Connection
            };

            var connStr    = SqlEnginerConfig.GetConnection(queryConfig.Connection);
            var startIndex = connStr.IndexOf(Catalog, StringComparison.OrdinalIgnoreCase);
            var endIndex   = connStr.IndexOf(";", startIndex);
            var dbName     = connStr.Substring(startIndex + 8, endIndex - startIndex - 8);

            queryConfig.CacheConfig = new CacheUtil.Models.CacheConfig
            {
                Key = string.Format(DBFormatter, dbName)
            };

            queryConfig.Config[DBName] = dbName;
            queryConfig.Config[ValueSetterCreater.TypeStr] = columnType;
            var columns = queryHandler.Query(new Context
            {
                HandlerConfig = new HandlerConfig
                {
                    Connection = config.Connection,
                },
                Configs = new QueryConfig[] {
                    queryConfig,
                }
            }).ToDatas <Column>().Where(c => c.TableName == config.Table).ToArray();

            return(columns);
        }
        public ParamInfo GetParamInfo(IContext context, string dataStr)
        {
            var key      = dataStr.Substring(1, dataStr.Length - 1);
            var keyArray = dataStr.Split('_');
            var realKey  = keyArray[1];
            var data     = SqlEnginerConfig.GetGlobalDatas(realKey);

            if (data == null)
            {
                throw new ArgumentNullException(string.Concat("不存在", realKey, "全局对象!"));
            }

            var    queryParams = context.Params;
            object outData;

            if (!queryParams.TryGetValue(key, out outData))
            {
                var convertData = ParamsUtil.CovnertParam(data, queryParams, realKey);
                if (convertData != data)
                {
                    queryParams.Add(key, convertData);
                    data = convertData;
                }
            }
            else
            {
                data = outData;
            }

            return(new ParamInfo
            {
                Type = ParamType.Global,
                Name = key,
                Data = data
            });
        }