public string Generate(IConfiguration configuration, string connectionString, string providerName, IEnumerable <string> tablesToIgnore, IEnumerable <string> indexesToIgnore, IEnumerable <KeyValuePair <string, string> > extraPluralizationWords, IAnswerProvider answerProvider) { // set up the database connection var dialectFactory = new DialectFactory(); var dialect = dialectFactory.Create(providerName, connectionString); var dbProviderFactoryFactory = new DbProviderFactoryFactory(); var dbProviderFactory = dbProviderFactoryFactory.Create(providerName, connectionString); IEnumerable <IMap> fromMaps; if (!dbProviderFactory.DatabaseExists(connectionString, providerName, dialect)) { fromMaps = Enumerable.Empty <IMap>(); return(this.GenerateScript(fromMaps, configuration.Maps, dialect, new NullStatisticsProvider(), answerProvider, tablesToIgnore, indexesToIgnore)); } else { // get the schema from the existing database var schemaReaderFactory = new SchemaReaderFactory(); var schemaReader = schemaReaderFactory.GetSchemaReader(providerName); var connectionStringManipulator = new ConnectionStringManipulator(dbProviderFactory, connectionString); using (var connection = dbProviderFactory.CreateConnection()) { connection.ConnectionString = connectionString; connection.Open(); var schema = schemaReader.Read(connection, connectionStringManipulator.GetDatabaseName()); // reverse engineer the maps var engineer = new Engineer(extraPluralizationWords.Union(configuration.Maps.Select(m => new KeyValuePair <string, string>(m.Type.Name, m.Table)))); // we use our configuration to inform us as to the correct naming of tables fromMaps = engineer.ReverseEngineer(schema, dialect, tablesToIgnore, answerProvider, false); return(this.GenerateScript(fromMaps, configuration.Maps, dialect, new StatisticsProvider(connection, dialect), answerProvider, tablesToIgnore, indexesToIgnore)); } } }
public void RootConnectionStringWorks() { var connectionStrings = new[] { "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;", "Server=myServerAddress;Uid=myUsername;Pwd=myPassword;", "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;", "Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;", "Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;Initial Catalog=myDataBase;Integrated Security=True;", @"Data Source=myServerAddress;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;" }; var correctResults = new[] { "server=myServerAddress;user id=myUsername;password=myPassword", "server=myServerAddress;user id=myUsername;password=myPassword", "Data Source=myServerAddress;User ID=myUsername;Password=myPassword", "Data Source=myServerAddress;Integrated Security=True", "Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;Integrated Security=True", @"Data Source=myServerAddress;Integrated Security=True;User ID=myDomain\myUsername;Password=myPassword" }; var providers = new[] { "MySql.Data.MySqlClient", "MySql.Data.MySqlClient", "System.Data.SqlClient", "System.Data.SqlClient", "System.Data.SqlClient", "System.Data.SqlClient" }; for (var i = 0; i < connectionStrings.Length; i++) { var connectionStringManipulator = new ConnectionStringManipulator(new ConnectionStringSettings("Default", connectionStrings[i], providers[i])); Assert.Equal(connectionStringManipulator.GetRootConnectionString().ConnectionString, correctResults[i]); } }
public static bool DatabaseExists(this DbProviderFactory dbProviderFactory, string connectionString, string providerName, ISqlDialect dialect) { var connectionStringManipulator = new ConnectionStringManipulator(dbProviderFactory, connectionString); using (var connection = dbProviderFactory.CreateConnection()) { connection.ConnectionString = connectionStringManipulator.GetRootConnectionString(); connection.Open(); var databaseName = connectionStringManipulator.GetDatabaseName(); return(connection.Query(dialect.CheckDatabaseExists(databaseName)).Any()); } }
public void NoDatabaseNameThrows() { var connectionStrings = new[] { "Server=myServerAddress;Uid=myUsername;Pwd=myPassword;", @"Data Source=myServerAddress;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;" }; var providers = new[] { "MySql.Data.MySqlClient", "System.Data.SqlClient" }; for (var i = 0; i < connectionStrings.Length; i++) { var connectionStringManipulator = new ConnectionStringManipulator(new ConnectionStringSettings("Default", connectionStrings[i], providers[i])); Assert.Throws <NotSupportedException>(() => connectionStringManipulator.GetDatabaseName()); } }
public void GetDatabaseNameWorks() { var connectionStrings = new[] { "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;", "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;", "Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;", "Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;Initial Catalog=myDataBase;Integrated Security=True;" }; var providers = new[] { "MySql.Data.MySqlClient", "MySql.Data.MySqlClient", "System.Data.SqlClient", "System.Data.SqlClient", "System.Data.SqlClient", "System.Data.SqlClient" }; for (var i = 0; i < connectionStrings.Length; i++) { var connectionStringManipulator = new ConnectionStringManipulator(new ConnectionStringSettings("Default", connectionStrings[i], providers[i])); Assert.Equal(connectionStringManipulator.GetDatabaseName(), "myDataBase"); } }
private static void CreateDatabaseIfNotExists(ConnectionStringSettings connectionStringSettings, DbProviderFactory factory, ISqlDialect dialect) { using (new TimedOperation("-- Checking for Existence of Database...")) { var connectionStringManipulator = new ConnectionStringManipulator(connectionStringSettings.ToSystem()); using (var connection = factory.CreateConnection()) { connection.ConnectionString = connectionStringManipulator.GetRootConnectionString().ConnectionString; connection.Open(); var databaseName = connectionStringManipulator.GetDatabaseName(); Trace("Looking for {0}", databaseName); if (!connection.Query(dialect.CheckDatabaseExists(databaseName)).Any()) { Trace("Not Found"); Trace("Creating"); connection.Execute(dialect.CreateDatabase(databaseName)); Trace("Created"); } else { Trace("Found!"); } } } }
public void NoDatabaseNameThrows(string connectionString) { var connectionStringManipulator = new ConnectionStringManipulator(SqlClientFactory.Instance, connectionString); Assert.Throws <NotSupportedException>(() => connectionStringManipulator.GetDatabaseName()); }
public void GetDatabaseNameWorks(string connectionString) { var connectionStringManipulator = new ConnectionStringManipulator(SqlClientFactory.Instance, connectionString); Assert.Equal("myDataBase", connectionStringManipulator.GetDatabaseName()); }
public void RootConnectionStringWorks(string connectionString, string expectedResult) { var connectionStringManipulator = new ConnectionStringManipulator(SqlClientFactory.Instance, connectionString); Assert.Equal(expectedResult, connectionStringManipulator.GetRootConnectionString()); }