protected virtual bool VerifyMigrationSucceeded()

in EFCore/src/Migrations/Internal/MySQLMigrator.cs [516:606]


    protected virtual bool VerifyMigrationSucceeded(
        string? targetMigration, MigrationExecutionState state)
        => false;

    protected virtual Task<bool> VerifyMigrationSucceededAsync(
        string? targetMigration, MigrationExecutionState state, CancellationToken cancellationToken)
        => Task.FromResult(false);

    public virtual string GenerateScript(
        string? fromMigration = null,
        string? toMigration = null,
        MigrationsSqlGenerationOptions options = MigrationsSqlGenerationOptions.Default)
    {
      options |= MigrationsSqlGenerationOptions.Script;

      var idempotent = options.HasFlag(MigrationsSqlGenerationOptions.Idempotent);
      var noTransactions = options.HasFlag(MigrationsSqlGenerationOptions.NoTransactions);

      IEnumerable<string> appliedMigrations;
      if (string.IsNullOrEmpty(fromMigration)
          || fromMigration == Migration.InitialDatabase)
      {
        appliedMigrations = Enumerable.Empty<string>();
      }
      else
      {
        var fromMigrationId = _migrationsAssembly.GetMigrationId(fromMigration);
        appliedMigrations = _migrationsAssembly.Migrations
            .Where(t => string.Compare(t.Key, fromMigrationId, StringComparison.OrdinalIgnoreCase) <= 0)
            .Select(t => t.Key);
      }

      PopulateMigrations(appliedMigrations, toMigration, out var migratorData);

      var builder = new IndentedStringBuilder();

      if (fromMigration == Migration.InitialDatabase
          || string.IsNullOrEmpty(fromMigration))
      {
        builder
            .Append(_historyRepository.GetCreateIfNotExistsScript())
            .Append(_sqlGenerationHelper.BatchTerminator);
      }

      var idempotencyEnd = idempotent
          ? _historyRepository.GetEndIfScript()
          : null;
      var migrationsToApply = migratorData.AppliedMigrations;
      var migrationsToRevert = migratorData.RevertedMigrations;
      var actualTargetMigration = migratorData.TargetMigration;
      var transactionStarted = false;
      for (var i = 0; i < migrationsToRevert.Count; i++)
      {
        var migration = migrationsToRevert[i];
        var previousMigration = i != migrationsToRevert.Count - 1
            ? migrationsToRevert[i + 1]
            : actualTargetMigration;

        _logger.MigrationGeneratingDownScript(this, migration, fromMigration, toMigration, idempotent);

        var idempotencyCondition = idempotent
            ? _historyRepository.GetBeginIfExistsScript(migration.GetId())
            : null;

        GenerateSqlScript(
            GenerateDownSql(migration, previousMigration, options),
            builder, _sqlGenerationHelper, ref transactionStarted, noTransactions, idempotencyCondition, idempotencyEnd);
      }

      foreach (var migration in migrationsToApply)
      {
        _logger.MigrationGeneratingUpScript(this, migration, fromMigration, toMigration, idempotent);

        var idempotencyCondition = idempotent
            ? _historyRepository.GetBeginIfNotExistsScript(migration.GetId())
            : null;

        GenerateSqlScript(
            GenerateUpSql(migration, options),
            builder, _sqlGenerationHelper, ref transactionStarted, noTransactions, idempotencyCondition, idempotencyEnd);
      }

      if (transactionStarted)
      {
        builder
            .AppendLine(_sqlGenerationHelper.CommitTransactionStatement)
            .Append(_sqlGenerationHelper.BatchTerminator);
      }

      return builder.ToString();
    }