Esempio n. 1
0
        public TestSessionWrapper Initialize() {
            var dialect = new DialectFactory().Create(this.configuration.ConnectionStringSettings);
                
            // load the data
            using (var transactionLessSession = this.configuration.BeginTransactionLessSession()) {
                // create database if exists
                if (!dialect.IgnoreMultipleDatabases) {
                    if (transactionLessSession.Dapper.Query(dialect.CheckDatabaseExists(DatabaseName)).Any()) {
                        transactionLessSession.Dapper.Execute("drop database " + DatabaseName);
                    }

                    transactionLessSession.Dapper.Execute("create database " + DatabaseName);
                    transactionLessSession.Dapper.Execute("use " + DatabaseName);
                }
                
                var migrator = new Migrator(
                    dialect,
                    new CreateTableWriter(dialect),
                    new AlterTableWriter(dialect),
                    new DropTableWriter(dialect),
                    new StatisticsProvider(null, dialect));
                IEnumerable<string> warnings, errors;
                var createStatement = migrator.GenerateSqlDiff(
                    new List<IMap>(),
                    this.configuration.Maps,
                    null,
                    new Mock<ILogger>().Object,
                    new string[0],
                    new string[0],
                    out warnings,
                    out errors);
                var statements = createStatement.Split(';');
                foreach (var statement in statements.Where(s => !string.IsNullOrWhiteSpace(s.Trim()))) {
                    transactionLessSession.Dapper.Execute(statement);
                }
            }

            var session = this.configuration.BeginSession();
            if (!dialect.IgnoreMultipleDatabases) {
                session.Dapper.Execute("use " + DatabaseName);
            }

            this.InsertData(session);
            return new TestSessionWrapper(session);
        }
Esempio n. 2
0
        private static string GenerateMigrationScript(
            ConnectionStringSettings connectionStringSettings,
            ReverseEngineerSettings reverseEngineerSettings,
            IConfiguration configuration,
            bool naive,
            out IEnumerable<string> warnings,
            out IEnumerable<string> errors) {
            // fetch the from state
            var dialectFactory = new DialectFactory();
            var dialect = dialectFactory.Create(connectionStringSettings.ToSystem());
            var factory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);

            // create database if not exists
            CreateDatabaseIfNotExists(connectionStringSettings, factory, dialect);

            DatabaseSchema schema;
            using (new TimedOperation("-- Reading database contents...")) {
                var databaseReader = new DatabaseReader(connectionStringSettings.ConnectionString, connectionStringSettings.ProviderName);
                schema = databaseReader.ReadAll();
            }

            IEnumerable<IMap> fromMaps;
            using (new TimedOperation("-- Reverse engineering...")) {
                Console.WriteLine();
                var engineer = new Engineer(reverseEngineerSettings.ExtraPluralizationWords);
                fromMaps = engineer.ReverseEngineer(schema, dialect, reverseEngineerSettings.GetTablesToIgnore(), consoleAnswerProvider, false);
                Console.Write("-- ");
            }

            using (var connection = factory.CreateConnection()) {
                connection.ConnectionString = connectionStringSettings.ConnectionString;
                // set up migrator
                IMigrator migrator;
                if (naive) {
                    throw new NotSupportedException("The Naive Migrator is no longer supported");
                }
                migrator = new Migrator(
                    dialect,
                    new CreateTableWriter(dialect),
                    new AlterTableWriter(dialect),
                    new DropTableWriter(dialect),
                    new StatisticsProvider(connection, dialect));

                // run the migrator
                string script;
                using (new TimedOperation("-- Generating diff...")) {
                    script = migrator.GenerateSqlDiff(
                        fromMaps,
                        configuration.Maps,
                        consoleAnswerProvider,
                        new ConsoleLogger(isVerbose),
                        reverseEngineerSettings.GetIndexesToIgnore(),
                        out warnings,
                        out errors);

                    // TODO: do things with warnings and errors
                    return script;
                }
            }
        }