public static void Write(this TableProperties tableProperties, CSideWriter writer) { writer.BeginSection("PROPERTIES"); var relevantProperties = tableProperties.Where(p => p.HasValue); foreach (Property property in relevantProperties) { var isLastProperty = (property == relevantProperties.Last()); property.Write(isLastProperty, PropertiesStyle.Object, writer); } writer.EndSection(); }
public override string ToString() { var createTableStatement = new StringBuilder(); createTableStatement.Append("CREATE TABLE "); if (!string.IsNullOrWhiteSpace(DatabaseName)) { createTableStatement.Append($"{DatabaseName}."); } createTableStatement.Append(TableName); createTableStatement.Append(" ("); // do columns createTableStatement.Append(string .Join(",", TableProperties //.Select(x => new KeyValuePair<string, Tuple<DALPropertyType, DALResolvable>>(x.Key, new Tuple<DALPropertyType, DALResolvable>(x.Value, x.Value.PropertyTypeInformation.GetCustomAttribute<DALResolvable>()))) .Select(x => new StringBuilder() .AppendLine() .Append("\t") .Append(x.ColumnName) .Append(" ") .Append(x.PropertyColumnType) .Append(x.ResolvableSettings.ColumnSize != -1 || x.ResolvableSettings.CompoundColumnSize != null ? $"({string.Join(",", x.ResolvableSettings.ColumnSize == -1 ? x.ResolvableSettings.CompoundColumnSize : new int[] { x.ResolvableSettings.ColumnSize })})" : x.DefaultColumnSize != -1 ? $"({x.DefaultColumnSize})" : x == MySqlDbType.VarChar ? throw new ArgumentException($"Cannot create table, error in DALResolvable attribute on [{TableType.Name}.{x.PropertyName}]: '{x.PropertyColumnType}' requires a column size.") : string.Empty) .Append(" ") .Append(x.ResolvableSettings.Unique ? "UNIQUE " : string.Empty) .Append(!x.ResolvableSettings.IsNullable ? "NOT " : string.Empty) .Append("NULL") .Append(x.ResolvableSettings.Autonumber ? " AUTO_INCREMENT" : string.Empty) .Append(!string.IsNullOrWhiteSpace(x.ResolvableSettings.DefaultValue) ? $" DEFAULT {x.ResolvableSettings.DefaultValue}" : string.Empty) .ToString()))); // do primary key var primaryKey = TableProperties.Where(x => x.ResolvableSettings?.PrimaryKey ?? false).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(primaryKey?.ColumnName)) { createTableStatement.Append(","); createTableStatement.AppendLine(); createTableStatement.Append($"\tPRIMARY KEY ({primaryKey.ColumnName}),"); } // do indexes var indexKeys = TableProperties.Where(x => !string.IsNullOrWhiteSpace(x.ResolvableSettings?.Index)); if (indexKeys.Count() > 0) { createTableStatement .Append(string .Join(",", indexKeys .Select(x => new Tuple <string, bool, string>(x.ResolvableSettings?.Index?.MySqlObjectQuote(), x.ResolvableSettings?.IndexDescending ?? false, x.ColumnName)) .Segment((previous, next, index) => { return(previous.Item1 != next.Item1); }) .Select(x => new StringBuilder() .AppendLine() .Append("\tINDEX ") .Append(x.FirstOrDefault().Item1) .Append(" (") .Append(string.Join(", ", x.Select(y => new StringBuilder() .Append(y.Item3) .Append(" ") .Append(y.Item2 ? "DESC" : "ASC") .ToString()))) .Append(")") .ToString()))); } createTableStatement.AppendLine(");"); createTableStatement.AppendLine(); // one last chance to set the database name Triggers.ForEach(x => x.Value.DatabaseName = DatabaseName); createTableStatement.Append(string.Join(Environment.NewLine, Triggers.Select(x => x.Value.ToString()))); return(createTableStatement.ToString()); }