protected override List <ColumnSchema> GetProcedureResultColumns(DataTable resultTable) { return (( from r in resultTable.AsEnumerable() let columnName = r.Field <string>("ColumnName") let columnType = Converter.ChangeTypeTo <string>(r["DataTypeName"]) let dataType = DataTypes.FirstOrDefault(t => t.TypeName == columnType) // AllowDBNull not set even with KeyInfo behavior suggested here: // https://github.com/npgsql/npgsql/issues/1693 let isNullable = r.IsNull("AllowDBNull") ? true : r.Field <bool>("AllowDBNull") let length = r.IsNull("ColumnSize") ? (int?)null : r.Field <int>("ColumnSize") let precision = r.IsNull("NumericPrecision") ? (int?)null : r.Field <int>("NumericPrecision") let scale = r.IsNull("NumericScale") ? (int?)null : r.Field <int>("NumericScale") let providerType = r.IsNull("DataType") ? null : r.Field <Type>("DataType") let systemType = GetSystemType(columnType, null, dataType, length, precision, scale) ?? providerType ?? typeof(object) select new ColumnSchema { ColumnName = columnName, ColumnType = GetDbType(columnType, dataType, length, precision, scale), IsNullable = isNullable, MemberName = ToValidName(columnName), MemberType = ToTypeName(systemType, isNullable), ProviderSpecificType = GetProviderSpecificType(columnType), SystemType = systemType, DataType = GetDataType(columnType, null, length, precision, scale), } ).ToList()); }
/// <summary> /// The return data type. /// </summary> /// <param name="dataTypeId"> /// The data type id. /// </param> /// <returns> /// The <see cref="IDataType"/>. /// </returns> public static IDataType ReturnDataType(Guid dataTypeId) { if (DataTypes == null || !DataTypes.Any()) { return(null); } return(DataTypes.FirstOrDefault( d => d.Metadata["ValueMetaData"].ToString().ToLower() == dataTypeId.ToString().ToLower()).Value); }
protected override string GetDbType(string columnType, DataTypeInfo dataType, long?length, int?prec, int?scale) { var type = DataTypes.FirstOrDefault(dt => dt.TypeName == columnType); if (type != null) { if (type.CreateParameters == null) { length = prec = scale = 0; } else { if (type.CreateParameters == "LENGTH") { prec = scale = 0; } else { length = 0; } if (type.CreateFormat == null) { if (type.TypeName.IndexOf("()") >= 0) { type.CreateFormat = type.TypeName.Replace("()", "({0})"); } else { var format = string.Join(",", type.CreateParameters .Split(',') .Select((p, i) => "{" + i + "}") .ToArray()); type.CreateFormat = type.TypeName + "(" + format + ")"; } } } } return(base.GetDbType(columnType, dataType, length, prec, scale)); }
protected override List <ColumnSchema> GetProcedureResultColumns(DataTable resultTable) { #if !NETSTANDARD return (( from r in resultTable.AsEnumerable() let providerType = Converter.ChangeTypeTo <int>(r["ProviderType"]) let dataType = DataTypes.FirstOrDefault(t => t.ProviderDbType == providerType) let columnType = dataType == null ? null : dataType.TypeName let columnName = r.Field <string>("ColumnName") let isNullable = r.Field <bool>("AllowDBNull") let length = r.Field <int>("ColumnSize") let precision = Converter.ChangeTypeTo <int>(r["NumericPrecision"]) let scale = Converter.ChangeTypeTo <int>(r["NumericScale"]) let systemType = GetSystemType(columnType, null, dataType, length, precision, scale) select new ColumnSchema { ColumnName = columnName, ColumnType = GetDbType(columnType, dataType, length, precision, scale), IsNullable = isNullable, MemberName = ToValidName(columnName), MemberType = ToTypeName(systemType, isNullable), SystemType = systemType ?? typeof(object), DataType = GetDataType(columnType, null, length, precision, scale), ProviderSpecificType = GetProviderSpecificType(columnType), IsIdentity = r.IsNull("IsIdentity") ? false : r.Field <bool>("IsIdentity") } ).ToList()); #else return(new List <ColumnSchema>()); #endif }
protected override List <ColumnSchema> GetProcedureResultColumns(DataTable resultTable) { return (( from r in resultTable.AsEnumerable() let systemType = r.Field <Type>("DataType") let columnName = GetEmptyStringIfInvalidColumnName(r.Field <string>("ColumnName")) let providerType = Converter.ChangeTypeTo <int>(r["ProviderType"]) let dataType = DataTypes.FirstOrDefault(t => t.ProviderDbType == providerType) let columnType = dataType == null ? null : dataType.TypeName let length = r.Field <int>("ColumnSize") let precision = Converter.ChangeTypeTo <int>(r["NumericPrecision"]) let scale = Converter.ChangeTypeTo <int>(r["NumericScale"]) let isNullable = Converter.ChangeTypeTo <bool>(r["AllowDBNull"]) select new ColumnSchema { ColumnType = GetDbType(columnType, dataType, length, precision, scale, null, null, null), ColumnName = columnName, IsNullable = isNullable, MemberName = ToValidName(columnName), MemberType = ToTypeName(systemType, isNullable), SystemType = systemType ?? typeof(object), DataType = GetDataType(columnType, null, length, precision, scale), ProviderSpecificType = GetProviderSpecificType(columnType), } ).ToList()); }