public IDbConnection OpenConnection(ConnectionInfo connectionInfo) { if (_connection == null) { DbProviderFactory factory = GetDbProviderFactory(connectionInfo); var connection = factory.CreateConnection(); if (connection == null) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Unable to create a connection for ADO.NET provider '{0}'.", connectionInfo.ProviderInvariantName)); } connection.ConnectionString = connectionInfo.ConnectionString; connection.Open(); // enable ANSI quoting if needed if (!string.IsNullOrEmpty(connectionInfo.EnableAnsiQuotesCommand)) { DbCommand command = connection.CreateCommand(); command.CommandText = connectionInfo.EnableAnsiQuotesCommand; command.ExecuteNonQuery(); } return connection; } else { return _connection; } }
public RuntimeConfiguration(ProviderInfo providerInfo, ConnectionInfo connectionInfo, IValidator validator, ISqlDispatcher sqlDispatcher) { _providerInfo = providerInfo; _connectionInfo = connectionInfo; _validator = validator; _sqlDispatcher = sqlDispatcher; }
public MigrationStep(IMigration migration, IScheduledMigrationMetadata metadata, ConnectionInfo connectionInfo, IProvider provider, IProviderMetadata providerMetadata, IDbConnectionFactory connectionFactory, ISqlDispatcher sqlDispatcher) : base(migration, provider, providerMetadata) { _metadata = metadata; _connectionInfo = connectionInfo; _connectionFactory = connectionFactory; _sqlDispatcher = sqlDispatcher; }
private RuntimeConfiguration CreateRuntimeConfiguration(string connectionString, DbPlatform dbPlatform, DbAltererOptions options) { var providerLocator = new ProviderLocator(new ProviderFactory()); // CLEAN: use DI container var providerInfo = providerLocator.GetLatest(dbPlatform); var validatorFactory = new ValidatorFactory(providerInfo, options, providerLocator); var validator = validatorFactory.Create(); var connectionInfo = new ConnectionInfo(connectionString, providerInfo.Metadata.InvariantName, providerInfo.Metadata.SupportsTransactions, providerInfo.Metadata.EnableAnsiQuotesCommand); var sqlDispatcher = new SqlDispatcher(options.GetScriptingOptions(), providerInfo.Provider, providerInfo.Metadata); return new RuntimeConfiguration(providerInfo, connectionInfo, validator, sqlDispatcher); }
public IDbConnection OpenConnection(ConnectionInfo connectionInfo) { DbProviderFactory factory = GetDbProviderFactory(connectionInfo); var connection = factory.CreateConnection(); if (connection == null) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Unable to create a connection for ADO.NET provider '{0}'.", connectionInfo.ProviderInvariantName)); } connection.ConnectionString = connectionInfo.ConnectionString; connection.Open(); return connection; }
internal Versioning(ConnectionInfo connectionInfo, IDbConnectionFactory connectionFactory, IProvider provider, IProviderMetadata providerMetadata, string versioningTableName, ISqlDispatcher sqlDispatcher) { _connectionInfo = connectionInfo; _connectionFactory = connectionFactory; _provider = provider; _providerMetadata = providerMetadata; _versioningTableName = versioningTableName; _sqlDispatcher = sqlDispatcher; _versioningTableExists = new Lazy<bool>(() => { int exists; using (IDbConnection connection = connectionFactory.OpenConnection(connectionInfo)) { IDbCommand command = connection.CreateCommand(); command.CommandTimeout = 0; // do not timeout; the client is responsible for not causing lock-outs command.CommandText = provider.ExistsTable(connection.Database, _versioningTableName); Log.Verbose(LogCategory.Sql, command.CommandText); exists = Convert.ToInt32(command.ExecuteScalar(), CultureInfo.InvariantCulture); } return exists != 0; }); }
public void TestScriptingAllMigrations() { DirectoryInfo targetDirectory = PrepareScriptingDirectory(); _options.VersioningTableName = "My Versioning Table"; // test overriding the default versioning table name _options.OnlyScriptSqlTo(targetDirectory); Migrator migrator = CreateMigrator(); migrator.MigrateAll(typeof(Migration1).Assembly); // assert that all script files were generated List<FileInfo> scriptFiles = targetDirectory.GetFiles(string.Format(CultureInfo.InvariantCulture, "Migration.*.*.sql")) .OrderBy(f => int.Parse(Regex.Match(f.Name, @"Migration\..*\.(\d+)\.sql").Groups[1].Value, CultureInfo.InvariantCulture)) .ToList(); Assert.AreEqual(Migrations.Count, scriptFiles.Count); Assert.AreEqual("Migration." + MigrationExportAttribute.DefaultModuleName + ".1.sql", scriptFiles[0].Name); Assert.AreEqual("Migration." + Migration2.Module + ".2.sql", scriptFiles[1].Name); // assert Versioning table was *not* created as we are scripting only DataTable versioningTable = GetTable(_options.VersioningTableName); Assert.IsNull(versioningTable, string.Format(CultureInfo.CurrentCulture, "The '{0}' table was created altough ScriptingMode was ScriptOnly.", _options.VersioningTableName)); // assert Customer table was *not* created as we are scripting only var migration1 = new Migration1(); DataTable customerTable = GetTable(migration1.Tables[0].Name); Assert.IsNull(customerTable, string.Format(CultureInfo.CurrentCulture, "The '{0}' table was created altough ScriptingMode was ScriptOnly.", migration1.Tables[0].Name)); // execute generated script files against database and recheck results IProviderMetadata providerMetadata; _options.SupportedProviders.GetProvider(ProviderName, out providerMetadata); var info = new ConnectionInfo(ConnectionString, providerMetadata.InvariantName, providerMetadata.SupportsTransactions, providerMetadata.EnableAnsiQuotesCommand); using (IDbConnection connection = migrator.ConnectionFactory.OpenConnection(info)) { foreach (FileInfo scriptFile in scriptFiles) { Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Reading script '{0}':", scriptFile.FullName)); string[] scriptLines = File.ReadAllLines(scriptFile.FullName); foreach (string line in scriptLines) { Trace.WriteLine(line); } // group all lines between empty lines into one command (some database platforms require DDL operations to // be executed in separated commands) Trace.WriteLine(Environment.NewLine + string.Format(CultureInfo.CurrentCulture, "Executing script '{0}':", scriptFile.FullName)); string commandText = string.Empty; foreach (string line in scriptLines) { if (line.Trim().Length != 0) { commandText += line; } else { ExecuteCommand(commandText, connection); commandText = string.Empty; } } Assert.IsEmpty(commandText, "The script should end with an empty line."); } } VerifyResultsOfAllMigrations(); // delete script files targetDirectory.Delete(true); }
public DbProviderFactory GetDbProviderFactory(ConnectionInfo connectionInfo) { return DbProviderFactories.GetFactory(connectionInfo.ProviderInvariantName); }