Beispiel #1
0
        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());
        }