private static void FillColumn(TreeNode tableNode, DatabaseColumn column) { var sb = new StringBuilder(); sb.Append(column.Name); sb.Append(" "); sb.Append(column.DbDataType); if (column.DataType != null) { if (column.DataType.IsString && !column.DataType.IsStringClob) { sb.Append("("); var length = column.Length.GetValueOrDefault(); sb.Append(length != -1 ? length.ToString(CultureInfo.InvariantCulture) : "MAX"); sb.Append(")"); } else if (column.DataType.IsNumeric && !column.DataType.IsInt) { sb.Append("("); sb.Append(column.Precision); sb.Append(","); sb.Append(column.Scale); sb.Append(")"); } } if (!column.Nullable) { sb.Append(" NOT NULL"); } if (column.IsPrimaryKey) { sb.Append(" PK"); } if (column.IsIdentity) { sb.Append(" Identity"); if (column.IsNonTrivialIdentity()) { sb.Append('('); sb.Append(column.IdentitySeed); sb.Append(','); sb.Append(column.IdentityIncrement); sb.Append(')'); } } if (column.IsForeignKey) { sb.Append(" FK to " + column.ForeignKeyTableName); } var colNode = new TreeNode(sb.ToString()); if (!(column.Table is DatabaseView)) { colNode.Tag = column; colNode.ToolTipText = RightClickToScript; } tableNode.Nodes.Add(colNode); }
protected override string WriteDataType(DatabaseColumn column) { var defaultValue = string.Empty; if (!string.IsNullOrEmpty(column.DefaultValue)) { defaultValue = WriteDefaultValue(column); } var sql = DataTypeWriter.WriteDataType(column); if (sql == "BIT") { _hasBit = true; } if (column.IsIdentity) { bool isLong = column.DataType != null && column.DataType.GetNetType() == typeof(long); // Non trivial identities are hooked to a sequence up by AutoIncrementWriter. // Newer postgres versions require specifying UNIQUE explicitly. if (column.IsNonTrivialIdentity()) { sql = (isLong ? " BIGINT" : " INT") + " NOT NULL UNIQUE"; } else { sql = isLong ? " BIGSERIAL" : " SERIAL"; } } else { if (column.IsPrimaryKey) { sql += " NOT NULL"; } else { sql += " " + (!column.Nullable ? " NOT NULL" : string.Empty) + defaultValue; } } return(sql); }