Beispiel #1
0
        /// <summary>
        /// Warning: adds new parameters to the argument by side-effect, as well as mutating the query string!
        /// </summary>
        private string ExpandParameterList(string query, string name, TypedValue typedList, IDictionary <string, TypedValue> namedParamsCopy)
        {
            var vals = (IEnumerable)typedList.Value;
            var type = typedList.Type;

            var typedValues = (from object value in vals
                               select new TypedValue(type, value, session.EntityMode))
                              .ToList();

            if (typedValues.Count == 1)
            {
                namedParamsCopy[name] = typedValues[0];
                return(query);
            }

            var isJpaPositionalParam = parameterMetadata.GetNamedParameterDescriptor(name).JpaStyle;
            var aliases = new string[typedValues.Count];

            for (var index = 0; index < typedValues.Count; index++)
            {
                var value = typedValues[index];
                var alias = (isJpaPositionalParam ? 'x' + name : name + StringHelper.Underscore) + index + StringHelper.Underscore;
                namedParamsCopy[alias] = value;
                aliases[index]         = ParserHelper.HqlVariablePrefix + alias;
            }

            var paramPrefix = isJpaPositionalParam ? StringHelper.SqlParameter : ParserHelper.HqlVariablePrefix;

            return(StringHelper.Replace(query, paramPrefix + name, string.Join(StringHelper.CommaSpace, aliases), true));
        }
        /// <summary>
        /// Warning: adds new parameters to the argument by side-effect, as well as mutating the query string!
        /// </summary>
        private string ExpandParameterList(string query, string name, TypedValue typedList, IDictionary <string, TypedValue> namedParamsCopy)
        {
            var   vals = (ICollection)typedList.Value;
            IType type = typedList.Type;

            if (vals.Count == 1)
            {
                // short-circuit for performance...
                IEnumerator iter = vals.GetEnumerator();
                iter.MoveNext();
                namedParamsCopy[name] = new TypedValue(type, iter.Current, session.EntityMode);
                return(query);
            }

            var  list = new StringBuilder(16);
            int  i    = 0;
            bool isJpaPositionalParam = parameterMetadata.GetNamedParameterDescriptor(name).JpaStyle;

            foreach (object obj in vals)
            {
                if (i > 0)
                {
                    list.Append(StringHelper.CommaSpace);
                }

                string alias = (isJpaPositionalParam ? 'x' + name : name + StringHelper.Underscore) + i++ + StringHelper.Underscore;
                namedParamsCopy[alias] = new TypedValue(type, obj, session.EntityMode);
                list.Append(ParserHelper.HqlVariablePrefix).Append(alias);
            }
            string paramPrefix = isJpaPositionalParam ? StringHelper.SqlParameter : ParserHelper.HqlVariablePrefix;

            return(StringHelper.Replace(query, paramPrefix + name, list.ToString(), true));
        }