private static ObjectParameterCollection MergeParameters( ObjectParameterCollection query1Params, ObjectParameterCollection query2Params) { if (query1Params == null && query2Params == null) { return((ObjectParameterCollection)null); } ObjectParameterCollection parameterCollection1; ObjectParameterCollection parameterCollection2; if (query1Params != null) { parameterCollection1 = ObjectParameterCollection.DeepCopy(query1Params); parameterCollection2 = query2Params; } else { parameterCollection1 = ObjectParameterCollection.DeepCopy(query2Params); parameterCollection2 = query1Params; } if (parameterCollection2 != null) { foreach (ObjectParameter objectParameter in parameterCollection2) { parameterCollection1.Add(objectParameter.ShallowCopy()); } } return(parameterCollection1); }
/// <summary> /// Merges <see cref="ObjectParameter"/>s from two ObjectQuery arguments to SetOp builder methods (Except, Intersect, Union, UnionAll). /// A new <see cref="ObjectParameterCollection"/> is returned that contains copies of parameters from both <paramref name="query1Params"/> and <paramref name="query2Params"/>. /// </summary> /// <param name="query1Params">ObjectParameters from the first ObjectQuery argument (on which the query builder method was called)</param> /// <param name="query2Params">ObjectParameters from the second ObjectQuery argument (specified as an argument to the builder method)</param> /// <returns>A new ObjectParameterCollection containing copies of all parameters</returns> private static ObjectParameterCollection MergeParameters(ObjectParameterCollection query1Params, ObjectParameterCollection query2Params) { if (query1Params == null && query2Params == null) { return(null); } ObjectParameterCollection mergedParams; ObjectParameterCollection sourceParams; if (query1Params != null) { mergedParams = ObjectParameterCollection.DeepCopy(query1Params); sourceParams = query2Params; } else { mergedParams = ObjectParameterCollection.DeepCopy(query2Params); sourceParams = query1Params; } if (sourceParams != null) { foreach (ObjectParameter sourceParam in sourceParams) { mergedParams.Add(sourceParam.ShallowCopy()); } } return(mergedParams); }
internal static ObjectQueryState OfType(ObjectQueryState query, EdmType newType, Type clrOfType) { Debug.Assert(newType != null, "OfType cannot be null"); Debug.Assert(Helper.IsEntityType(newType) || Helper.IsComplexType(newType), "OfType must be Entity or Complex type"); string queryText = GetCommandText(query); // Build the new query string - "OFTYPE((<query>), [<type namespace>].[<type name>])" int queryLength = _ofTypeProlog.Length + queryText.Length + _ofTypeInfix.Length + newType.NamespaceName.Length + (newType.NamespaceName != string.Empty ? _ofTypeInfix2.Length : 0) + newType.Name.Length + _ofTypeEpilog.Length; StringBuilder builder = new StringBuilder(queryLength); builder.Append(_ofTypeProlog); builder.Append(queryText); builder.Append(_ofTypeInfix); if (newType.NamespaceName != string.Empty) { builder.Append(newType.NamespaceName); builder.Append(_ofTypeInfix2); } builder.Append(newType.Name); builder.Append(_ofTypeEpilog); // Create a new EntitySqlQueryImplementation that uses the new query as its command text. // Span is carried over, no adjustment is needed return(NewBuilderQuery(query, clrOfType, builder, query.Span, ObjectParameterCollection.DeepCopy(query.Parameters))); }
internal static ObjectQueryState Distinct(ObjectQueryState query) { // Build the new query string - "SET(<this query>)" string queryText = GetCommandText(query); StringBuilder builder = new StringBuilder(_distinctProlog.Length + queryText.Length + _distinctEpilog.Length); builder.Append(_distinctProlog); builder.Append(queryText); builder.Append(_distinctEpilog); // Span is carried over, no adjustment is needed return(NewBuilderQuery(query, query.ElementType, builder, query.Span, ObjectParameterCollection.DeepCopy(query.Parameters))); }
private static ObjectParameterCollection MergeParameters( ObjectContext context, ObjectParameterCollection sourceQueryParams, ObjectParameter[] builderMethodParams) { if (sourceQueryParams == null && builderMethodParams.Length == 0) { return((ObjectParameterCollection)null); } ObjectParameterCollection parameterCollection = ObjectParameterCollection.DeepCopy(sourceQueryParams) ?? new ObjectParameterCollection(context.Perspective); foreach (ObjectParameter builderMethodParam in builderMethodParams) { parameterCollection.Add(builderMethodParam); } return(parameterCollection); }
/// <summary> /// Merges <see cref="ObjectParameter"/>s from a source ObjectQuery with ObjectParameters specified as an argument to a builder method. /// A new <see cref="ObjectParameterCollection"/> is returned that contains copies of parameters from both <paramref name="sourceQueryParams"/> and <paramref name="builderMethodParams"/>. /// </summary> /// <param name="context">The <see cref="ObjectContext"/> to use when constructing the new parameter collection</param> /// <param name="sourceQueryParams">ObjectParameters from the ObjectQuery on which the query builder method was called</param> /// <param name="builderMethodParams">ObjectParameters that were specified as an argument to the builder method</param> /// <returns>A new ObjectParameterCollection containing copies of all parameters</returns> private static ObjectParameterCollection MergeParameters(ObjectContext context, ObjectParameterCollection sourceQueryParams, ObjectParameter[] builderMethodParams) { Debug.Assert(builderMethodParams != null, "params array argument should not be null"); if (sourceQueryParams == null && builderMethodParams.Length == 0) { return(null); } ObjectParameterCollection mergedParams = ObjectParameterCollection.DeepCopy(sourceQueryParams); if (mergedParams == null) { mergedParams = new ObjectParameterCollection(context.Perspective); } foreach (ObjectParameter builderParam in builderMethodParams) { mergedParams.Add(builderParam); } return(mergedParams); }
// <summary> // Merges <see cref="ObjectParameter" />s from a source ObjectQuery with ObjectParameters specified as an argument to a builder method. // A new <see cref="ObjectParameterCollection" /> is returned that contains copies of parameters from both // <paramref // name="sourceQueryParams" /> // and <paramref name="builderMethodParams" />. // </summary> // <param name="context"> // The <see cref="ObjectContext" /> to use when constructing the new parameter collection // </param> // <param name="sourceQueryParams"> ObjectParameters from the ObjectQuery on which the query builder method was called </param> // <param name="builderMethodParams"> ObjectParameters that were specified as an argument to the builder method </param> // <returns> A new ObjectParameterCollection containing copies of all parameters </returns> private static ObjectParameterCollection MergeParameters( ObjectContext context, ObjectParameterCollection sourceQueryParams, ObjectParameter[] builderMethodParams) { DebugCheck.NotNull(builderMethodParams); if (sourceQueryParams == null && builderMethodParams.Length == 0) { return(null); } var mergedParams = ObjectParameterCollection.DeepCopy(sourceQueryParams); if (mergedParams == null) { mergedParams = new ObjectParameterCollection(context.Perspective); } foreach (var builderParam in builderMethodParams) { mergedParams.Add(builderParam); } return(mergedParams); }
internal static ObjectQueryState OfType( ObjectQueryState query, EdmType newType, Type clrOfType) { string commandText = EntitySqlQueryBuilder.GetCommandText(query); StringBuilder queryText = new StringBuilder("OFTYPE(\r\n(\r\n".Length + commandText.Length + "\r\n),\r\n[".Length + newType.NamespaceName.Length + (!string.IsNullOrEmpty(newType.NamespaceName) ? "].[".Length : 0) + newType.Name.Length + "]\r\n)".Length); queryText.Append("OFTYPE(\r\n(\r\n"); queryText.Append(commandText); queryText.Append("\r\n),\r\n["); if (!string.IsNullOrEmpty(newType.NamespaceName)) { queryText.Append(newType.NamespaceName); queryText.Append("].["); } queryText.Append(newType.Name); queryText.Append("]\r\n)"); return(EntitySqlQueryBuilder.NewBuilderQuery(query, clrOfType, queryText, query.Span, (IEnumerable <ObjectParameter>)ObjectParameterCollection.DeepCopy(query.Parameters))); }
internal static ObjectQueryState Distinct(ObjectQueryState query) { string commandText = EntitySqlQueryBuilder.GetCommandText(query); StringBuilder queryText = new StringBuilder("SET(\r\n".Length + commandText.Length + "\r\n)".Length); queryText.Append("SET(\r\n"); queryText.Append(commandText); queryText.Append("\r\n)"); return(EntitySqlQueryBuilder.NewBuilderQuery(query, query.ElementType, queryText, query.Span, (IEnumerable <ObjectParameter>)ObjectParameterCollection.DeepCopy(query.Parameters))); }