private ExcecutionResult ExecuteNonTransactionalCreateDatabaseSqlScripts(
            DatabaseConnectionParameters connectionParameters,
            Dictionary <string, FileInfo> filesToExecute,
            Encoding encodingForReadingSqlScripts)
        {
            IDbConnection connection = CreateDbConnection(connectionParameters);
            TransactionalSqlFileExecutor sqlFileExecutor = new TransactionalSqlFileExecutor(connection, _outputLogger);

            try
            {
                sqlFileExecutor.ExecuteNonTransactional(filesToExecute.Select(item => item.Key).ToList(), encodingForReadingSqlScripts);
            }
            catch (TransactionalSqlFileExecutorException exception)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(exception.Message);
                result.Errors.Add(exception.InnerException.Message);
                return(result);
            }

            return(new ExcecutionResult {
                Success = true
            });
        }
        public virtual ExcecutionResult ExecuteCreateDatabase(
            DatabaseConnectionParameters connectionParameters,
            Encoding encodingForReadingSqlScripts)
        {
            // Execute optional FileStructurePolicy
            if (_createDatabasePolicy != null)
            {
                PolicyResult policyResult = _createDatabasePolicy.Check(_databaseScriptsDirInfo);

                if (!policyResult.Success)
                {
                    // Policy failed Return errors
                    ExcecutionResult result = new ExcecutionResult {
                        Success = false
                    };
                    result.Errors.AddRange(policyResult.Messages);
                    return(result);
                }
            }

            SqlFilesListReader filesReader = new SqlFilesListReader(_databaseScriptsDirInfo);

            Dictionary <string, FileInfo> filesToExecute = filesReader.GetCreateDatabaseFileToExecute();

            return(ExecuteNonTransactionalCreateDatabaseSqlScripts(connectionParameters, filesToExecute, encodingForReadingSqlScripts));
        }
        public ExcecutionResult Execute(
            string fromVersion,
            string toVersion,
            DatabaseConnectionParameters connectionParameters,
            Encoding encodingForReadingSqlScripts)
        {
            var excecutionResult = new ExcecutionResult {
                Success = true
            };

            if (connectionParameters.BeforeExecuteScriptsAction == BeforeExecuteScriptsAction.CreateDatabase)
            {
                excecutionResult = ExecuteCreateDatabase(connectionParameters, encodingForReadingSqlScripts);
            }

            if (excecutionResult.Success)
            {
                excecutionResult = ExecuteAllScriptsForDatabase(fromVersion, toVersion, connectionParameters, encodingForReadingSqlScripts);
            }

            return(excecutionResult);
        }
        public virtual ExcecutionResult ExecuteAllScriptsForDatabase(
            string fromVersion,
            string toVersion,
            DatabaseConnectionParameters connectionParameters,
            Encoding encodingForReadingSqlScripts)
        {
            if (string.IsNullOrEmpty(fromVersion))
            {
                throw new ArgumentException(@"Cannot be null or empty.", "fromVersion");
            }

            if (string.IsNullOrEmpty(toVersion))
            {
                throw new ArgumentException(@"Cannot be null or empty.", "toVersion");
            }

            if (encodingForReadingSqlScripts == null)
            {
                encodingForReadingSqlScripts = Encoding.Default;
            }

            Version fromVersionObject;
            Version toVersionObject;

            try
            {
                fromVersionObject = VersionNumberHelper.RemoveNegativeNumbersFromVersionObject(new Version(fromVersion));
            }
            catch (Exception ex)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(
                    string.Format("Invalid fromVersion. Could not parse fromVersion to a usable version object. {0}", ex.Message));
                return(result);
            }

            try
            {
                toVersionObject = VersionNumberHelper.RemoveNegativeNumbersFromVersionObject(new Version(toVersion));
            }
            catch (Exception ex)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(string.Format("Invalid toVersion. Could not parse toVersion to a usable version object. {0}", ex.Message));
                return(result);
            }

            // Execute optional FileStructurePolicy
            if (_fileStructurePolicy != null)
            {
                PolicyResult policyResult = _fileStructurePolicy.Check(_databaseScriptsDirInfo);

                if (!policyResult.Success)
                {
                    // Policy failed Return errors
                    ExcecutionResult result = new ExcecutionResult {
                        Success = false
                    };
                    result.Errors.AddRange(policyResult.Messages);
                    return(result);
                }
            }

            SqlFilesListReader            filesReader    = new SqlFilesListReader(_databaseScriptsDirInfo);
            Dictionary <string, FileInfo> filesToExecute = filesReader.GetSpecificVersionedFilesToExecute(fromVersionObject, toVersionObject);

            return(ExecuteSqlScripts(connectionParameters, filesToExecute, encodingForReadingSqlScripts));
        }