Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / EdmFunction.cs / 2 / EdmFunction.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Common; using System.Diagnostics; using System.Text; namespace System.Data.Metadata.Edm { ////// Class for representing a function /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")] public sealed class EdmFunction : EdmType { #region Constructors internal EdmFunction(string name, string namespaceName, DataSpace dataSpace, EdmFunctionPayload payload) : base(name, namespaceName, dataSpace) { //---- name of the 'schema' //---- this is used by the SQL Gen utility and update pipeline to support generation of the correct function name in the store _schemaName = payload.Schema; _fullName = this.NamespaceName + "." + this.Name; if (payload.ReturnParameter != null) { if (payload.ReturnParameter.Mode != ParameterMode.ReturnValue) { throw EntityUtil.InvalidModeInReturnParameterInFunction("returnParameter"); } _returnParameter = SafeLink.BindChild (this, FunctionParameter.DeclaringFunctionLinker, payload.ReturnParameter); } if (payload.IsAggregate.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.Aggregate, payload.IsAggregate.Value); if (payload.IsBuiltIn.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.BuiltIn, payload.IsBuiltIn.Value); if (payload.IsNiladic.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.NiladicFunction, payload.IsNiladic.Value); if (payload.IsComposable.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.IsComposable, payload.IsComposable.Value); if (payload.IsFromProviderManifest.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.IsFromProviderManifest, payload.IsFromProviderManifest.Value); if (payload.IsCachedStoreFunction.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.IsCachedStoreFunction, payload.IsCachedStoreFunction.Value); if (payload.ParameterTypeSemantics.HasValue) { _parameterTypeSemantics = payload.ParameterTypeSemantics.Value; } if (payload.StoreFunctionName != null) { _storeFunctionNameAttribute = payload.StoreFunctionName; } if (payload.EntitySet != null) { _entitySet = payload.EntitySet; } if (payload.CommandText != null) { _commandTextAttribute = payload.CommandText; } if (payload.Parameters != null) { // validate the parameters foreach (FunctionParameter parameter in payload.Parameters) { if (parameter == null) { throw EntityUtil.CollectionParameterElementIsNull("parameters"); } if (parameter.Mode == ParameterMode.ReturnValue) { throw EntityUtil.InvalidModeInParameterInFunction("parameters"); } } // Populate the parameters _parameters = new SafeLinkCollection (this, FunctionParameter.DeclaringFunctionLinker, new MetadataCollection (payload.Parameters)); } else { _parameters = new ReadOnlyMetadataCollection (new MetadataCollection ()); } } #endregion #region Fields private readonly FunctionParameter _returnParameter; private readonly ReadOnlyMetadataCollection _parameters; private readonly FunctionAttributes _functionAttributes = FunctionAttributes.Default; private readonly string _storeFunctionNameAttribute; private readonly ParameterTypeSemantics _parameterTypeSemantics; private readonly string _commandTextAttribute; private readonly string _schemaName; private readonly EntitySet _entitySet; private readonly string _fullName; #endregion #region Properties /// /// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.EdmFunction; } } ////// Returns the full name of this type, which is namespace + "." + name. /// public override string FullName { get { return _fullName; } } ////// Gets the collection of parameters /// public ReadOnlyMetadataCollectionParameters { get { return _parameters; } } /// /// we now cache the store type function in the edmItemCollection, but the sqlGen thinks any function /// in edmItemCollection is canonical function, so this is a flag to seperate these two /// internal bool IsCachedStoreFunction { get { return GetFunctionAttribute(FunctionAttributes.IsCachedStoreFunction); } } ////// For function imports, optionally indicates the entity set to which the import is bound. /// [MetadataProperty(BuiltInTypeKind.EntitySet, false)] internal EntitySet EntitySet { get { return _entitySet; } } ////// Gets the return parameter of this function /// ///Thrown iif value passed into setter is null ///Thrown if the Function instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.FunctionParameter, false)] public FunctionParameter ReturnParameter { get { return _returnParameter; } } [MetadataProperty(PrimitiveTypeKind.String, false)] internal string StoreFunctionNameAttribute { get { return _storeFunctionNameAttribute; } } [MetadataProperty(typeof(ParameterTypeSemantics), false)] internal ParameterTypeSemantics ParameterTypeSemanticsAttribute { get { return _parameterTypeSemantics; } } // Function attribute parameters [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool AggregateAttribute { get { return GetFunctionAttribute(FunctionAttributes.Aggregate); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool BuiltInAttribute { get { return GetFunctionAttribute(FunctionAttributes.BuiltIn); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool IsFromProviderManifest { get { return GetFunctionAttribute(FunctionAttributes.IsFromProviderManifest); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool NiladicFunctionAttribute { get { return GetFunctionAttribute(FunctionAttributes.NiladicFunction); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool IsComposableAttribute { get { return GetFunctionAttribute(FunctionAttributes.IsComposable); } } [MetadataProperty(PrimitiveTypeKind.String, false)] internal string CommandTextAttribute { get { return _commandTextAttribute; } } [MetadataProperty(PrimitiveTypeKind.String, false)] internal string Schema { get { return _schemaName; } } #endregion #region Methods ////// Sets this item to be readonly, once this is set, the item will never be writable again. /// internal override void SetReadOnly() { if (!IsReadOnly) { base.SetReadOnly(); this.Parameters.Source.SetReadOnly(); FunctionParameter returnParameter = ReturnParameter; if (returnParameter != null) { returnParameter.SetReadOnly(); } } } internal override void BuildIdentity(StringBuilder builder) { // If we've already cached the identity, simply append it if (null != CacheIdentity) { builder.Append(CacheIdentity); return; } EdmFunction.BuildIdentity(builder, FullName, Parameters); } internal static string BuildIdentity(string functionName, IEnumerablefunctionParameters) { StringBuilder identity = new StringBuilder(); BuildIdentity(identity, functionName, functionParameters); return identity.ToString(); } private static void BuildIdentity(StringBuilder builder, string functionName, IEnumerable functionParameters) { builder.Append(functionName); // Construct the string that represent the list of parameters first builder.Append('('); bool first = true; foreach (FunctionParameter parameter in functionParameters) { if (first) { first = false; } else { builder.Append(","); } builder.Append(Helper.ToString(parameter.Mode)); builder.Append(' '); parameter.TypeUsage.BuildIdentity(builder); } builder.Append(')'); } private static void BuildIdentity(StringBuilder builder, string functionName, IEnumerable functionParameters) { builder.Append(functionName); // Construct the string that represent the list of parameters first builder.Append('('); bool first = true; foreach (EdmType parameter in functionParameters) { if (first) { first = false; } else { builder.Append(","); } // For EdmType,always assume In Mode builder.Append(ParameterMode.In); builder.Append(' '); TypeUsage.Create(parameter).BuildIdentity(builder); } builder.Append(')'); } private bool GetFunctionAttribute(FunctionAttributes attribute) { return attribute == (attribute & _functionAttributes); } private static void SetFunctionAttribute(ref FunctionAttributes field, FunctionAttributes attribute, bool isSet) { if (isSet) { // make sure that attribute bits are set to 1 field |= attribute; } else { // make sure that attribute bits are set to 0 field ^= field & attribute; } } #endregion #region Nested types [Flags] private enum FunctionAttributes : byte { None = 0, Aggregate = 1, BuiltIn = 2, NiladicFunction = 4, IsComposable = 8, IsFromProviderManifest = 16, IsCachedStoreFunction = 32, Default = IsComposable, } #endregion } internal struct EdmFunctionPayload { public string Name; public string NamespaceName; public string Schema; public string StoreFunctionName; public string CommandText; public EntitySet EntitySet; public bool? IsAggregate; public bool? IsBuiltIn; public bool? IsNiladic; public bool? IsComposable; public bool? IsFromProviderManifest; public bool? IsCachedStoreFunction; public FunctionParameter ReturnParameter; public ParameterTypeSemantics? ParameterTypeSemantics; public FunctionParameter[] Parameters; public DataSpace DataSpace; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Common; using System.Diagnostics; using System.Text; namespace System.Data.Metadata.Edm { ////// Class for representing a function /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")] public sealed class EdmFunction : EdmType { #region Constructors internal EdmFunction(string name, string namespaceName, DataSpace dataSpace, EdmFunctionPayload payload) : base(name, namespaceName, dataSpace) { //---- name of the 'schema' //---- this is used by the SQL Gen utility and update pipeline to support generation of the correct function name in the store _schemaName = payload.Schema; _fullName = this.NamespaceName + "." + this.Name; if (payload.ReturnParameter != null) { if (payload.ReturnParameter.Mode != ParameterMode.ReturnValue) { throw EntityUtil.InvalidModeInReturnParameterInFunction("returnParameter"); } _returnParameter = SafeLink.BindChild (this, FunctionParameter.DeclaringFunctionLinker, payload.ReturnParameter); } if (payload.IsAggregate.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.Aggregate, payload.IsAggregate.Value); if (payload.IsBuiltIn.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.BuiltIn, payload.IsBuiltIn.Value); if (payload.IsNiladic.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.NiladicFunction, payload.IsNiladic.Value); if (payload.IsComposable.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.IsComposable, payload.IsComposable.Value); if (payload.IsFromProviderManifest.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.IsFromProviderManifest, payload.IsFromProviderManifest.Value); if (payload.IsCachedStoreFunction.HasValue) SetFunctionAttribute(ref _functionAttributes, FunctionAttributes.IsCachedStoreFunction, payload.IsCachedStoreFunction.Value); if (payload.ParameterTypeSemantics.HasValue) { _parameterTypeSemantics = payload.ParameterTypeSemantics.Value; } if (payload.StoreFunctionName != null) { _storeFunctionNameAttribute = payload.StoreFunctionName; } if (payload.EntitySet != null) { _entitySet = payload.EntitySet; } if (payload.CommandText != null) { _commandTextAttribute = payload.CommandText; } if (payload.Parameters != null) { // validate the parameters foreach (FunctionParameter parameter in payload.Parameters) { if (parameter == null) { throw EntityUtil.CollectionParameterElementIsNull("parameters"); } if (parameter.Mode == ParameterMode.ReturnValue) { throw EntityUtil.InvalidModeInParameterInFunction("parameters"); } } // Populate the parameters _parameters = new SafeLinkCollection (this, FunctionParameter.DeclaringFunctionLinker, new MetadataCollection (payload.Parameters)); } else { _parameters = new ReadOnlyMetadataCollection (new MetadataCollection ()); } } #endregion #region Fields private readonly FunctionParameter _returnParameter; private readonly ReadOnlyMetadataCollection _parameters; private readonly FunctionAttributes _functionAttributes = FunctionAttributes.Default; private readonly string _storeFunctionNameAttribute; private readonly ParameterTypeSemantics _parameterTypeSemantics; private readonly string _commandTextAttribute; private readonly string _schemaName; private readonly EntitySet _entitySet; private readonly string _fullName; #endregion #region Properties /// /// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.EdmFunction; } } ////// Returns the full name of this type, which is namespace + "." + name. /// public override string FullName { get { return _fullName; } } ////// Gets the collection of parameters /// public ReadOnlyMetadataCollectionParameters { get { return _parameters; } } /// /// we now cache the store type function in the edmItemCollection, but the sqlGen thinks any function /// in edmItemCollection is canonical function, so this is a flag to seperate these two /// internal bool IsCachedStoreFunction { get { return GetFunctionAttribute(FunctionAttributes.IsCachedStoreFunction); } } ////// For function imports, optionally indicates the entity set to which the import is bound. /// [MetadataProperty(BuiltInTypeKind.EntitySet, false)] internal EntitySet EntitySet { get { return _entitySet; } } ////// Gets the return parameter of this function /// ///Thrown iif value passed into setter is null ///Thrown if the Function instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.FunctionParameter, false)] public FunctionParameter ReturnParameter { get { return _returnParameter; } } [MetadataProperty(PrimitiveTypeKind.String, false)] internal string StoreFunctionNameAttribute { get { return _storeFunctionNameAttribute; } } [MetadataProperty(typeof(ParameterTypeSemantics), false)] internal ParameterTypeSemantics ParameterTypeSemanticsAttribute { get { return _parameterTypeSemantics; } } // Function attribute parameters [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool AggregateAttribute { get { return GetFunctionAttribute(FunctionAttributes.Aggregate); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool BuiltInAttribute { get { return GetFunctionAttribute(FunctionAttributes.BuiltIn); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool IsFromProviderManifest { get { return GetFunctionAttribute(FunctionAttributes.IsFromProviderManifest); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool NiladicFunctionAttribute { get { return GetFunctionAttribute(FunctionAttributes.NiladicFunction); } } [MetadataProperty(PrimitiveTypeKind.Boolean, false)] internal bool IsComposableAttribute { get { return GetFunctionAttribute(FunctionAttributes.IsComposable); } } [MetadataProperty(PrimitiveTypeKind.String, false)] internal string CommandTextAttribute { get { return _commandTextAttribute; } } [MetadataProperty(PrimitiveTypeKind.String, false)] internal string Schema { get { return _schemaName; } } #endregion #region Methods ////// Sets this item to be readonly, once this is set, the item will never be writable again. /// internal override void SetReadOnly() { if (!IsReadOnly) { base.SetReadOnly(); this.Parameters.Source.SetReadOnly(); FunctionParameter returnParameter = ReturnParameter; if (returnParameter != null) { returnParameter.SetReadOnly(); } } } internal override void BuildIdentity(StringBuilder builder) { // If we've already cached the identity, simply append it if (null != CacheIdentity) { builder.Append(CacheIdentity); return; } EdmFunction.BuildIdentity(builder, FullName, Parameters); } internal static string BuildIdentity(string functionName, IEnumerablefunctionParameters) { StringBuilder identity = new StringBuilder(); BuildIdentity(identity, functionName, functionParameters); return identity.ToString(); } private static void BuildIdentity(StringBuilder builder, string functionName, IEnumerable functionParameters) { builder.Append(functionName); // Construct the string that represent the list of parameters first builder.Append('('); bool first = true; foreach (FunctionParameter parameter in functionParameters) { if (first) { first = false; } else { builder.Append(","); } builder.Append(Helper.ToString(parameter.Mode)); builder.Append(' '); parameter.TypeUsage.BuildIdentity(builder); } builder.Append(')'); } private static void BuildIdentity(StringBuilder builder, string functionName, IEnumerable functionParameters) { builder.Append(functionName); // Construct the string that represent the list of parameters first builder.Append('('); bool first = true; foreach (EdmType parameter in functionParameters) { if (first) { first = false; } else { builder.Append(","); } // For EdmType,always assume In Mode builder.Append(ParameterMode.In); builder.Append(' '); TypeUsage.Create(parameter).BuildIdentity(builder); } builder.Append(')'); } private bool GetFunctionAttribute(FunctionAttributes attribute) { return attribute == (attribute & _functionAttributes); } private static void SetFunctionAttribute(ref FunctionAttributes field, FunctionAttributes attribute, bool isSet) { if (isSet) { // make sure that attribute bits are set to 1 field |= attribute; } else { // make sure that attribute bits are set to 0 field ^= field & attribute; } } #endregion #region Nested types [Flags] private enum FunctionAttributes : byte { None = 0, Aggregate = 1, BuiltIn = 2, NiladicFunction = 4, IsComposable = 8, IsFromProviderManifest = 16, IsCachedStoreFunction = 32, Default = IsComposable, } #endregion } internal struct EdmFunctionPayload { public string Name; public string NamespaceName; public string Schema; public string StoreFunctionName; public string CommandText; public EntitySet EntitySet; public bool? IsAggregate; public bool? IsBuiltIn; public bool? IsNiladic; public bool? IsComposable; public bool? IsFromProviderManifest; public bool? IsCachedStoreFunction; public FunctionParameter ReturnParameter; public ParameterTypeSemantics? ParameterTypeSemantics; public FunctionParameter[] Parameters; public DataSpace DataSpace; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GatewayDefinition.cs
- RowCache.cs
- ProjectedSlot.cs
- UrlMapping.cs
- Int32Rect.cs
- RetrieveVirtualItemEventArgs.cs
- relpropertyhelper.cs
- Main.cs
- OdbcFactory.cs
- MetadataArtifactLoader.cs
- ScheduleChanges.cs
- fixedPageContentExtractor.cs
- Parser.cs
- WorkflowMarkupSerializationProvider.cs
- LinearQuaternionKeyFrame.cs
- MultiView.cs
- Point.cs
- WindowProviderWrapper.cs
- CheckBoxStandardAdapter.cs
- DrawingBrush.cs
- ContentHostHelper.cs
- AppModelKnownContentFactory.cs
- MessageFormatterConverter.cs
- COM2TypeInfoProcessor.cs
- _Rfc2616CacheValidators.cs
- ContentType.cs
- WhiteSpaceTrimStringConverter.cs
- XmlStreamNodeWriter.cs
- ToolStripContentPanelRenderEventArgs.cs
- GeneralTransform2DTo3DTo2D.cs
- VerbConverter.cs
- StringWriter.cs
- FormDesigner.cs
- TypeBrowser.xaml.cs
- SqlIdentifier.cs
- GeometryCombineModeValidation.cs
- BuildProvidersCompiler.cs
- EncodedStreamFactory.cs
- AllMembershipCondition.cs
- BevelBitmapEffect.cs
- TextChangedEventArgs.cs
- RankException.cs
- InfocardExtendedInformationEntry.cs
- SafeProcessHandle.cs
- DBConnection.cs
- CryptoProvider.cs
- BufferedReadStream.cs
- X509SecurityTokenParameters.cs
- SimpleFieldTemplateFactory.cs
- ToolStripDropDownMenu.cs
- ProfilePropertySettings.cs
- AvTraceFormat.cs
- RuleElement.cs
- ScriptBehaviorDescriptor.cs
- CubicEase.cs
- RouteValueDictionary.cs
- CounterSampleCalculator.cs
- TrackBarDesigner.cs
- HostedAspNetEnvironment.cs
- ComponentEditorPage.cs
- MenuItem.cs
- EntityDataSourceEntitySetNameItem.cs
- BindableTemplateBuilder.cs
- OutputScopeManager.cs
- Journaling.cs
- HostingPreferredMapPath.cs
- FactoryRecord.cs
- MetadataArtifactLoaderCompositeResource.cs
- DependencySource.cs
- XmlEventCache.cs
- HostSecurityManager.cs
- XmlEncodedRawTextWriter.cs
- WrapPanel.cs
- ParseNumbers.cs
- BeginEvent.cs
- GridViewHeaderRowPresenter.cs
- PolyLineSegmentFigureLogic.cs
- TextSpanModifier.cs
- Win32KeyboardDevice.cs
- KeyedHashAlgorithm.cs
- COM2Enum.cs
- XamlToRtfParser.cs
- OleDbConnectionInternal.cs
- HttpApplicationStateBase.cs
- PointCollectionConverter.cs
- ParsedRoute.cs
- COSERVERINFO.cs
- MenuItemCollectionEditor.cs
- WindowsButton.cs
- InvokeHandlers.cs
- DesignerSerializerAttribute.cs
- ContentPosition.cs
- EnvelopedPkcs7.cs
- ClientSponsor.cs
- SmtpClient.cs
- invalidudtexception.cs
- XmlSchemaAttributeGroupRef.cs
- Interlocked.cs
- StaticSiteMapProvider.cs
- _Rfc2616CacheValidators.cs