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(); }
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(); } }
protected override DbConnection GetConnection(TestDbMeta meta) => new SqliteConnection(meta.ConnectionString);
public override void Detach(TestDbMeta meta) { meta.Connection.Close(); _prepareQueue.TryAdd(CreateSqLiteMeta(meta.IsEmpty)); }
protected override void ResetTestDatabase(TestDbMeta meta) { // Database survives in memory until all connections closed. meta.Connection = GetConnection(meta); meta.Connection.Open(); }