コード例 #1
0
ファイル: ScriptGenerator.cs プロジェクト: kinimatt/dashing
        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));
                }
            }
        }
コード例 #2
0
        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]);
            }
        }
コード例 #3
0
        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());
            }
        }
コード例 #4
0
        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());
            }
        }
コード例 #5
0
        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");
            }
        }
コード例 #6
0
 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!");
             }
         }
     }
 }
コード例 #7
0
        public void NoDatabaseNameThrows(string connectionString)
        {
            var connectionStringManipulator = new ConnectionStringManipulator(SqlClientFactory.Instance, connectionString);

            Assert.Throws <NotSupportedException>(() => connectionStringManipulator.GetDatabaseName());
        }
コード例 #8
0
        public void GetDatabaseNameWorks(string connectionString)
        {
            var connectionStringManipulator = new ConnectionStringManipulator(SqlClientFactory.Instance, connectionString);

            Assert.Equal("myDataBase", connectionStringManipulator.GetDatabaseName());
        }
コード例 #9
0
        public void RootConnectionStringWorks(string connectionString, string expectedResult)
        {
            var connectionStringManipulator = new ConnectionStringManipulator(SqlClientFactory.Instance, connectionString);

            Assert.Equal(expectedResult, connectionStringManipulator.GetRootConnectionString());
        }