Ejemplo n.º 1
0
        internal override void WriteTypeDefinitionAttributes(IEdmTypeDefinitionReference reference)
        {
            IEdmTypeReference actualTypeReference = reference.AsActualTypeReference();

            if (actualTypeReference.IsBinary())
            {
                this.WriteBinaryTypeAttributes(actualTypeReference.AsBinary());
            }
            else if (actualTypeReference.IsString())
            {
                this.WriteStringTypeAttributes(actualTypeReference.AsString());
            }
            else if (actualTypeReference.IsTemporal())
            {
                this.WriteTemporalTypeAttributes(actualTypeReference.AsTemporal());
            }
            else if (actualTypeReference.IsDecimal())
            {
                this.WriteDecimalTypeAttributes(actualTypeReference.AsDecimal());
            }
            else if (actualTypeReference.IsSpatial())
            {
                this.WriteSpatialTypeAttributes(actualTypeReference.AsSpatial());
            }
        }
Ejemplo n.º 2
0
        private static IEdmTypeReference CreatePrimitveStockTypeReference(IEdmTypeReference edmTypeReference, EdmModel stockModel)
        {
            IEdmTypeReference stockTypeReference = null;

            switch (edmTypeReference.PrimitiveKind())
            {
            case EdmPrimitiveTypeKind.Binary:
                var binaryTypeReference = edmTypeReference.AsBinary();
                stockTypeReference = EdmCoreModel.Instance.GetBinary(binaryTypeReference.IsUnbounded, binaryTypeReference.MaxLength, binaryTypeReference.IsNullable);
                break;

            case EdmPrimitiveTypeKind.String:
                var stringTypeReference = edmTypeReference.AsString();
                stockTypeReference = EdmCoreModel.Instance.GetString(stringTypeReference.IsUnbounded, stringTypeReference.MaxLength, stringTypeReference.IsUnicode ?? true, stringTypeReference.IsNullable);
                break;

            case EdmPrimitiveTypeKind.DateTimeOffset:
            case EdmPrimitiveTypeKind.Duration:
                var temporalTypeReference = edmTypeReference.AsTemporal();
                stockTypeReference = EdmCoreModel.Instance.GetTemporal(temporalTypeReference.PrimitiveKind(), temporalTypeReference.Precision ?? 0, temporalTypeReference.IsNullable);
                break;

            case EdmPrimitiveTypeKind.Decimal:
                var decimalTypeReference = edmTypeReference.AsDecimal();
                stockTypeReference = EdmCoreModel.Instance.GetDecimal(decimalTypeReference.Precision, decimalTypeReference.Scale, decimalTypeReference.IsNullable);
                break;

            default:
                stockTypeReference = EdmCoreModel.Instance.GetPrimitive(edmTypeReference.PrimitiveKind(), edmTypeReference.IsNullable);
                break;
            }
            return(stockTypeReference);
        }
Ejemplo n.º 3
0
        // The As*** functions never return null -- if the supplied type does not have the appropriate shape, an encoding of a bad type is returned.
        #region AsPrimitive, AsCollection, AsStructured, ...
        /// <summary>
        /// If this reference is of a primitive type, this will return a valid primitive type reference to the type definition. Otherwise, it will return a bad primitive type reference.
        /// </summary>
        /// <param name="type">Reference to the calling object.</param>
        /// <returns>A valid primitive type reference if the definition of the reference is of a primitive type. Otherwise a bad primitive type reference.</returns>
        public static IEdmPrimitiveTypeReference AsPrimitive(this IEdmTypeReference type)
        {
            EdmUtil.CheckArgumentNull(type, "type");
            IEdmPrimitiveTypeReference reference = type as IEdmPrimitiveTypeReference;

            if (reference != null)
            {
                return(reference);
            }

            IEdmType typeDefinition = type.Definition;

            if (typeDefinition.TypeKind == EdmTypeKind.Primitive)
            {
                var primitiveDefinition = typeDefinition as IEdmPrimitiveType;
                if (primitiveDefinition != null)
                {
                    switch (primitiveDefinition.PrimitiveKind)
                    {
                    case EdmPrimitiveTypeKind.Boolean:
                    case EdmPrimitiveTypeKind.Byte:
                    case EdmPrimitiveTypeKind.Double:
                    case EdmPrimitiveTypeKind.Guid:
                    case EdmPrimitiveTypeKind.Int16:
                    case EdmPrimitiveTypeKind.Int32:
                    case EdmPrimitiveTypeKind.Int64:
                    case EdmPrimitiveTypeKind.SByte:
                    case EdmPrimitiveTypeKind.Single:
                    case EdmPrimitiveTypeKind.Stream:
                        return(new EdmPrimitiveTypeReference(primitiveDefinition, type.IsNullable));

                    case EdmPrimitiveTypeKind.Binary:
                        return(type.AsBinary());

                    case EdmPrimitiveTypeKind.Decimal:
                        return(type.AsDecimal());

                    case EdmPrimitiveTypeKind.String:
                        return(type.AsString());

                    case EdmPrimitiveTypeKind.Duration:
                    case EdmPrimitiveTypeKind.DateTimeOffset:
                        return(type.AsTemporal());

                    case EdmPrimitiveTypeKind.Geography:
                    case EdmPrimitiveTypeKind.GeographyPoint:
                    case EdmPrimitiveTypeKind.GeographyLineString:
                    case EdmPrimitiveTypeKind.GeographyPolygon:
                    case EdmPrimitiveTypeKind.GeographyCollection:
                    case EdmPrimitiveTypeKind.GeographyMultiPolygon:
                    case EdmPrimitiveTypeKind.GeographyMultiLineString:
                    case EdmPrimitiveTypeKind.GeographyMultiPoint:
                    case EdmPrimitiveTypeKind.Geometry:
                    case EdmPrimitiveTypeKind.GeometryPoint:
                    case EdmPrimitiveTypeKind.GeometryLineString:
                    case EdmPrimitiveTypeKind.GeometryPolygon:
                    case EdmPrimitiveTypeKind.GeometryCollection:
                    case EdmPrimitiveTypeKind.GeometryMultiPolygon:
                    case EdmPrimitiveTypeKind.GeometryMultiLineString:
                    case EdmPrimitiveTypeKind.GeometryMultiPoint:
                        return(type.AsSpatial());

                    case EdmPrimitiveTypeKind.None:
                        break;
                    }
                }
            }

            string          typeFullName = type.FullName();
            List <EdmError> errors       = new List <EdmError>(type.Errors());

            if (errors.Count == 0)
            {
                errors.AddRange(ConversionError(type.Location(), typeFullName, EdmConstants.Type_Primitive));
            }

            return(new BadPrimitiveTypeReference(typeFullName, type.IsNullable, errors));
        }
Ejemplo n.º 4
0
        public static IEdmPrimitiveTypeReference AsPrimitive(this IEdmTypeReference type)
        {
            string          str;
            List <EdmError> edmErrors;

            EdmUtil.CheckArgumentNull <IEdmTypeReference>(type, "type");
            IEdmPrimitiveTypeReference edmPrimitiveTypeReference = type as IEdmPrimitiveTypeReference;

            if (edmPrimitiveTypeReference == null)
            {
                IEdmType definition = type.Definition;
                if (definition.TypeKind == EdmTypeKind.Primitive)
                {
                    IEdmPrimitiveType edmPrimitiveType = definition as IEdmPrimitiveType;
                    if (edmPrimitiveType != null)
                    {
                        EdmPrimitiveTypeKind primitiveKind = edmPrimitiveType.PrimitiveKind;
                        if (primitiveKind == EdmPrimitiveTypeKind.None)
                        {
                            str       = type.FullName();
                            edmErrors = new List <EdmError>(type.Errors());
                            if (edmErrors.Count == 0)
                            {
                                edmErrors.AddRange(EdmTypeSemantics.ConversionError(type.Location(), str, "Primitive"));
                            }
                            return(new BadPrimitiveTypeReference(str, type.IsNullable, edmErrors));
                        }
                        else if (primitiveKind == EdmPrimitiveTypeKind.Binary)
                        {
                            return(type.AsBinary());
                        }
                        else if (primitiveKind == EdmPrimitiveTypeKind.Boolean || primitiveKind == EdmPrimitiveTypeKind.Byte || primitiveKind == EdmPrimitiveTypeKind.Double || primitiveKind == EdmPrimitiveTypeKind.Guid || primitiveKind == EdmPrimitiveTypeKind.Int16 || primitiveKind == EdmPrimitiveTypeKind.Int32 || primitiveKind == EdmPrimitiveTypeKind.Int64 || primitiveKind == EdmPrimitiveTypeKind.SByte || primitiveKind == EdmPrimitiveTypeKind.Single || primitiveKind == EdmPrimitiveTypeKind.Stream)
                        {
                            return(new EdmPrimitiveTypeReference(edmPrimitiveType, type.IsNullable));
                        }
                        else if (primitiveKind == EdmPrimitiveTypeKind.DateTime || primitiveKind == EdmPrimitiveTypeKind.DateTimeOffset || primitiveKind == EdmPrimitiveTypeKind.Time)
                        {
                            return(type.AsTemporal());
                        }
                        else if (primitiveKind == EdmPrimitiveTypeKind.Decimal)
                        {
                            return(type.AsDecimal());
                        }
                        else if (primitiveKind == EdmPrimitiveTypeKind.String)
                        {
                            return(type.AsString());
                        }
                        else if (primitiveKind == EdmPrimitiveTypeKind.Geography || primitiveKind == EdmPrimitiveTypeKind.GeographyPoint || primitiveKind == EdmPrimitiveTypeKind.GeographyLineString || primitiveKind == EdmPrimitiveTypeKind.GeographyPolygon || primitiveKind == EdmPrimitiveTypeKind.GeographyCollection || primitiveKind == EdmPrimitiveTypeKind.GeographyMultiPolygon || primitiveKind == EdmPrimitiveTypeKind.GeographyMultiLineString || primitiveKind == EdmPrimitiveTypeKind.GeographyMultiPoint || primitiveKind == EdmPrimitiveTypeKind.Geometry || primitiveKind == EdmPrimitiveTypeKind.GeometryPoint || primitiveKind == EdmPrimitiveTypeKind.GeometryLineString || primitiveKind == EdmPrimitiveTypeKind.GeometryPolygon || primitiveKind == EdmPrimitiveTypeKind.GeometryCollection || primitiveKind == EdmPrimitiveTypeKind.GeometryMultiPolygon || primitiveKind == EdmPrimitiveTypeKind.GeometryMultiLineString || primitiveKind == EdmPrimitiveTypeKind.GeometryMultiPoint)
                        {
                            return(type.AsSpatial());
                        }
                    }
                }
                str       = type.FullName();
                edmErrors = new List <EdmError>(type.Errors());
                if (edmErrors.Count == 0)
                {
                    edmErrors.AddRange(EdmTypeSemantics.ConversionError(type.Location(), str, "Primitive"));
                }
                return(new BadPrimitiveTypeReference(str, type.IsNullable, edmErrors));
            }
            else
            {
                return(edmPrimitiveTypeReference);
            }
        }
Ejemplo n.º 5
0
 private static IEdmTypeReference CreatePrimitveStockTypeReference(IEdmTypeReference edmTypeReference, EdmModel stockModel)
 {
     IEdmTypeReference stockTypeReference = null;
     switch (edmTypeReference.PrimitiveKind())
     {
         case EdmPrimitiveTypeKind.Binary:
             var binaryTypeReference = edmTypeReference.AsBinary();
             stockTypeReference = EdmCoreModel.Instance.GetBinary(binaryTypeReference.IsUnbounded, binaryTypeReference.MaxLength, binaryTypeReference.IsNullable);
             break;
         case EdmPrimitiveTypeKind.String:
             var stringTypeReference = edmTypeReference.AsString();
             stockTypeReference = EdmCoreModel.Instance.GetString(stringTypeReference.IsUnbounded, stringTypeReference.MaxLength, stringTypeReference.IsUnicode ?? true, stringTypeReference.IsNullable);
             break;
         case EdmPrimitiveTypeKind.DateTimeOffset:
         case EdmPrimitiveTypeKind.Duration:
             var temporalTypeReference = edmTypeReference.AsTemporal();
             stockTypeReference = EdmCoreModel.Instance.GetTemporal(temporalTypeReference.PrimitiveKind(), temporalTypeReference.Precision ?? 0, temporalTypeReference.IsNullable);
             break;
         case EdmPrimitiveTypeKind.Decimal:
             var decimalTypeReference = edmTypeReference.AsDecimal();
             stockTypeReference = EdmCoreModel.Instance.GetDecimal(decimalTypeReference.Precision, decimalTypeReference.Scale, decimalTypeReference.IsNullable);
             break;
         default:
             stockTypeReference = EdmCoreModel.Instance.GetPrimitive(edmTypeReference.PrimitiveKind(), edmTypeReference.IsNullable);
             break;
     }
     return stockTypeReference;
 }