// internal for testing internal FunctionParameter CreateReturnParameter( FunctionDetailsRowView functionDetailsRow, Dictionary<string, RowType> tvfReturnTypes, List<EdmSchemaError> errors) { Debug.Assert(functionDetailsRow != null, "functionDetailsRow != null"); Debug.Assert(tvfReturnTypes != null, "tvfReturnTypes != null"); Debug.Assert(errors != null, "errors != null"); EdmType returnType = null; if (functionDetailsRow.ReturnType != null) { bool excludedForVersion; returnType = GetStorePrimitiveTypeForVersion(functionDetailsRow.ReturnType, out excludedForVersion); if (returnType == null) { errors.Add( new EdmSchemaError( string.Format( CultureInfo.InvariantCulture, excludedForVersion ? Resources_VersioningFacade.UnsupportedFunctionReturnDataTypeForTarget : Resources_VersioningFacade.UnsupportedFunctionReturnDataType, functionDetailsRow.ProcedureName, functionDetailsRow.ReturnType), (int)ModelBuilderErrorCode.UnsupportedType, EdmSchemaErrorSeverity.Warning)); } } else if (functionDetailsRow.IsTvf) { RowType rowType; if (tvfReturnTypes.TryGetValue(functionDetailsRow.GetMostQualifiedFunctionName(), out rowType) && !MetadataItemHelper.HasSchemaErrors(rowType)) { returnType = rowType.GetCollectionType(); } else { errors.Add( new EdmSchemaError( string.Format( CultureInfo.InvariantCulture, Resources_VersioningFacade.TableReferencedByTvfWasNotFound, functionDetailsRow.GetMostQualifiedFunctionName()), (int)ModelBuilderErrorCode.MissingTvfReturnTable, EdmSchemaErrorSeverity.Warning)); // invalid row types will not be serialized so // reassign errors to the parent TVF definition if (rowType != null) { errors.AddRange(MetadataItemHelper.GetSchemaErrors(rowType)); } } } return returnType != null ? FunctionParameter.Create("ReturnType", returnType, ParameterMode.ReturnValue) : null; }