Пример #1
0
        public virtual void UpdateColumnFromSpecification(IColumn column, ColumnSpecification specification)
        {
            column.DbType = this.GetTypeFromString(specification.DbTypeName, specification.Length, specification.Precision);
            if (specification.Length.HasValue)
            {
                if (specification.Length == -1)
                {
                    column.MaxLength = true;
                }
                else
                {
                    column.Length = (ushort)specification.Length.Value;
                }
            }

            if (specification.Precision.HasValue)
            {
                column.Precision = specification.Precision.Value;
            }

            if (specification.Scale.HasValue)
            {
                column.Scale = specification.Scale.Value;
            }
        }
Пример #2
0
        protected virtual void AppendColumnType(StringBuilder sql, ColumnSpecification spec)
        {
            sql.Append(spec.DbTypeName);
            if (spec.Length.HasValue)
            {
                sql.Append("(");
                if (spec.Length == -1)
                {
                    sql.Append("max");
                }
                else
                {
                    sql.Append(spec.Length);
                }

                sql.Append(")");
            }

            if (spec.Precision.HasValue && spec.Scale.HasValue)
            {
                this.AppendPrecisionAndScale(sql, spec.Precision.Value, spec.Scale.Value);
            }
            else if (spec.Precision.HasValue)
            {
                this.AppendPrecision(sql, spec.Precision.Value);
            }
        }
Пример #3
0
        public override void UpdateColumnFromSpecification(IColumn column, ColumnSpecification specification)
        {
            if (specification.DbTypeName == "text")
            {
                specification.Length = -1; // if it's a text column then it comes back with a value of 65536 but actually we want a String with MaxLength
            }

            base.UpdateColumnFromSpecification(column, specification);
        }
Пример #4
0
        public virtual ColumnSpecification GetColumnSpecification(IColumn column)
        {
            var spec = new ColumnSpecification();

            switch (column.DbType)
            {
            case DbType.AnsiString:
                spec.DbTypeName = "varchar";
                spec.Length     = this.GetLength(column);

                break;

            case DbType.AnsiStringFixedLength:
                spec.DbTypeName = "char";
                spec.Length     = this.GetLength(column);

                break;

            case DbType.Binary:
                spec.DbTypeName = "varbinary";
                spec.Length     = -1;

                break;

            case DbType.Boolean:
                spec.DbTypeName = "boolean";

                break;

            case DbType.Byte:
                spec.DbTypeName = "tinyint unsigned";

                break;

            case DbType.Currency:
                spec.DbTypeName = "money";

                break;

            case DbType.Date:
                spec.DbTypeName = "date";

                break;

            case DbType.DateTime:
                spec.DbTypeName = "datetime";

                break;

            case DbType.DateTime2:
                spec.DbTypeName = "datetime2";
                spec.Precision  = column.Precision;

                break;

            case DbType.DateTimeOffset:
                spec.DbTypeName = "datetimeoffset";

                break;

            case DbType.Decimal:
                spec.DbTypeName = "decimal";
                spec.Precision  = column.Precision;
                spec.Scale      = column.Scale;
                break;

            case DbType.Double:
                spec.DbTypeName = "float";

                break;

            case DbType.Guid:
                spec.DbTypeName = "char";
                spec.Length     = 36;

                break;

            case DbType.Int16:
                spec.DbTypeName = "smallint";

                break;

            case DbType.Int32:
                spec.DbTypeName = "int";

                break;

            case DbType.Int64:
                spec.DbTypeName = "bigint";

                break;

            case DbType.Single:
                spec.DbTypeName = "real";

                break;

            case DbType.String:
                spec.DbTypeName = "nvarchar";
                spec.Length     = this.GetLength(column);
                break;

            case DbType.StringFixedLength:
                spec.DbTypeName = "nchar";
                spec.Length     = this.GetLength(column);
                break;

            case DbType.Time:
                spec.DbTypeName = "time";

                break;

            case DbType.SByte:
                spec.DbTypeName = "tinyint";

                break;

            case DbType.UInt16:
                spec.DbTypeName = "smallint unsigned";

                break;

            case DbType.UInt32:
                spec.DbTypeName = "int unsigned";

                break;

            case DbType.UInt64:
                spec.DbTypeName = "bigint unsigned";

                break;

            case DbType.Xml:
                spec.DbTypeName = "xml";
                break;

            default:
                throw new NotSupportedException("Unsupported type " + column.DbType);
            }

            return(spec);
        }