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; } }
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); } }
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); }
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); }