private (NpgsqlProviderAdapter.NpgsqlDbType?[] npgsqlTypes, string?[] dbTypes, DbDataType[] columnTypes) BuildTypes( NpgsqlProviderAdapter adapter, PostgreSQLSqlBuilder sqlBuilder, ColumnDescriptor[] columns) { var npgsqlTypes = new NpgsqlProviderAdapter.NpgsqlDbType?[columns.Length]; var dbTypes = new string?[columns.Length]; var columnTypes = new DbDataType[columns.Length]; for (var i = 0; i < columns.Length; i++) { dbTypes[i] = columns[i].DbType; columnTypes[i] = columns[i].GetDbDataType(true); var npgsqlType = _provider.GetNativeType(columns[i].DbType, true); if (npgsqlType == null) { var sb = new System.Text.StringBuilder(); sqlBuilder.BuildTypeName(sb, new SqlQuery.SqlDataType(columnTypes[i])); npgsqlType = _provider.GetNativeType(sb.ToString(), true); } npgsqlTypes[i] = npgsqlType; if (npgsqlType == null && dbTypes[i] == null) { throw new LinqToDBException($"Cannot guess PostgreSQL type for column {columns[i].ColumnName}. Specify type explicitly in column mapping."); } } return(npgsqlTypes, dbTypes, columnTypes); }
internal static IDataProvider?ProviderDetector(IConnectionStringSettings css, string connectionString) { switch (css.ProviderName) { case ProviderName.PostgreSQL92: return(_postgreSQLDataProvider92.Value); case ProviderName.PostgreSQL93: return(_postgreSQLDataProvider93.Value); case ProviderName.PostgreSQL95: return(_postgreSQLDataProvider95.Value); case "": case null: if (css.Name == "PostgreSQL") { goto case "Npgsql"; } break; case NpgsqlProviderAdapter.ClientNamespace: case var providerName when providerName.Contains("PostgreSQL") || providerName.Contains(NpgsqlProviderAdapter.AssemblyName): if (css.Name.Contains("92") || css.Name.Contains("9.2")) return(_postgreSQLDataProvider92.Value); if (css.Name.Contains("93") || css.Name.Contains("9.3") || css.Name.Contains("94") || css.Name.Contains("9.4")) return(_postgreSQLDataProvider93.Value); if (css.Name.Contains("95") || css.Name.Contains("9.5") || css.Name.Contains("96") || css.Name.Contains("9.6")) return(_postgreSQLDataProvider95.Value); if (AutoDetectProvider) { try { var cs = string.IsNullOrWhiteSpace(connectionString) ? css.ConnectionString : connectionString; using (var conn = NpgsqlProviderAdapter.GetInstance().CreateConnection(cs)) { conn.Open(); var postgreSqlVersion = conn.PostgreSqlVersion; if (postgreSqlVersion.Major > 9 || postgreSqlVersion.Major == 9 && postgreSqlVersion.Minor > 4) { return(_postgreSQLDataProvider95.Value); } if (postgreSqlVersion.Major == 9 && postgreSqlVersion.Minor > 2) { return(_postgreSQLDataProvider93.Value); } return(_postgreSQLDataProvider92.Value); } } catch { return(_postgreSQLDataProvider92.Value); } } return(GetDataProvider()); } return(null); }
public PostgreSQL95MappingSchema() : base(ProviderName.PostgreSQL95, NpgsqlProviderAdapter.GetInstance().MappingSchema, Instance) { }