Пример #1
0
        public override DbTypeBase ToGenericType()
        {
            DbTypeFloat res = new DbTypeFloat();

            res.Bytes = 8;
            return(res);
        }
Пример #2
0
        protected override DbTypeBase ToGenericTypeNoArray()
        {
            DbTypeFloat res = new DbTypeFloat();

            res.Bytes = 8;
            return(res);
        }
Пример #3
0
        public override ISpecificType GenericTypeToSpecific(DbTypeBase type, IMigrationProfile profile, IProgressInfo progress)
        {
            switch (type.Code)
            {
            case DbTypeCode.Int:
                return(GetAccessTypeInt((DbTypeInt)type));

            case DbTypeCode.String:
                return(GetAccessTypeString((DbTypeString)type));

            case DbTypeCode.Logical:
                return(new AccessTypeBit());

            case DbTypeCode.Datetime:
                return(new AccessTypeDatetime());

            case DbTypeCode.Numeric:
            {
                AccessTypeDecimal res = new AccessTypeDecimal();
                res.Precision       = ((DbTypeNumeric)type).Precision;
                res.Scale           = ((DbTypeNumeric)type).Scale;
                res.IsAutoIncrement = ((DbTypeNumeric)type).Autoincrement;
                return(res);
            }

            case DbTypeCode.Blob:
                return(new AccessTypeImage());

            case DbTypeCode.Text:
            case DbTypeCode.Array:
                return(new AccessTypeText());

            case DbTypeCode.Float:
            {
                DbTypeFloat tp = (DbTypeFloat)type;
                if (tp.IsMoney)
                {
                    return(new AccessTypeMoney());
                }
                if (tp.Bytes == 4)
                {
                    return(new AccessTypeReal());
                }
                else
                {
                    return(new AccessTypeFloat());
                }
            }

            case DbTypeCode.Xml:
                return(new AccessTypeText());

            case DbTypeCode.Generic:
                return(new AccessTypeGeneric {
                    Sql = ((DbTypeGeneric)type).Sql
                });
            }
            throw new InternalError("DAE-00058 unknown type");
        }
Пример #4
0
        public override DbTypeBase ToGenericType()
        {
            DbTypeFloat res = new DbTypeFloat();

            res.Bytes   = 10;
            res.IsMoney = true;
            return(res);
        }
Пример #5
0
        protected override DbTypeBase ToGenericTypeNoArray()
        {
            DbTypeFloat res = new DbTypeFloat();

            res.Bytes   = 10;
            res.IsMoney = true;
            return(res);
        }
Пример #6
0
 private ISpecificType GetPostgreSqlTypeFloat(DbTypeFloat type)
 {
     if (type.IsMoney)
     {
         return(new PostgreSqlTypeMoney());
     }
     if (type.Bytes == 4)
     {
         return(new PostgreSqlTypeReal());
     }
     return(new PostgreSqlTypeDouble());
 }
Пример #7
0
 public override DbTypeBase ToGenericType()
 {
     if (Precision == null && Scale == null)
     {
         var fres = new DbTypeFloat {
             Bytes = 8
         };
         fres.SetSpecificAttribute("oracle", "subtype", "number");
         return(fres);
     }
     if (Precision != null && Scale != null)
     {
         var nres = new DbTypeNumeric();
         nres.Precision = Precision.Value;
         nres.Scale     = Scale.Value;
         return(nres);
     }
     if ((Scale ?? 0) == 0)
     {
         var ires = new DbTypeInt {
             Bytes = 4
         };
         if (Precision != null)
         {
             ires.SetSpecificAttribute("oracle", "length", Precision.ToString());
         }
         return(ires);
     }
     if (Precision == null)
     {
         var nres = new DbTypeNumeric();
         nres.Scale = Scale.Value;
         nres.SetSpecificAttribute("oracle", "noprec", "1");
         return(nres);
     }
     // this should never happen
     return(new DbTypeNumeric());
 }
Пример #8
0
        public override ISpecificType GenericTypeToSpecific(DbTypeBase type, IMigrationProfile profile, IProgressInfo progress)
        {
            switch (type.Code)
            {
            case DbTypeCode.Int:
                return(GetSqlTypeInt((DbTypeInt)type));

            case DbTypeCode.String:
                return(GetSqlTypeString((DbTypeString)type));

            case DbTypeCode.Logical:
                return(new SqlTypeBit());

            case DbTypeCode.Datetime:
            {
                string attr  = type.GetSpecificAttribute("mssql", "subtype");
                var    dtype = type as DbTypeDatetime;
                if (attr == "timestamp")
                {
                    return(new SqlTypeTimestamp());
                }
                if (attr == "datetime")
                {
                    return(new SqlTypeDatetime());
                }
                if (attr == "smalldatetime")
                {
                    return(new SqlTypeSmallDatetime());
                }
                if (m_version.Is_2008())
                {
                    if (dtype.HasTimeZone)
                    {
                        return(new SqlTypeDatetimeOffset());
                    }
                    if (dtype.SubType == DbDatetimeSubType.Date)
                    {
                        return(new SqlTypeDate());
                    }
                    if (dtype.SubType == DbDatetimeSubType.Time)
                    {
                        return(new SqlTypeTime());
                    }
                    if (attr == "datetime2")
                    {
                        return(new SqlTypeDatetime2());
                    }
                    // on 2008 server prefer datetime2 type
                    // NO: return new SqlTypeDatetime2();
                }
                return(new SqlTypeDatetime());
            }

            case DbTypeCode.Numeric:
            {
                SqlTypeNumericBase res;
                if (type.GetSpecificAttribute("mssql", "subtype") == "decimal")
                {
                    res = new SqlTypeDecimal();
                }
                else
                {
                    res = new SqlTypeNumeric();
                }
                res.Precision  = ((DbTypeNumeric)type).Precision;
                res.Scale      = ((DbTypeNumeric)type).Scale;
                res.IsIdentity = ((DbTypeNumeric)type).Autoincrement;

                int increment;
                if (Int32.TryParse(type.GetSpecificAttribute("mssql", "identity_increment"), out increment))
                {
                    res.IdentityIncrement = increment;
                    res.IdentitySeed      = Int32.Parse(type.GetSpecificAttribute("mssql", "identity_seed"));
                }
                return(res);
            }

            //return String.Format("decimal({0},{1})", ((DbTypeNumeric)type).Precision, ((DbTypeNumeric)type).Scale);
            case DbTypeCode.Blob:
                if (type.GetSpecificAttribute("mssql", "subtype") == "variant")
                {
                    return(new SqlTypeVariant());
                }
                return(new SqlTypeImage());

            case DbTypeCode.Text:
                if (((DbTypeText)type).IsUnicode)
                {
                    return(new SqlTypeNText());
                }
                else
                {
                    return(new SqlTypeText());
                }

            case DbTypeCode.Array:
                return(new SqlTypeText());

            case DbTypeCode.Float:
            {
                DbTypeFloat tp = (DbTypeFloat)type;
                if (tp.IsMoney)
                {
                    if (tp.Bytes == 8)
                    {
                        return(new SqlTypeSmallMoney());
                    }
                    return(new SqlTypeMoney());
                }
                if (tp.Bytes == 4)
                {
                    return(new SqlTypeReal());
                }
                else
                {
                    return(new SqlTypeFloat());
                }
            }

            case DbTypeCode.Xml:
                if (m_version.Is_2005())
                {
                    return(new SqlTypeXml());
                }
                return(new SqlTypeText());

            case DbTypeCode.Generic:
                return(new SqlTypeGeneric {
                    Sql = ((DbTypeGeneric)type).Sql
                });
            }
            throw new InternalError("DAE-00332 unknown type");
        }