Beispiel #1
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)
        {
            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);
                    }
                }
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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;
        }
Beispiel #4
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);
 }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
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)
        {
            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);
            }
        }
Beispiel #7
0
        /// <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]);
                    }
                }
            }
        }
Beispiel #8
0
        /// <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]);
                    }
                }
            }
        }
Beispiel #9
0
        /// <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]);
                    }
                }
            }
        }
Beispiel #10
0
 /// <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);