private DataServiceProtocolVersion CalculateExpectedClientMinRequestVersion(ODataUri odataUri, out ExpectedClientErrorBaseline errorIfTooLow) { ExceptionUtilities.CheckArgumentNotNull(odataUri, "odataUri"); DataServiceProtocolVersion expectedVersion = DataServiceProtocolVersion.V4; errorIfTooLow = null; // Uri specific processing if (odataUri.HasAnyOrAllInFilter()) { expectedVersion = VersionHelper.IncreaseVersionIfRequired(expectedVersion, DataServiceProtocolVersion.V4); string anyOrAll = string.Empty; if (odataUri.Filter.Contains("/any(")) { anyOrAll = "Any"; } else { anyOrAll = "All"; } var errorInformation = new ExpectedErrorMessage("ALinq_MethodNotSupportedForMaxDataServiceVersionLessThanX", anyOrAll, expectedVersion.ConvertToHeaderFormat()); errorIfTooLow = new ExpectedClientErrorBaseline(typeof(NotSupportedException), false, errorInformation); } if (odataUri.HasSignificantTypeSegmentInPath()) { // TODO: this seems like it should be inferred from the query, not the uri expectedVersion = VersionHelper.IncreaseVersionIfRequired(expectedVersion, DataServiceProtocolVersion.V4); var errorInformation = new ExpectedErrorMessage("ALinq_MethodNotSupportedForMaxDataServiceVersionLessThanX", "OfType", expectedVersion.ConvertToHeaderFormat()); errorIfTooLow = new ExpectedClientErrorBaseline(typeof(NotSupportedException), false, errorInformation); } else if (odataUri.HasTypeSegmentInExpandOrSelect()) { // TODO: this seems like it should be inferred from the query, not the uri expectedVersion = VersionHelper.IncreaseVersionIfRequired(expectedVersion, DataServiceProtocolVersion.V4); var errorInformation = new ExpectedErrorMessage("ALinq_TypeAsNotSupportedForMaxDataServiceVersionLessThan3"); errorIfTooLow = new ExpectedClientErrorBaseline(typeof(NotSupportedException), false, errorInformation); } return(expectedVersion); }
internal static DataServiceProtocolVersion CalculateUriMinRequestProtocolVersion(ODataUri requestUri, string contentType, DataServiceProtocolVersion maxProtocolVersion, DataServiceProtocolVersion maxDataServiceVersion) { DataServiceProtocolVersion expectedVersion = DataServiceProtocolVersion.V4; string inlineCount; if (requestUri.TryGetInlineCountValue(out inlineCount)) { expectedVersion = expectedVersion.IncreaseVersionIfRequired(DataServiceProtocolVersion.V4); } if (requestUri.SelectSegments.Count > 0) { expectedVersion = expectedVersion.IncreaseVersionIfRequired(DataServiceProtocolVersion.V4); } if (requestUri.HasAnyOrAllInFilter()) { expectedVersion = expectedVersion.IncreaseVersionIfRequired(DataServiceProtocolVersion.V4); } if (requestUri.IsCount()) { expectedVersion = expectedVersion.IncreaseVersionIfRequired(DataServiceProtocolVersion.V4); } else if (requestUri.IsProperty()) { var propertySegment = requestUri.LastSegment as PropertySegment; expectedVersion = expectedVersion.IncreaseVersionIfRequired(propertySegment.Property.CalculateProtocolVersion()); } else { EntitySet expectedEntitySet = null; if (requestUri.TryGetExpectedEntitySet(out expectedEntitySet)) { List <DataServiceProtocolVersion> dataServiceProtocolVersions = GetEntityTypes(expectedEntitySet).Select(et => et.CalculateEntityPropertyMappingProtocolVersion(VersionCalculationType.Request, contentType, maxProtocolVersion, maxDataServiceVersion)).ToList(); dataServiceProtocolVersions.Add(expectedVersion); expectedVersion = VersionHelper.GetMaximumVersion(dataServiceProtocolVersions.ToArray()); } } return(expectedVersion); }