Esempio n. 1
0
 protected DocumenterBase(DocumenterContextBase context, SqlEngineVersion version, string databaseName = "")
 {
     Context      = context;
     Version      = version;
     DatabaseName = databaseName;
     Helper       = new DocumenterHelper(context.Settings);
 }
Esempio n. 2
0
 protected DocumenterWriterBase(IDocumenterWriter documenterWriter, DocumenterContext context, SqlEngineVersion version, string databaseName = "", string fileName = null)
     : base(context, version, databaseName)
 {
     DocumenterWriter = documenterWriter;
     Helper           = new DocumenterHelper(context.Settings);
     FileName         = fileName;
 }
        protected override void AddForeignKeySettingsMultiColumn(StringBuilder sb, DocumenterHelper helper, ForeignKey fkOnColumn)
        {
            sb.AppendLine(";")
            .AppendLine("")
            .AppendLine("#pragma warning disable IDE1006 // Naming Styles")
            .Append(2, "public ForeignKey ")
            .Append(fkOnColumn.Name)
            .Append(" { get; } = ")
            .Append(Version)
            .Append(".SetForeignKeyTo(nameof(")
            .Append(helper.GetSimplifiedSchemaAndTableName(fkOnColumn.ReferredTable.SchemaAndTableName, DatabaseDeclaration.SchemaTableNameSeparator.ToString(CultureInfo.InvariantCulture)))
            .Append("), ")
            .AppendLine("new []")
            .AppendLine("#pragma warning restore IDE1006 // Naming Styles")
            .AppendLine(3, "{");

            foreach (var fkColumnMap in fkOnColumn.ForeignKeyColumns)
            {
                sb.Append(4, "new ColumnReference(")
                .Append("nameof(")
                .Append(fkColumnMap.ForeignKeyColumn.Name)
                .Append("), nameof(")
                .Append(fkColumnMap.ReferredColumn.Table.SchemaAndTableName)
                .Append('.')
                .Append(fkColumnMap.ReferredColumn.Name)
                .AppendLine(")),");
            }

            sb.Append(3, "})");
        }
        protected void AddForeignKeySettings(SqlColumn column, StringBuilder sb, DocumenterHelper helper)
        {
            var fkOnColumn = column.Table.Properties.OfType <ForeignKey>().FirstOrDefault(fk => fk.ForeignKeyColumns.Any(fkc => fkc.ForeignKeyColumn == column));

            if (fkOnColumn != null)
            {
                if (GeneratorContext.GeneratorSettings.ShouldCommentOutFkReferences &&
                    GeneratorContext.Customizer?.ShouldSkip(fkOnColumn.ReferredTable.SchemaAndTableName) == true)
                {
                    sb.Append("; //");
                }

                // TODO gen AddForeignkeys?
                if (fkOnColumn.ForeignKeyColumns.Count == 1)
                {
                    AddForeignKeySettingsSingleColumn(sb, helper, fkOnColumn);
                }
                else
                {
                    // Only create after last
                    if (column == fkOnColumn.ForeignKeyColumns.Last().ForeignKeyColumn)
                    {
                        AddForeignKeySettingsMultiColumn(sb, helper, fkOnColumn);
                    }
                }
            }
        }
        protected virtual void AddForeignKeySettingsSingleColumn(StringBuilder sb, DocumenterHelper helper, ForeignKey fkOnColumn)
        {
            var tableName = helper.GetSimplifiedSchemaAndTableName(fkOnColumn.ReferredTable.SchemaAndTableName, DatabaseDeclaration.SchemaTableNameSeparator.ToString(CultureInfo.InvariantCulture));

            sb.Append(".SetForeignKeyToColumn(nameof(")
            .Append(DatabaseName)
            .Append('.')
            .Append(tableName)
            .Append("), nameof(")
            .Append(tableName)
            .Append("Table.")
            .Append(fkOnColumn.ForeignKeyColumns[0].ReferredColumn.Name)
            .Append(')');

            // table.AddInt("PrimaryId").SetForeignKeyToTable(nameof(Primary), new SqlEngineVersionSpecificProperty(MsSqlVersion.MsSql2016, "Nocheck", "true")
            sb.Append(AddSqlEngineVersionSpecificProperties(fkOnColumn.SqlEngineVersionSpecificProperties));

            sb.Append(')');
        }
        protected override void AddForeignKeySettingsMultiColumn(StringBuilder sb, DocumenterHelper helper, ForeignKey fkOnColumn)
        {
            sb.AppendLine(";")
            .Append(3, "table.SetForeignKeyTo(nameof(")
            .Append(helper.GetSimplifiedSchemaAndTableName(fkOnColumn.ReferredTable.SchemaAndTableName, DatabaseDeclaration.SchemaTableNameSeparator.ToString(CultureInfo.InvariantCulture)))
            .AppendLine("), ");

            sb.Append("new []")
            .AppendLine(4, "{");

            foreach (var fkColumnMap in fkOnColumn.ForeignKeyColumns)
            {
                sb.Append(5, "new ColumnReference(\"")
                .Append(fkColumnMap.ForeignKeyColumn.Name)
                .Append("\", \"")
                .Append(fkColumnMap.ReferredColumn.Name)
                .AppendLine("\"),");
            }

            sb.Append(3, "})");
        }
        public override string GetColumnCreation(SqlColumn column, DocumenterHelper helper, string extraAnnotation, string comment)
        {
            var sb = new StringBuilder();

            if (GeneratorContext.GeneratorSettings.ShouldCommentOutColumnsWithFkReferencedTables &&
                IsForeignKeyReferencedTableSkipped(column))
            {
                sb.Append("// ");
            }

            sb.Append(3, "table.")
            .Append(GetColumnCreationMethod(column))
            .Append(IsNullable(column))
            .Append(')');

            if (column.Table.Properties.OfType <PrimaryKey>().Any(x => x.SqlColumns.Any(y => y.SqlColumn == column)))
            {
                sb.Append(".SetPK()");
            }

            if (column.Properties.OfType <Identity>().Any())
            {
                sb.Append(".SetIdentity()");
            }

            if (!GeneratorContext.GeneratorSettings.NoForeignKeys)
            {
                AddForeignKeySettings(column, sb, helper);
            }

            // TODO Default Value + config

            if (!string.IsNullOrEmpty(extraAnnotation))
            {
                sb.Append(extraAnnotation);
            }

            sb.Append(';');

            var descriptionProperty = column.Properties.OfType <SqlColumnDescription>().FirstOrDefault();
            var description         = descriptionProperty?.Description
                                      ?.Replace("\r", "", StringComparison.OrdinalIgnoreCase)
                                      ?.Replace("\n", "", StringComparison.OrdinalIgnoreCase)
                                      ?.Trim();

            if (!string.IsNullOrEmpty(description))
            {
                sb.Append(" // ").Append(description);

                if (!string.IsNullOrEmpty(comment))
                {
                    sb.Append(' ').Append(comment);
                }
            }
            else if (!string.IsNullOrEmpty(comment))
            {
                sb.Append(" // ").Append(comment);
            }

            return(sb.ToString());
        }
 protected abstract void AddForeignKeySettingsMultiColumn(StringBuilder sb, DocumenterHelper helper, ForeignKey fkOnColumn);
 public abstract string GetColumnCreation(SqlColumn column, DocumenterHelper helper, string extraAnnotation, string comment);