protected override IParameterInfo ColumnToParameterInfo( string columnName, DbTypeMold columnType, IReadOnlyDictionary <string, string> parameterNameMappings) { var result = base.ColumnToParameterInfo(columnName, columnType, parameterNameMappings); if (result == null) { DbType dbType; int? size = null; int? precision = null; int? scale = null; var parameterName = parameterNameMappings[columnName]; var typeName = columnType.Name.ToLowerInvariant(); switch (typeName) { case "money": dbType = DbType.Currency; precision = MoneyTypePrecision; scale = MoneyTypeScale; break; default: return(null); } result = new ParameterInfoImpl(parameterName, dbType, size, precision, scale); } return(result); }
public DbTypeMold ConvertType(DbTypeMold originType, string originProviderName) { if (originType == null) { throw new ArgumentNullException(nameof(originType)); } if (originProviderName == null) { throw new ArgumentNullException(nameof(originProviderName)); } DbTypeMold convertedType; switch (originProviderName) { case DbProviderNames.SqlServer: convertedType = this.ConvertTypeFromSqlServer(originType); break; default: throw new NotSupportedException($"Conversion from '{originProviderName}' is not supported."); } if (convertedType == null) { throw new DbException($"Failed to convert type '{originType.Name}'."); } return(convertedType); }
public virtual DbTypeMold ResolveType(string typeName, int?size, int?precision, int?scale) { if (typeName == null) { throw new ArgumentNullException(nameof(typeName)); } var dbTypeMold = new DbTypeMold(); var nameCategory = this.GetTypeNameCategory(typeName); dbTypeMold.Name = typeName; switch (nameCategory) { case DbTypeNameCategory.SingleWord: // no action break; case DbTypeNameCategory.Sized: dbTypeMold.Size = size; break; case DbTypeNameCategory.PreciseNumber: dbTypeMold.Precision = precision; dbTypeMold.Scale = scale; break; default: throw new ArgumentException($"Could not resolve type '{typeName}'", nameof(typeName)); } return(dbTypeMold); }
protected virtual void WriteTypeDefinitionScriptFragment(StringBuilder sb, DbTypeMold type) { var decoratedTypeName = this.Dialect.DecorateIdentifier( DbIdentifierType.Type, type.Name, this.CurrentOpeningIdentifierDelimiter); sb.Append(decoratedTypeName); if (type.Size.HasValue) { if (type.Precision.HasValue || type.Scale.HasValue) { throw new DbException("If type has Size, it must not have Precision and Scale."); } string sizeString; if (type.Size.Value < 0) { sizeString = this.TransformNegativeTypeSize(type.Size.Value); } else { sizeString = type.Size.Value.ToString(); } sb.Append($"({sizeString})"); } else if (type.Precision.HasValue) { if (type.Size.HasValue) { throw new DbException("If type has Precision, it must not have Size."); } sb.Append($"({type.Precision.Value}"); if (type.Scale.HasValue) { sb.Append($", {type.Scale.Value}"); } sb.Append(")"); } }
protected override IParameterInfo ColumnToParameterInfo( string columnName, DbTypeMold columnType, IReadOnlyDictionary<string, string> parameterNameMappings) { DbType dbType; int? size = null; int? precision = null; int? scale = null; var parameterName = parameterNameMappings[columnName]; var typeName = columnType.Name.ToLowerInvariant(); switch (typeName) { case "uniqueidentifier": dbType = DbType.AnsiStringFixedLength; size = GuidRepresentationLength; break; case "text": dbType = DbType.String; size = -1; break; case "integer": dbType = DbType.Int64; break; case "blob": dbType = DbType.Binary; size = -1; break; default: return base.ColumnToParameterInfo(columnName, columnType, parameterNameMappings); } IParameterInfo parameterInfo = new ParameterInfoImpl(parameterName, dbType, size, precision, scale); return parameterInfo; }
protected virtual DbTypeMold ConvertTypeFromSqlServer(DbTypeMold originType) { string typeName; var originTypeName = originType.Name.ToLowerInvariant(); switch (originTypeName) { case "uniqueidentifier": typeName = "UNIQUEIDENTIFIER"; break; case "char": case "nchar": case "varchar": case "nvarchar": case "text": case "ntext": typeName = "TEXT"; break; case "bit": case "int": case "integer": case "tinyint": case "smallint": case "bigint": typeName = "INTEGER"; break; case "binary": case "varbinary": case "image": typeName = "BLOB"; break; case "double": case "float": case "real": typeName = "REAL"; break; case "money": case "decimal": case "numeric": typeName = "NUMERIC"; break; case "datetime": case "date": typeName = "DATETIME"; break; default: return(null); } var result = new DbTypeMold { Name = typeName, }; return(result); }