/// <summary> /// 格式化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> public override void Format <T>(SqlTagFormat format, EasySqlParameter <T> parameter, IReadOnlyList <KeyValueTuple <string, object> > convert) { var item = convert.FirstOrDefault(o => o.Key == this.Parameter); if (this.Match(item)) { if (this.Labels.Any()) { if (format.IfContainer) { if (format.IfThenCount > 0 && this.Then != null) { format.Write(this.Then); } else { format.IfThenCount++; } } else { format.Write(this.Then); } foreach (var line in this.Labels) { line.Format(format, parameter, convert); } } } }
/// <summary> /// 格式化内容 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parameter">The parameter.</param> /// <returns></returns> public SqlTagFormat Format <T>(EasySqlParameter <T> parameter) { var format = new SqlTagFormat(this.TextLength, parameter.Count) { Id = this.Id }; if (this.Labels.Any()) { var convert = parameter.Convert(); foreach (var line in this.Labels) { line.Format(format, parameter, convert); } } return(format); }
/// <summary> /// 格式化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> /// <exception cref="Never.Exceptions.InvalidException">if tag contain other {0} tag</exception> public override void Format <T>(SqlTagFormat format, EasySqlParameter <T> parameter, IReadOnlyList <KeyValueTuple <string, object> > convert) { var writeThen = false; format.IfContainer = true; format.IfThenCount = 0; var splitCount = 0; foreach (var lable in this.Labels) { switch (lable.GetLabelType()) { case LabelType.Empty: case LabelType.NotEmpty: case LabelType.Null: case LabelType.NotNull: case LabelType.Contain: case LabelType.NotExists: case LabelType.Array: { if (lable.ContainParameter(parameter, convert)) { if (!writeThen) { writeThen = true; format.Write(this.Then); } if (this.Split.IsNotNullOrEmpty()) { if (splitCount > 0) { format.Write(this.Split); } else { splitCount++; } } lable.Format(format, parameter, convert); } } break; case LabelType.Text: { if (this.Split.IsNotNullOrEmpty()) { if (splitCount > 0) { format.Write(this.Split); } else { splitCount++; } } lable.Format(format, parameter, convert); } break; default: { throw new Never.Exceptions.InvalidException("if tag contain other {0} tag", lable.GetLabelType().ToString()); } } } if (writeThen && this.End.IsNotNullOrEmpty()) { format.Write(this.End); } format.IfContainer = false; format.IfThenCount = 0; }
/// <summary> /// 格式化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> public override void Format <T>(SqlTagFormat format, EasySqlParameter <T> parameter, IReadOnlyList <KeyValueTuple <string, object> > convert) { format.ReturnType = this.Type; this.Line.Format(format, parameter, convert); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="arrayLabel"></param> /// <param name="label"></param> /// <param name="parameter"></param> /// <param name="arrayLevel"></param> public static void LoadUsingDelegated <T>(SqlTagFormat format, ArrayLabel arrayLabel, TextLabel label, object parameter, int arrayLevel) { var para = new KeyValueEasySqlParameter <T>((T)parameter); label.FormatArray(format, arrayLabel, para, para.Convert(), arrayLevel); }
/// <summary> /// 格式化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> public override void Format <T>(SqlTagFormat format, EasySqlParameter <T> parameter, IReadOnlyList <KeyValueTuple <string, object> > convert) { if (Parameter.IsNullOrEmpty()) { if (parameter.IsIEnumerable || parameter is ISqlParameterEnumerable) { if (parameter.Object is INullableParameter) { if (format.IfContainer) { if (format.IfThenCount > 0 && Then != null) { format.Write(Then); } else { format.IfThenCount++; } } else { format.Write(Then); } var ator = (((IReferceNullableParameter)parameter.Object).Value as System.Collections.IEnumerable).GetEnumerator(); var i = 0; var hadA = false; while (ator.MoveNext()) { if (hadA) { format.Write(Split); } format.Write(Open); Build(ator.Current).Invoke(format, this, Line, ator.Current, i++); format.Write(Close); hadA = true; } } else { if (format.IfContainer) { if (format.IfThenCount > 0 && Then != null) { format.Write(Then); } else { format.IfThenCount++; } } else { format.Write(Then); } IEnumerator ator = null; if (parameter is ISqlParameterEnumerable) { ator = ((IEnumerable)parameter).GetEnumerator(); } else { ator = (parameter.Object as System.Collections.IEnumerable).GetEnumerator(); } var i = 0; var hadA = false; while (ator.MoveNext()) { if (hadA) { format.Write(Split); } format.Write(Open); Build(ator.Current).Invoke(format, this, Line, ator.Current, i++); format.Write(Close); hadA = true; } } } else { throw new InvalidException("the sql tag {0} need the array {1} parameter;", format.Id, Parameter); } } if (parameter.Count <= 0) { return; } var item = convert.FirstOrDefault(o => o.Key.Equals(Parameter)); if (item == null) { return; } var value = item.Value; if (item.Value is INullableParameter) { if (((INullableParameter)item.Value).HasValue) { if (((IReferceNullableParameter)item.Value).Value is System.Collections.IEnumerable) { if (format.IfContainer) { if (format.IfThenCount > 0 && Then != null) { format.Write(Then); } else { format.IfThenCount++; } } else { format.Write(Then); } format.Write(Open); Line.FormatArray <T>(format, this, parameter, item); format.Write(Close); } else { throw new InvalidException("the sql tag {0} need the array {1} parameter;", format.Id, Parameter); } } else { return; } } else if (value is System.Collections.IEnumerable) { if (format.IfContainer) { if (format.IfThenCount > 0 && Then != null) { format.Write(Then); } else { format.IfThenCount++; } } else { format.Write(Then); } format.Write(Open); Line.FormatArray <T>(format, this, parameter, item); format.Write(Close); } else { throw new InvalidException("the sql tag {0} need the array {1} parameter;", format.Id, Parameter); } }
/// <summary> /// 格式化sql语句,是数组使用的 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> /// <param name="arrayLevel"></param> /// <param name="arrayLabel"></param> public void FormatArray <T>(SqlTagFormat format, ArrayLabel arrayLabel, EasySqlParameter <T> parameter, IReadOnlyList <KeyValueTuple <string, object> > convert, int arrayLevel) { if (this.SqlText.IsNullOrEmpty()) { return; } if (this.parameterPositions == null || this.parameterPositionCount == 0) { format.Write(this.SqlText); return; } var copy = this.Copy(); var sb = new StringBuilder(this.SqlText); for (var i = 0; i < this.SqlText.Length; i++) { var para = this.MathPosition(copy, i); if (para == null) { format.Write(this.SqlText[i]); continue; } if (format.IfTextParameter(para)) { var item = convert.FirstOrDefault(o => o.Key.Equals(para.Name)); if (item == null) { throw new InvalidException("the sql tag {0} need the {1} parameters;", format.Id, para.Name); } var value = item.Value; if (item.Value is IReferceNullableParameter) { value = ((IReferceNullableParameter)item.Value).Value; } if (value == null || value == DBNull.Value) { format.WriteOnTextMode("null"); i += para.PositionLength + 1; } else { //format.WriteOnTextMode('\''); format.WriteOnTextMode(value.ToString()); //format.WriteOnTextMode('\''); i += para.PositionLength + 1; if (i < this.SqlText.Length) { format.WriteOnTextMode(this.SqlText[i]); } } } else { format.Write(this.SqlText[i]); var item = convert.FirstOrDefault(o => o.Key.Equals(para.Name)); if (item == null) { throw new InvalidException("the sql tag {0} need the {1} parameters;", format.Id, para.Name); } var value = item.Value; if (item.Value is IReferceNullableParameter) { value = ((IReferceNullableParameter)item.Value).Value; } var newvalue = (value == null || value == DBNull.Value) ? DBNull.Value : value; var newkey = string.Format("{0}x{1}z", para.Name, arrayLevel); format.Write(newkey); format.AddParameter(newkey, newvalue); i += para.PositionLength + 1; if (i < this.SqlText.Length) { format.Write(this.SqlText[i]); } } } }
/// <summary> /// 格式化sql语句,是数组使用的 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> /// <param name="arrayLabel"></param> public void FormatArray <T>(SqlTagFormat format, ArrayLabel arrayLabel, EasySqlParameter <T> parameter, KeyValueTuple <string, object> convert) { if (this.SqlText.IsNullOrEmpty()) { return; } if (this.parameterPositions == null || this.parameterPositionCount == 0) { format.Write(this.SqlText); return; } var copy = this.Copy(); for (var i = 0; i < this.SqlText.Length; i++) { var para = this.MathPosition(copy, i); if (para == null) { format.Write(this.SqlText[i]); continue; } var value = convert.Value; if (convert.Value is IReferceNullableParameter) { value = ((IReferceNullableParameter)convert.Value).Value; } var item = value as System.Collections.IEnumerable; var ator = item.GetEnumerator(); var hadA = false; var arrayLevel = 0; if (format.IfTextParameter(para)) { while (ator.MoveNext()) { if (ator.Current == null || ator.Current == DBNull.Value) { continue; } if (hadA) { format.WriteOnTextMode(arrayLabel.Split); } //format.WriteOnTextMode('\''); format.WriteOnTextMode(ator.Current.ToString()); //format.WriteOnTextMode('\''); hadA = true; } i += para.PositionLength + 1; if (i < this.SqlText.Length) { format.WriteOnTextMode(this.SqlText[i]); } } else { format.Write(this.SqlText[i]); while (ator.MoveNext()) { if (ator.Current == null || ator.Current == DBNull.Value) { continue; } var newvalue = (ator.Current == null || ator.Current == DBNull.Value) ? DBNull.Value : ator.Current; var newkey = string.Format("{0}x{1}z", para.Name, arrayLevel); if (hadA) { format.Write(arrayLabel.Split); format.Write(para.ActualPrefix); } format.Write(newkey); arrayLevel++; format.AddParameter(newkey, newvalue); hadA = true; } i += para.PositionLength + 1; if (i < this.SqlText.Length) { format.Write(this.SqlText[i]); } } } }
/// <summary> /// 格式化sql语句 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> public override void Format <T>(SqlTagFormat format, EasySqlParameter <T> parameter, IReadOnlyList <KeyValueTuple <string, object> > convert) { if (this.SqlText.IsNullOrEmpty()) { return; } if (this.parameterPositions == null || this.parameterPositionCount == 0) { format.Write(this.SqlText); return; } if (this.parameterPositionCount == 1) { var item = convert.FirstOrDefault(o => o.Key.Equals(this.parameterPositions[0].Name)); if (item == null) { throw new InvalidException("the sql tag {0} need the {1} parameters;", format.Id, this.parameterPositions[0].Name); } var value = item.Value; if (item.Value is IReferceNullableParameter) { value = ((IReferceNullableParameter)item.Value).Value; } if (value == null) { if (format.IfTextParameter(this.parameterPositions[0])) { format.WriteOnTextMode(this.SqlText, 0, this.parameterPositions[0].PrefixStart); //format.WriteOnTextMode("\'null\'"); //format.WriteOnTextMode("null"); format.WriteOnTextMode(this.SqlText, this.parameterPositions[0].StopPosition + 1, this.SqlText.Length - this.parameterPositions[0].StopPosition - 1); } else { format.Write(this.SqlText); format.AddParameter(this.parameterPositions[0].Name, DBNull.Value); } } else if (value == DBNull.Value) { if (format.IfTextParameter(this.parameterPositions[0])) { format.WriteOnTextMode(this.SqlText, 0, this.parameterPositions[0].PrefixStart); //format.WriteOnTextMode("\'null\'"); format.WriteOnTextMode("null"); format.WriteOnTextMode(this.SqlText, this.parameterPositions[0].StopPosition + 1, this.SqlText.Length - this.parameterPositions[0].StopPosition - 1); } else { format.Write(this.SqlText); format.AddParameter(this.parameterPositions[0].Name, DBNull.Value); } } else { if (format.IfTextParameter(this.parameterPositions[0])) { format.WriteOnTextMode(this.SqlText, 0, this.parameterPositions[0].PrefixStart); //format.WriteOnTextMode('\''); format.WriteOnTextMode(value.ToString()); //format.WriteOnTextMode('\''); format.WriteOnTextMode(this.SqlText, this.parameterPositions[0].StopPosition + 1, this.SqlText.Length - this.parameterPositions[0].StopPosition - 1); } else { format.Write(this.SqlText); format.AddParameter(this.parameterPositions[0].Name, value); } } return; } var copy = this.Copy(); for (var i = 0; i < this.SqlText.Length; i++) { var para = this.MathPosition(copy, i); if (para == null) { format.Write(this.SqlText[i]); continue; } if (format.IfTextParameter(para)) { var item = convert.FirstOrDefault(o => o.Key.Equals(para.Name)); if (item == null) { throw new InvalidException("the sql tag {0} need the {1} parameters;", format.Id, para.Name); } var value = item.Value; if (item.Value is IReferceNullableParameter) { value = ((IReferceNullableParameter)item.Value).Value; } if (value == null) { //format.WriteOnTextMode("\'null\'"); //format.WriteOnTextMode("null"); } if (value == DBNull.Value) { //format.WriteOnTextMode("\'null\'"); format.WriteOnTextMode("null"); } else { //format.WriteOnTextMode('\''); format.WriteOnTextMode(value.ToString()); //format.WriteOnTextMode('\''); } i += para.PositionLength + 1; if (i < this.SqlText.Length) { format.WriteOnTextMode(this.SqlText[i]); } } else { var item = convert.FirstOrDefault(o => o.Key.Equals(para.Name)); if (item == null) { throw new InvalidException("the sql tag {0} need the {1} parameters;", format.Id, para.Name); } format.Write(this.SqlText, para.PrefixStart, para.PositionLength + 1); format.AddParameter(item); i += para.PositionLength + 1; if (i < this.SqlText.Length) { format.Write(this.SqlText[i]); } } } }
/// <summary> /// 格式化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="format"></param> /// <param name="parameter"></param> /// <param name="convert"></param> public abstract void Format <T>(SqlTagFormat format, EasySqlParameter <T> parameter, IReadOnlyList <KeyValueTuple <string, object> > convert);