Ejemplo n.º 1
0
        private DataType ResolvePrimitiveInDataType(DataType dataType, IPrimitiveDataTypeResolver typeResolver)
        {
            var primitiveDataType = dataType as PrimitiveDataType;

            if (primitiveDataType != null)
            {
                return(typeResolver.ResolvePrimitiveType(primitiveDataType));
            }

            var collectionDataType = dataType as CollectionDataType;

            if (collectionDataType != null)
            {
                // using DataTypes.CollectionDataType here will lose nullability information
                return(collectionDataType.WithElementDataType(this.ResolvePrimitiveInDataType(collectionDataType.ElementDataType, typeResolver)));
            }

            var rowDataType = dataType as RowDataType;

            if (rowDataType != null)
            {
                this.FixupProperties(rowDataType.Definition.Properties, typeResolver);
            }

            return(dataType);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the QueryTypeLibrary class.
        /// </summary>
        /// <param name="strategy">The query evaluation strategy</param>
        /// <param name="storeTypeResolver">The store primitive type resolver</param>
        /// <param name="modelTypeResolver">The model primitive type resolver</param>
        public QueryTypeLibrary(IQueryEvaluationStrategy strategy, IPrimitiveDataTypeResolver storeTypeResolver, IPrimitiveDataTypeResolver modelTypeResolver)
        {
            this.evaluationStrategy    = strategy;
            this.storeDataTypeResolver = storeTypeResolver;
            this.modelDataTypeResolver = modelTypeResolver;

            this.getDefaultQueryTypeVisitor = new GetDefaultQueryTypeVisitor(this);
        }
Ejemplo n.º 3
0
 private void FixupParameters(IEnumerable <FunctionParameter> parameters, IPrimitiveDataTypeResolver typeResolver)
 {
     foreach (FunctionParameter parameter in parameters)
     {
         // save the old parameter type
         parameter.Annotations.Add(new TypeSpecificationAnnotation(parameter.DataType));
         parameter.DataType = this.ResolvePrimitiveInDataType(parameter.DataType, typeResolver);
     }
 }
        /// <summary>
        /// Initializes a new instance of the AstoriaQueryTypeLibraryBuilder class if running EF provider.
        /// </summary>
        /// <param name="strategy">The query evaluation strategy</param>
        /// <param name="storeTypeResolver">The store data type resolver</param>
        /// <param name="modelTypeResolver">The model data type resolver</param>
        public AstoriaQueryTypeLibraryBuilder(ILinqToAstoriaQueryEvaluationStrategy strategy, IPrimitiveDataTypeResolver storeTypeResolver, IPrimitiveDataTypeResolver modelTypeResolver)
            : base(strategy)
        {
            ExceptionUtilities.CheckArgumentNotNull(strategy, "strategy");
            ExceptionUtilities.CheckArgumentNotNull(storeTypeResolver, "storeTypeResolver");
            ExceptionUtilities.CheckArgumentNotNull(modelTypeResolver, "modelTypeResolver");

            this.strategy = strategy;
            this.storeTypeResolver = storeTypeResolver;
            this.modelTypeResolver = modelTypeResolver;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the AstoriaQueryTypeLibraryBuilder class if running EF provider.
        /// </summary>
        /// <param name="strategy">The query evaluation strategy</param>
        /// <param name="storeTypeResolver">The store data type resolver</param>
        /// <param name="modelTypeResolver">The model data type resolver</param>
        public AstoriaQueryTypeLibraryBuilder(ILinqToAstoriaQueryEvaluationStrategy strategy, IPrimitiveDataTypeResolver storeTypeResolver, IPrimitiveDataTypeResolver modelTypeResolver)
            : base(strategy)
        {
            ExceptionUtilities.CheckArgumentNotNull(strategy, "strategy");
            ExceptionUtilities.CheckArgumentNotNull(storeTypeResolver, "storeTypeResolver");
            ExceptionUtilities.CheckArgumentNotNull(modelTypeResolver, "modelTypeResolver");

            this.strategy          = strategy;
            this.storeTypeResolver = storeTypeResolver;
            this.modelTypeResolver = modelTypeResolver;
        }
Ejemplo n.º 6
0
        private void FixupGenericArguments(EntityType entityType, IPrimitiveDataTypeResolver typeResolver)
        {
            var genericArgumentsAnnotation = entityType.Annotations.OfType <GenericArgumentsAnnotation>().SingleOrDefault();

            if (genericArgumentsAnnotation != null)
            {
                foreach (var genericArgument in genericArgumentsAnnotation.GenericArguments)
                {
                    genericArgument.DataType = this.ResolvePrimitiveInDataType(genericArgument.DataType, typeResolver);
                }
            }
        }
Ejemplo n.º 7
0
 private void FixupProperties(IEnumerable <MemberProperty> properties, IPrimitiveDataTypeResolver typeResolver)
 {
     foreach (MemberProperty prop in properties)
     {
         // resolve the type recursively
         var resolvedType = this.ResolvePrimitiveInDataType(prop.PropertyType, typeResolver);
         if (!object.ReferenceEquals(resolvedType, prop.PropertyType))
         {
             // if the type changed, save the old type and update the property
             prop.Annotations.Add(new TypeSpecificationAnnotation(prop.PropertyType));
             prop.PropertyType = resolvedType;
         }
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Resolves the provider types in a model.
        /// </summary>
        /// <param name="model">The model to resolve types for.</param>
        /// <param name="typeResolver">The type resolver.</param>
        public void ResolveProviderTypes(EntityModelSchema model, IPrimitiveDataTypeResolver typeResolver)
        {
            foreach (EntityType entityType in model.EntityTypes)
            {
                this.FixupProperties(entityType.Properties, typeResolver);
                this.FixupGenericArguments(entityType, typeResolver);
            }

            foreach (ComplexType complexType in model.ComplexTypes)
            {
                this.FixupProperties(complexType.Properties, typeResolver);
            }

            foreach (Function function in model.Functions)
            {
                this.FixupParameters(function.Parameters, typeResolver);
                if (function.ReturnType != null)
                {
                    function.ReturnType = this.ResolvePrimitiveInDataType(function.ReturnType, typeResolver);
                }

                foreach (var returnTypeAnnotation in function.Annotations.OfType <StoredProcedureReturnTypeFunctionAnnotation>())
                {
                    returnTypeAnnotation.ReturnType = this.ResolvePrimitiveInDataType(returnTypeAnnotation.ReturnType, typeResolver);
                }
            }

            foreach (EntityContainer container in model.EntityContainers)
            {
                foreach (FunctionImport import in container.FunctionImports)
                {
                    this.FixupParameters(import.Parameters, typeResolver);
                    foreach (var returnType in import.ReturnTypes)
                    {
                        returnType.DataType = this.ResolvePrimitiveInDataType(returnType.DataType, typeResolver);
                    }
                }
            }
        }
        /// <summary>
        /// Resolves the provider types in a model.
        /// </summary>
        /// <param name="model">The model to resolve types for.</param>
        /// <param name="typeResolver">The type resolver.</param>
        public void ResolveProviderTypes(EntityModelSchema model, IPrimitiveDataTypeResolver typeResolver)
        {
            foreach (EntityType entityType in model.EntityTypes)
            {
                this.FixupProperties(entityType.Properties, typeResolver);
                this.FixupGenericArguments(entityType, typeResolver);
            }

            foreach (ComplexType complexType in model.ComplexTypes)
            {
                this.FixupProperties(complexType.Properties, typeResolver);
            }

            foreach (Function function in model.Functions)
            {
                this.FixupParameters(function.Parameters, typeResolver);
                if (function.ReturnType != null)
                {
                    function.ReturnType = this.ResolvePrimitiveInDataType(function.ReturnType, typeResolver);
                }

                foreach (var returnTypeAnnotation in function.Annotations.OfType<StoredProcedureReturnTypeFunctionAnnotation>())
                {
                    returnTypeAnnotation.ReturnType = this.ResolvePrimitiveInDataType(returnTypeAnnotation.ReturnType, typeResolver);
                }
            }

            foreach (EntityContainer container in model.EntityContainers)
            {
                foreach (FunctionImport import in container.FunctionImports)
                {
                    this.FixupParameters(import.Parameters, typeResolver);
                    foreach (var returnType in import.ReturnTypes)
                    {
                        returnType.DataType = this.ResolvePrimitiveInDataType(returnType.DataType, typeResolver);
                    }
                }
            }
        }
        private DataType ResolvePrimitiveInDataType(DataType dataType, IPrimitiveDataTypeResolver typeResolver)
        {
            var primitiveDataType = dataType as PrimitiveDataType;
            if (primitiveDataType != null)
            {
                return typeResolver.ResolvePrimitiveType(primitiveDataType);
            }

            var collectionDataType = dataType as CollectionDataType;
            if (collectionDataType != null)
            {
                // using DataTypes.CollectionDataType here will lose nullability information
                return collectionDataType.WithElementDataType(this.ResolvePrimitiveInDataType(collectionDataType.ElementDataType, typeResolver));
            }

            var rowDataType = dataType as RowDataType;
            if (rowDataType != null)
            {
                this.FixupProperties(rowDataType.Definition.Properties, typeResolver);
            }

            return dataType;
        }
 private void FixupGenericArguments(EntityType entityType, IPrimitiveDataTypeResolver typeResolver)
 {
     var genericArgumentsAnnotation = entityType.Annotations.OfType<GenericArgumentsAnnotation>().SingleOrDefault();
     if (genericArgumentsAnnotation != null)
     {
         foreach (var genericArgument in genericArgumentsAnnotation.GenericArguments)
         {
             genericArgument.DataType = this.ResolvePrimitiveInDataType(genericArgument.DataType, typeResolver);
         }
     }
 }
 private void FixupProperties(IEnumerable<MemberProperty> properties, IPrimitiveDataTypeResolver typeResolver)
 {
     foreach (MemberProperty prop in properties)
     {
         // resolve the type recursively
         var resolvedType = this.ResolvePrimitiveInDataType(prop.PropertyType, typeResolver);
         if (!object.ReferenceEquals(resolvedType, prop.PropertyType))
         {
             // if the type changed, save the old type and update the property
             prop.Annotations.Add(new TypeSpecificationAnnotation(prop.PropertyType));
             prop.PropertyType = resolvedType;
         }
     }
 }
 private void FixupParameters(IEnumerable<FunctionParameter> parameters, IPrimitiveDataTypeResolver typeResolver)
 {
     foreach (FunctionParameter parameter in parameters)
     {
         // save the old parameter type
         parameter.Annotations.Add(new TypeSpecificationAnnotation(parameter.DataType));
         parameter.DataType = this.ResolvePrimitiveInDataType(parameter.DataType, typeResolver);
     }
 }