internal static NpgsqlParameter GetPostgreSqlParameter(this DmColumn column) { var mySqlDbMetadata = new PostgreSqlDbMetadata(); var sqlParameter = new NpgsqlParameter { ParameterName = $"{PostgreSqlBuilderProcedure.PgsqlPrefixParameter}{column.ColumnName}", DbType = column.DbType, IsNullable = column.AllowDBNull }; (byte precision, byte scale) = mySqlDbMetadata.TryGetOwnerPrecisionAndScale(column.OriginalDbType, column.DbType, false, false, column.Precision, column.Scale, column.Table.OriginalProvider, PostgreSqlSyncProvider.ProviderType); if ((sqlParameter.DbType == DbType.Decimal || sqlParameter.DbType == DbType.Double || sqlParameter.DbType == DbType.Single || sqlParameter.DbType == DbType.VarNumeric) && precision > 0) { sqlParameter.Precision = precision; if (scale > 0) { sqlParameter.Scale = scale; } } else if (column.MaxLength > 0) { sqlParameter.Size = column.MaxLength; } else if (sqlParameter.DbType == DbType.Guid) { //sqlParameter.Size = 36; } else { sqlParameter.Size = -1; } return(sqlParameter); }
public List <DmColumn> GetTableDefinition() { List <DmColumn> columns = new List <DmColumn>(); // Get the columns definition var dmColumnsList = PostgreSqlManagementUtils.ColumnsForTable(_sqlConnection, _sqlTransaction, TableName); var postgreSqlDbMetadata = new PostgreSqlDbMetadata(); foreach (var c in dmColumnsList.Rows.OrderBy(r => (int)r["ordinal_position"])) { var typeName = c["data_type"].ToString(); var name = c["column_name"].ToString(); // Gets the datastore owner dbType var datastoreDbType = (NpgsqlDbType)postgreSqlDbMetadata.ValidateOwnerDbType(typeName, false, false); // once we have the datastore type, we can have the managed type Type columnType = postgreSqlDbMetadata.ValidateType(datastoreDbType); var dbColumn = DmColumn.CreateColumn(name, columnType); dbColumn.OriginalTypeName = typeName; dbColumn.SetOrdinal(Convert.ToInt32(c["ordinal_position"])); var maxLengthLong = c["character_octet_length"] != DBNull.Value ? Convert.ToInt64(c["character_octet_length"]) : 0; dbColumn.MaxLength = maxLengthLong > Int32.MaxValue ? Int32.MaxValue : (Int32)maxLengthLong; dbColumn.Precision = c["numeric_precision"] != DBNull.Value ? Convert.ToByte(c["numeric_precision"]) : (byte)0; dbColumn.Scale = c["numeric_scale"] != DBNull.Value ? Convert.ToByte(c["numeric_scale"]) : (byte)0; dbColumn.AllowDBNull = (String)c["is_nullable"] != "NO"; dbColumn.AutoIncrement = typeName.Contains("serial"); dbColumn.IsUnsigned = false; columns.Add(dbColumn); } return(columns); }