예제 #1
0
        /// <summary>
        /// Convert CDM data type to SyMS data type.
        /// </summary>
        internal static TypeInfo CdmDataFormatToSymsDataType(CdmDataFormat cdmDataFormat, TypeInfo typeInfo)
        {
            switch (cdmDataFormat)
            {
            case CdmDataFormat.Byte:
                typeInfo.TypeName = "byte";
                break;

            case CdmDataFormat.Binary:
                typeInfo.TypeName = "binary";
                break;

            case CdmDataFormat.Float:
                typeInfo.TypeName = "float";
                break;

            case CdmDataFormat.Char:
                typeInfo.TypeName = "string";
                typeInfo.Length   = 1;
                break;

            case CdmDataFormat.String:
                typeInfo.TypeName = "string";
                break;

            case CdmDataFormat.Guid:
                typeInfo.TypeName           = "string";
                typeInfo.Properties["guid"] = true;
                break;

            case CdmDataFormat.Json:
                typeInfo.TypeName           = "string";
                typeInfo.Properties["json"] = true;
                break;

            case CdmDataFormat.DateTimeOffset:
                typeInfo.TypeName = "string";
                typeInfo.Properties["dateTimeOffset"] = true;
                break;

            case CdmDataFormat.Int64:
                typeInfo.TypeName = "long";
                break;

            case CdmDataFormat.Int32:
                typeInfo.TypeName = "integer";
                break;

            case CdmDataFormat.Double:
                typeInfo.TypeName = "double";
                break;

            case CdmDataFormat.Date:
                typeInfo.TypeName = "date";
                break;

            case CdmDataFormat.DateTime:
                typeInfo.TypeName = "timestamp";
                typeInfo.Properties["dateTime"] = true;
                break;

            case CdmDataFormat.Time:
                typeInfo.TypeName = "timestamp";
                break;

            case CdmDataFormat.Decimal:
                typeInfo.TypeName = "decimal";
                break;

            case CdmDataFormat.Boolean:
                typeInfo.TypeName = "boolean";
                break;

            default:
                return(null);
            }
            return(typeInfo);
        }
예제 #2
0
        internal CdmDataFormat TraitsToDataFormat(bool onlyFromProperty)
        {
            bool isArray      = false;
            bool isBig        = false;
            bool isSmall      = false;
            bool isInteger    = false;
            bool probablyJson = false;

            CdmDataFormat baseType = CdmDataFormat.Unknown;

            if (this.Traits != null)
            {
                foreach (var trait in this.Traits)
                {
                    if (onlyFromProperty && !trait.IsFromProperty)
                    {
                        continue;
                    }

                    string traitName = trait.FetchObjectDefinitionName();
                    switch (traitName)
                    {
                    case "is.dataFormat.array":
                        isArray = true;
                        break;

                    case "is.dataFormat.big":
                        isBig = true;
                        break;

                    case "is.dataFormat.small":
                        isSmall = true;
                        break;

                    case "is.dataFormat.integer":
                        isInteger = true;
                        break;

                    case "is.dataFormat.floatingPoint":
                        baseType = CdmDataFormat.Float;
                        break;

                    case "is.dataFormat.character":
                        if (baseType != CdmDataFormat.Guid)
                        {
                            baseType = CdmDataFormat.Char;
                        }
                        break;

                    case "is.dataFormat.byte":
                        baseType = CdmDataFormat.Byte;
                        break;

                    case "is.dataFormat.date":
                        if (baseType == CdmDataFormat.Time)
                        {
                            baseType = CdmDataFormat.DateTime;
                        }
                        else
                        {
                            baseType = CdmDataFormat.Date;
                        }
                        break;

                    case "is.dataFormat.time":
                        if (baseType == CdmDataFormat.Date)
                        {
                            baseType = CdmDataFormat.DateTime;
                        }
                        else
                        {
                            baseType = CdmDataFormat.Time;
                        }
                        break;

                    case "is.dataFormat.timeOffset":
                        if (baseType == CdmDataFormat.DateTime)
                        {
                            baseType = CdmDataFormat.DateTimeOffset;
                        }
                        break;

                    case "is.dataFormat.boolean":
                        baseType = CdmDataFormat.Boolean;
                        break;

                    case "is.dataFormat.numeric.shaped":
                        baseType = CdmDataFormat.Decimal;
                        break;

                    case "is.dataFormat.guid":
                        baseType = CdmDataFormat.Guid;
                        break;

                    case "means.content.text.JSON":
                        baseType     = isArray ? CdmDataFormat.Json : CdmDataFormat.Unknown;
                        probablyJson = true;
                        break;

                    default:
                        break;
                    }
                }

                if (isArray)
                {
                    if (probablyJson)
                    {
                        baseType = CdmDataFormat.Json;
                    }
                    else if (baseType == CdmDataFormat.Char)
                    {
                        baseType = CdmDataFormat.String;
                    }
                    else if (baseType == CdmDataFormat.Byte)
                    {
                        baseType = CdmDataFormat.Binary;
                    }
                    else if (baseType != CdmDataFormat.Guid)
                    {
                        baseType = CdmDataFormat.Unknown;
                    }
                }

                if (baseType == CdmDataFormat.Float && isBig)
                {
                    baseType = CdmDataFormat.Double;
                }
                if (isInteger && isBig)
                {
                    baseType = CdmDataFormat.Int64;
                }
                else if (isInteger && isSmall)
                {
                    baseType = CdmDataFormat.Int16;
                }
                else if (isInteger)
                {
                    baseType = CdmDataFormat.Int32;
                }
            }

            return(baseType);
        }
예제 #3
0
        internal void DataFormatToTraits(CdmDataFormat dataFormat)
        {
            // reset the current dataFormat
            foreach (var traitName in DataFormatTraitNames)
            {
                this.RemoveTrait(traitName);
            }
            switch (dataFormat)
            {
            case CdmDataFormat.Int16:
                this.FetchOrCreateTrait("is.dataFormat.integer", true);
                this.FetchOrCreateTrait("is.dataFormat.small", true);
                break;

            case CdmDataFormat.Int32:
                this.FetchOrCreateTrait("is.dataFormat.integer", true);
                break;

            case CdmDataFormat.Int64:
                this.FetchOrCreateTrait("is.dataFormat.integer", true);
                this.FetchOrCreateTrait("is.dataFormat.big", true);
                break;

            case CdmDataFormat.Float:
                this.FetchOrCreateTrait("is.dataFormat.floatingPoint", true);
                break;

            case CdmDataFormat.Double:
                this.FetchOrCreateTrait("is.dataFormat.floatingPoint", true);
                this.FetchOrCreateTrait("is.dataFormat.big", true);
                break;

            case CdmDataFormat.Guid:
                this.FetchOrCreateTrait("is.dataFormat.guid", true);
                this.FetchOrCreateTrait("is.dataFormat.character", true);
                this.FetchOrCreateTrait("is.dataFormat.array", true);
                break;

            case CdmDataFormat.String:
                this.FetchOrCreateTrait("is.dataFormat.character", true);
                this.FetchOrCreateTrait("is.dataFormat.array", true);
                break;

            case CdmDataFormat.Char:
                this.FetchOrCreateTrait("is.dataFormat.character", true);
                this.FetchOrCreateTrait("is.dataFormat.big", true);
                break;

            case CdmDataFormat.Byte:
                this.FetchOrCreateTrait("is.dataFormat.byte", true);
                break;

            case CdmDataFormat.Binary:
                this.FetchOrCreateTrait("is.dataFormat.byte", true);
                this.FetchOrCreateTrait("is.dataFormat.array", true);
                break;

            case CdmDataFormat.Time:
                this.FetchOrCreateTrait("is.dataFormat.time", true);
                break;

            case CdmDataFormat.Date:
                this.FetchOrCreateTrait("is.dataFormat.date", true);
                break;

            case CdmDataFormat.DateTime:
                this.FetchOrCreateTrait("is.dataFormat.time", true);
                this.FetchOrCreateTrait("is.dataFormat.date", true);
                break;

            case CdmDataFormat.DateTimeOffset:
                this.FetchOrCreateTrait("is.dataFormat.time", true);
                this.FetchOrCreateTrait("is.dataFormat.date", true);
                this.FetchOrCreateTrait("is.dataFormat.timeOffset", true);
                break;

            case CdmDataFormat.Boolean:
                this.FetchOrCreateTrait("is.dataFormat.boolean", true);
                break;

            case CdmDataFormat.Decimal:
                this.FetchOrCreateTrait("is.dataFormat.numeric.shaped", true);
                break;

            case CdmDataFormat.Json:
                this.FetchOrCreateTrait("is.dataFormat.array", true);
                this.FetchOrCreateTrait("means.content.text.JSON", true);
                break;
            }
        }
예제 #4
0
        public void CdmTypeIsMapped(SqlDbType?type, CdmDataFormat expected)
        {
            CdmDataFormat actual = CdmSqlTypeMapper.Map(type);

            Assert.Equal(expected, actual);
        }
예제 #5
0
 public static CdmDataTypeReference CreateDataType(this CdmCorpusDefinition cdmCorpus, CdmDataFormat dataFormat)
 {
     return(cdmCorpus.MakeObject <CdmDataTypeReference>(CdmObjectType.DataTypeRef, dataFormat.ToString(), true));
 }
예제 #6
0
        internal void DataFormatToTraits(CdmDataFormat dataFormat)
        {
            // if this is going to be called many times, then need to remove dynamic dataformat traits that are left behind.
            // but ... probably not. in fact, this is probably never used because data formats come from data type which is not an attribute
            switch (dataFormat)
            {
            case CdmDataFormat.Int16:
                this.FetchOrCreateTrait("is.dataFormat.integer", true);
                this.FetchOrCreateTrait("is.dataFormat.small", true);
                break;

            case CdmDataFormat.Int32:
                this.FetchOrCreateTrait("is.dataFormat.integer", true);
                this.FetchOrCreateTrait("is.dataFormat.small", true);
                break;

            case CdmDataFormat.Int64:
                this.FetchOrCreateTrait("is.dataFormat.integer", true);
                this.FetchOrCreateTrait("is.dataFormat.big", true);
                break;

            case CdmDataFormat.Float:
                this.FetchOrCreateTrait("is.dataFormat.floatingPoint", true);
                break;

            case CdmDataFormat.Double:
                this.FetchOrCreateTrait("is.dataFormat.floatingPoint", true);
                this.FetchOrCreateTrait("is.dataFormat.big", true);
                break;

            case CdmDataFormat.Guid:
                this.FetchOrCreateTrait("is.dataFormat.guid", true);
                break;

            case CdmDataFormat.String:
                this.FetchOrCreateTrait("is.dataFormat.character", true);
                this.FetchOrCreateTrait("is.dataFormat.array", true);
                break;

            case CdmDataFormat.Char:
                this.FetchOrCreateTrait("is.dataFormat.character", true);
                this.FetchOrCreateTrait("is.dataFormat.big", true);
                break;

            case CdmDataFormat.Byte:
                this.FetchOrCreateTrait("is.dataFormat.byte", true);
                break;

            case CdmDataFormat.Binary:
                this.FetchOrCreateTrait("is.dataFormat.array", true);
                break;

            case CdmDataFormat.Time:
                this.FetchOrCreateTrait("is.dataFormat.time", true);
                break;

            case CdmDataFormat.Date:
                this.FetchOrCreateTrait("is.dataFormat.date", true);
                break;

            case CdmDataFormat.DateTime:
                this.FetchOrCreateTrait("is.dataFormat.time", true);
                this.FetchOrCreateTrait("is.dataFormat.date", true);
                break;

            case CdmDataFormat.DateTimeOffset:
                this.FetchOrCreateTrait("is.dataFormat.time", true);
                this.FetchOrCreateTrait("is.dataFormat.date", true);
                this.FetchOrCreateTrait("is.dataFormat.timeOffset", true);
                break;

            case CdmDataFormat.Boolean:
                this.FetchOrCreateTrait("is.dataFormat.boolean", true);
                break;

            case CdmDataFormat.Decimal:
                this.FetchOrCreateTrait("is.dataFormat.numeric.shaped", true);
                break;

            case CdmDataFormat.Json:
                this.FetchOrCreateTrait("is.dataFormat.array", true);
                this.FetchOrCreateTrait("means.content.text.JSON", true);
                break;
            }
        }