Beispiel #1
0
        /// <summary>
        /// 预处理:字段值-字典
        /// </summary>
        /// <param name="builder">构造缓存。</param>
        /// <param name="name">字段名称。</param>
        /// <param name="nodeValue">值包装</param>
        /// <param name="i">顺序。</param>
        /// <param name="pIndex">参数顺序。</param>
        /// <returns>返回是否过滤。</returns>
        protected virtual bool PreFieldValue_Dictionary(System.Text.StringBuilder builder, string name, NoSQL.NodeValue nodeValue, ref int i, ref int pIndex)
        {
            if (nodeValue.Type == NoSQL.NodeValueTypes.Null)
            {
                return(false);
            }
            foreach (object item in (System.Collections.IEnumerable)nodeValue.Value)
            {
                string key = FastWrapper.Get(item, "Key") as string;
                if (string.IsNullOrEmpty(key))
                {
                    continue;
                }
                NoSQL.NodeValue value = new NoSQL.NodeValue(FastWrapper.Get(item, "Value"));
                if (
                    string.Equals(key, "$add", System.StringComparison.OrdinalIgnoreCase) ||
                    string.Equals(key, "$+", System.StringComparison.OrdinalIgnoreCase))
                {
                    i++;
                    if (i > 1)
                    {
                        builder.AppendLine(",");
                    }

                    builder.AppendFormat("    {0}={0}+@p{1}", PreName(name), ++pIndex);
                    _fields[name] = value.Value;
                    return(true);
                }
                else if (
                    string.Equals(key, "$minus", System.StringComparison.OrdinalIgnoreCase) ||
                    string.Equals(key, "$-", System.StringComparison.OrdinalIgnoreCase))
                {
                    i++;
                    if (i > 1)
                    {
                        builder.AppendLine(",");
                    }
                    builder.AppendFormat("    {0}={0}-@p{1}", PreName(name), ++pIndex);
                    _fields[name] = value.Value;
                    return(true);
                }
                else if (
                    string.Equals(key, "$now", System.StringComparison.OrdinalIgnoreCase))
                {
                    i++;
                    if (i > 1)
                    {
                        builder.AppendLine(",");
                    }
                    builder.Append("    ").Append(PreName(name)).Append('=').Append(DateTimeNowGrammar());
                    _fields.Remove(name);
                    return(true);
                }
            }
            return(false);
        }
Beispiel #2
0
        /// <summary>
        /// 预处理:字段值
        /// </summary>
        /// <param name="builder">构造缓存。</param>
        /// <param name="name">字段名称。</param>
        /// <param name="value">字段值。</param>
        /// <param name="i">顺序。</param>
        /// <param name="pIndex">参数顺序。</param>
        /// <returns>返回是否过滤。</returns>
        protected virtual bool PreFieldValue(System.Text.StringBuilder builder, string name, object value, ref int i, ref int pIndex)
        {
            var p = value as CommandParameter;

            NoSQL.NodeValue nodeValue = new NoSQL.NodeValue(p == null ? value : p.Value);
            if (nodeValue.Type == NoSQL.NodeValueTypes.Dictionary)
            {
                return(PreFieldValue_Dictionary(builder, name, nodeValue, ref i, ref pIndex));
            }
            if (nodeValue.Type == NoSQL.NodeValueTypes.String)
            {
                return(PreFieldValue_String(builder, name, nodeValue, ref i, ref pIndex));
            }
            return(false);
        }
Beispiel #3
0
        /// <summary>
        /// 预处理:字段值-文本
        /// </summary>
        /// <param name="builder">构造缓存。</param>
        /// <param name="name">字段名称。</param>
        /// <param name="nodeValue">值包装</param>
        /// <param name="i">顺序。</param>
        /// <param name="pIndex">参数顺序。</param>
        /// <returns>返回是否过滤。</returns>
        protected virtual bool PreFieldValue_String(System.Text.StringBuilder builder, string name, NoSQL.NodeValue nodeValue, ref int i, ref int pIndex)
        {
            string text = ((string)nodeValue.Value)?.Trim();

            if (string.IsNullOrEmpty(text))
            {
                return(false);
            }
            if (text.StartsWith("{") && text.EndsWith("}"))
            {
                return(PreFieldValue_Dictionary(builder, name, new NoSQL.NodeValue(JSON.Parse(text)), ref i, ref pIndex));
            }
            return(false);
        }