EdmFunction.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / EdmFunction.cs / 1 / 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 ReadOnlyMetadataCollection Parameters
        { 
            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, IEnumerable functionParameters)
        { 
            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 ReadOnlyMetadataCollection Parameters
        { 
            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, IEnumerable functionParameters)
        { 
            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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK