protected override void RebuildSchema(IDbCommand command, TestDbMeta meta)
    {
        using var connection = GetConnection(meta);
        connection.Open();

        lock (_cachedDatabaseInitCommands)
        {
            if (!_cachedDatabaseInitCommands.Any())
            {
                RebuildSchemaFirstTime(meta);
                return;
            }
        }

        // Get NPoco to handle all the type mappings (e.g. dates) for us.
        var database = new Database(connection, DatabaseType.SQLite);

        database.BeginTransaction();

        database.Mappers.Add(new NullableDateMapper());
        database.Mappers.Add(new SqlitePocoGuidMapper());

        foreach (var dbCommand in _cachedDatabaseInitCommands)
        {
            database.Execute(dbCommand.Text, dbCommand.Parameters.Select(x => x.Value).ToArray());
        }

        database.CompleteTransaction();
    }
    private void RebuildSchemaFirstTime(TestDbMeta meta)
    {
        var dbFactory = _dbFactoryProvider.Create();

        dbFactory.Configure(meta.ToStronglyTypedConnectionString());

        using var database   = (UmbracoDatabase)dbFactory.CreateDatabase();
        database.LogCommands = true;

        using var transaction = database.GetTransaction();

        var options =
            new TestOptionsMonitor <InstallDefaultDataSettings>(
                new InstallDefaultDataSettings {
            InstallData = InstallDefaultDataOption.All
        });

        var schemaCreator = new DatabaseSchemaCreator(
            database,
            _loggerFactory.CreateLogger <DatabaseSchemaCreator>(),
            _loggerFactory,
            new UmbracoVersion(),
            Mock.Of <IEventAggregator>(),
            options);

        schemaCreator.InitializeDatabaseSchema();
        transaction.Complete();

        _cachedDatabaseInitCommands = database.Commands
                                      .Where(x => !x.Text.StartsWith("SELECT ", StringComparison.OrdinalIgnoreCase))
                                      .ToArray();
    }
    private void CreateDatabase(TestDbMeta meta)
    {
        Drop(meta);

        using (var connection = new SqlConnection(_settings.SQLServerMasterConnectionString))
        {
            connection.Open();
            using (var command = connection.CreateCommand())
            {
                SetCommand(command, $@"CREATE DATABASE {LocalDb.QuotedName(meta.Name)}");
                command.ExecuteNonQuery();
            }
        }
    }
    public SqlServerTestDatabase(TestDatabaseSettings settings, ILoggerFactory loggerFactory, IUmbracoDatabaseFactory databaseFactory)
    {
        _loggerFactory   = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
        _databaseFactory = databaseFactory ?? throw new ArgumentNullException(nameof(databaseFactory));

        _settings = settings;

        var counter = 0;

        var schema = Enumerable.Range(0, _settings.SchemaDatabaseCount)
                     .Select(x => TestDbMeta.CreateWithMasterConnectionString($"{DatabaseName}-{++counter}", false, _settings.SQLServerMasterConnectionString));

        var empty = Enumerable.Range(0, _settings.EmptyDatabasesCount)
                    .Select(x => TestDbMeta.CreateWithMasterConnectionString($"{DatabaseName}-{++counter}", true, _settings.SQLServerMasterConnectionString));

        _testDatabases = schema.Concat(empty).ToList();
    }
Beispiel #5
0
    protected override void RebuildSchema(IDbCommand command, TestDbMeta meta)
    {
        lock (_cachedDatabaseInitCommands)
        {
            if (!_cachedDatabaseInitCommands.Any())
            {
                RebuildSchemaFirstTime(meta);
                return;
            }
        }

        foreach (UmbracoDatabase.CommandInfo dbCommand in _cachedDatabaseInitCommands)
        {
            command.CommandText = dbCommand.Text;
            command.Parameters.Clear();

            foreach (UmbracoDatabase.ParameterInfo parameterInfo in dbCommand.Parameters)
            {
                AddParameter(command, parameterInfo);
            }

            command.ExecuteNonQuery();
        }
    }
Beispiel #6
0
 protected override DbConnection GetConnection(TestDbMeta meta) => new SqliteConnection(meta.ConnectionString);
Beispiel #7
0
 public override void Detach(TestDbMeta meta)
 {
     meta.Connection.Close();
     _prepareQueue.TryAdd(CreateSqLiteMeta(meta.IsEmpty));
 }
Beispiel #8
0
 protected override void ResetTestDatabase(TestDbMeta meta)
 {
     // Database survives in memory until all connections closed.
     meta.Connection = GetConnection(meta);
     meta.Connection.Open();
 }