public ICommandChannel Create(CreationParameters <SqliteConnectionStringBuilder> creationParameters) { if (creationParameters.ConnectionString.DataSource == ":memory:") { throw new NotSupportedException("Use " + nameof(MemorySqliteCommandChannelFactory)); } CreationOrDeletionLock.EnterUpgradeableReadLock(); try { if (creationParameters.EraseIfExists) { DeleteIfExists(creationParameters.ConnectionString); } CreationOrDeletionLock.EnterWriteLock(); try { var derivedConnectionString = new SqliteConnectionStringBuilder(creationParameters.ConnectionString.ToString()) { Mode = SqliteOpenMode.ReadWriteCreate }; var connection = new SqliteConnection(derivedConnectionString.ToString()); connection.Open(); var adapter = new CommandChannel(new ThreadSafeConnection(new Connection(new SqliteConnection(creationParameters.ConnectionString.ToString())))); foreach (var script in creationParameters.AdditionalScripts.Prepend(creationParameters.Script)) { if (!string.IsNullOrWhiteSpace(script)) { adapter.Execute(script); } } return(adapter); } finally { CreationOrDeletionLock.ExitWriteLock(); } } finally { CreationOrDeletionLock.ExitUpgradeableReadLock(); } }
public ICommandChannel Create(CreationParameters <MemorySqliteConnectionStringBuilder> creationParameters) { var mustPlayCreationScripts = true; var connection = Instances.AddOrUpdate( creationParameters.ConnectionString.MemoryInstanceGuid, guid => new SqliteConnection(creationParameters.ConnectionString.ConnectionString), (guid, previous) => { mustPlayCreationScripts = creationParameters.EraseIfExists; return(creationParameters.EraseIfExists ? new SqliteConnection(creationParameters.ConnectionString.ConnectionString) : previous); }); var channel = new CommandChannel(new MemoryConnection(connection)); if (mustPlayCreationScripts) { channel.Execute(creationParameters.Script); foreach (var creationParametersAdditionalScript in creationParameters.AdditionalScripts) { channel.Execute(creationParametersAdditionalScript); } } return(channel); }