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)); } } }
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; } } }
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 }); }