예제 #1
0
 /// <summary>
 /// 常量转换字符串
 /// </summary>
 /// <param name="sqlStream">SQL字符流</param>
 /// <param name="value">常量</param>
 private void convertConstant(charStream sqlStream, DateTime value)
 {
     sqlStream.PrepLength(fastCSharp.date.SqlMillisecondSize + 2);
     sqlStream.UnsafeWrite('\'');
     fastCSharp.date.ToSqlMillisecond((DateTime)value, sqlStream);
     sqlStream.UnsafeWrite('\'');
 }
예제 #2
0
 /// <summary>
 /// 字符串
 /// </summary>
 /// <param name="value">字符串</param>
 /// <param name="jsonStream">JSON输出流</param>
 public static void ToString(string value, charStream jsonStream)
 {
     jsonStream.PrepLength(value.Length + 2);
     jsonStream.UnsafeWrite(Quote);
     jsonStream.UnsafeWrite(value);
     jsonStream.UnsafeWrite(Quote);
 }
예제 #3
0
 /// <summary>
 /// 字符串
 /// </summary>
 /// <param name="value">字符串</param>
 /// <param name="jsonStream">JSON输出流</param>
 public static void ToString(ref subString value, charStream jsonStream)
 {
     if (value.value == null)
     {
         WriteNull(jsonStream);
     }
     else
     {
         jsonStream.PrepLength(value.Length + 2);
         jsonStream.UnsafeWrite(Quote);
         jsonStream.Write(ref value);
         jsonStream.UnsafeWrite(Quote);
     }
 }
예제 #4
0
 /// <summary>
 /// 数字转换成字符串
 /// </summary>
 /// <param name="value">数字值</param>
 /// <param name="jsonStream">JSON输出流</param>
 /// <param name="isMaxToString">超出最大有效精度是否转换成字符串</param>
 public unsafe static void ToString(ulong value, charStream jsonStream, bool isMaxToString = true)
 {
     if (value <= maxValue || !isMaxToString)
     {
         toString(value, jsonStream);
     }
     else
     {
         jsonStream.PrepLength(22 + 2);
         jsonStream.UnsafeWrite(Quote);
         number.UnsafeToString(value, jsonStream);
         jsonStream.UnsafeWrite(Quote);
     }
 }
예제 #5
0
 /// <summary>
 /// 时间转字符串
 /// </summary>
 /// <param name="time">时间</param>
 /// <param name="jsonStream">JSON输出流</param>
 public static unsafe void ToStringNotNull(DateTime time, charStream jsonStream)
 {
     jsonStream.PrepLength(DateStart.Length + (19 + 1));
     jsonStream.UnsafeSimpleWrite(DateStart);
     toString((long)(((time.Kind == DateTimeKind.Utc ? time.Ticks + pub.LocalTimeTicks : time.Ticks) - JavascriptLocalMinTimeTicks) / date.MillisecondTicks), jsonStream);
     jsonStream.UnsafeWrite(DateEnd);
 }
예제 #6
0
 /// <summary>
 /// 时间转字符串 第三方格式 /Date(xxx)/
 /// </summary>
 /// <param name="time">时间</param>
 /// <param name="jsonStream">JSON输出流</param>
 public static unsafe void ToStringOther(DateTime time, charStream jsonStream)
 {
     jsonStream.PrepLength(OtherDateStart.Length + (19 + 1 + 4));
     jsonStream.UnsafeWrite(fastCSharp.web.ajax.Quote);
     jsonStream.UnsafeSimpleWrite(OtherDateStart);
     toString((long)(((time.Kind == DateTimeKind.Utc ? time.Ticks + pub.LocalTimeTicks : time.Ticks) - JavascriptLocalMinTimeTicks) / date.MillisecondTicks), jsonStream);
     *(long *)jsonStream.CurrentChar = DateEnd + ('/' << 16) + ((long)fastCSharp.web.ajax.Quote << 32);
     jsonStream.UnsafeAddLength(3);
 }
예제 #7
0
 /// <summary>
 /// 数字转换成字符串
 /// </summary>
 /// <param name="value">数字值</param>
 /// <param name="jsonStream">JSON输出流</param>
 public unsafe static void ToString(short value, charStream jsonStream)
 {
     if (value >= 0)
     {
         ToString((ushort)value, jsonStream);
     }
     else
     {
         jsonStream.PrepLength(7);
         jsonStream.UnsafeWrite('-');
         ToString((ushort)-value, jsonStream);
     }
 }
예제 #8
0
 /// <summary>
 /// 数字转换成字符串
 /// </summary>
 /// <param name="value"></param>
 /// <param name="jsonStream"></param>
 private unsafe static void toString(long value, charStream jsonStream)
 {
     if (value >= 0)
     {
         toString((ulong)value, jsonStream);
     }
     else
     {
         jsonStream.PrepLength(19);
         jsonStream.UnsafeWrite('-');
         toString((ulong)-value, jsonStream);
     }
 }
예제 #9
0
        /// <summary>
        /// SQL语句字符串格式化(单引号变两个)
        /// </summary>
        /// <param name="sqlStream">SQL字符流</param>
        /// <param name="value">常量</param>
        protected virtual unsafe void convertString(charStream sqlStream, string value)
        {
            fixed(char *valueFixed = value)
            {
                int length = 0;

                for (char *start = valueFixed, end = valueFixed + value.Length; start != end; ++start)
                {
                    if (*start == '\'')
                    {
                        ++length;
                    }
                    else if (*start == '\\')
                    {
                        if ((*(start + 1) == '\r' || *(start + 1) == '\n') && (int)(end - start) >= 2)
                        {
                            length += 2;
                            ++start;
                        }
                    }
                }
                if (length == 0)
                {
                    sqlStream.PrepLength(value.Length + 2);
                    sqlStream.UnsafeWrite('\'');
                    sqlStream.WriteNotNull(value);
                    sqlStream.UnsafeWrite('\'');
                    return;
                }
                sqlStream.PrepLength((length += value.Length) + 2);
                sqlStream.UnsafeWrite('\'');
                byte *write = (byte *)sqlStream.CurrentChar;

                for (char *start = valueFixed, end = valueFixed + value.Length; start != end; ++start)
                {
                    if (*start != '\'')
                    {
                        if (*start == '\\')
                        {
                            if (*(start + 1) == '\n')
                            {
                                if ((int)(end - start) >= 2)
                                {
                                    *(long *)write = '\\' + ('\\' << 16) + ((long)'\n' << 32) + ((long)'\n' << 48);
                                    ++start;
                                    write += sizeof(long);
                                    continue;
                                }
                            }
                            else if (*(start + 1) == '\r' && (int)(end - start) >= 2)
                            {
                                *(long *)write = '\\' + ('\\' << 16) + ((long)'\n' << 32) + ((long)'\r' << 48);
                                ++start;
                                write += sizeof(long);
                                continue;
                            }
                        }
                        *(char *)write = *start;
                        write         += sizeof(char);
                    }
                    else
                    {
                        *(int *)write = ('\'' << 16) + '\'';
                        write        += sizeof(int);
                    }
                }
                sqlStream.UnsafeAddLength(length);
                sqlStream.UnsafeWrite('\'');
            }
        }