/// <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)); }