示例#1
0
        public async Task HandleSchemaCompareIncludeExcludeNodeRequest(SchemaCompareNodeParams parameters, RequestContext <ResultStatus> requestContext)
        {
            SchemaCompareIncludeExcludeNodeOperation operation = null;

            try
            {
                SchemaComparisonResult compareResult = schemaCompareResults.Value[parameters.OperationId];
                operation = new SchemaCompareIncludeExcludeNodeOperation(parameters, compareResult);
                SqlTask      sqlTask  = null;
                TaskMetadata metadata = new TaskMetadata();
                metadata.TaskOperation = operation;
                metadata.Name          = parameters.IncludeRequest ? SR.IncludeNodeTaskName : SR.ExcludeNodeTaskName;

                sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);

                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = true,
                    ErrorMessage = operation.ErrorMessage
                });
            }
            catch (Exception e)
            {
                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = false,
                    ErrorMessage = operation == null ? e.Message : operation.ErrorMessage,
                });
            }
        }
示例#2
0
        /// <summary>
        /// Handles request for schema compare generate deploy script
        /// </summary>
        /// <returns></returns>
        public async Task HandleSchemaCompareGenerateScriptRequest(SchemaCompareGenerateScriptParams parameters, RequestContext <ResultStatus> requestContext)
        {
            SchemaCompareGenerateScriptOperation operation = null;

            try
            {
                SchemaComparisonResult compareResult = schemaCompareResults.Value[parameters.OperationId];
                operation = new SchemaCompareGenerateScriptOperation(parameters, compareResult);
                SqlTask      sqlTask  = null;
                TaskMetadata metadata = new TaskMetadata();
                metadata.TaskOperation = operation;
                // want to show filepath in task history instead of server and database
                metadata.ServerName   = parameters.ScriptFilePath;
                metadata.DatabaseName = string.Empty;
                metadata.Name         = SR.GenerateScriptTaskName;

                sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);

                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = true,
                    ErrorMessage = operation.ErrorMessage
                });
            }
            catch (Exception e)
            {
                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = false,
                    ErrorMessage = operation == null ? e.Message : operation.ErrorMessage,
                });
            }
        }
示例#3
0
        /// <summary>
        /// Handles request for schema compare publish changes script
        /// </summary>
        /// <returns></returns>
        public async Task HandleSchemaComparePublishChangesRequest(SchemaComparePublishChangesParams parameters, RequestContext <ResultStatus> requestContext)
        {
            SchemaComparePublishChangesOperation operation = null;

            try
            {
                SchemaComparisonResult compareResult = schemaCompareResults.Value[parameters.OperationId];
                operation = new SchemaComparePublishChangesOperation(parameters, compareResult);
                SqlTask      sqlTask  = null;
                TaskMetadata metadata = new TaskMetadata();
                metadata.TaskOperation = operation;
                metadata.ServerName    = parameters.TargetServerName;
                metadata.DatabaseName  = parameters.TargetDatabaseName;
                metadata.Name          = SR.PublishChangesTaskName;

                sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);

                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = true,
                    ErrorMessage = operation.ErrorMessage
                });
            }
            catch (Exception e)
            {
                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = false,
                    ErrorMessage = operation == null ? e.Message : operation.ErrorMessage,
                });
            }
        }
示例#4
0
        private void ExecuteOperation(DacFxOperation operation, DacFxParams parameters, string taskName, RequestContext <DacFxResult> requestContext)
        {
            Task.Run(async() =>
            {
                try
                {
                    TaskMetadata metadata = TaskMetadata.Create(parameters, taskName, operation, ConnectionServiceInstance);

                    // put appropriate database name since connection passed was to master
                    metadata.DatabaseName = parameters.DatabaseName;
                    SqlTask sqlTask       = SqlTaskManagerInstance.CreateTask <SqlTask>(metadata);

                    await sqlTask.RunAsync();
                    await requestContext.SendResult(new DacFxResult()
                    {
                        OperationId  = operation.OperationId,
                        Success      = sqlTask.TaskStatus == SqlTaskStatus.Succeeded,
                        ErrorMessage = string.Empty
                    });
                }
                catch (Exception e)
                {
                    await requestContext.SendResult(new DacFxResult()
                    {
                        OperationId  = operation.OperationId,
                        Success      = false,
                        ErrorMessage = e.Message
                    });
                }
            });
        }
示例#5
0
        /// <summary>
        /// Handles request for schema compare generate deploy script
        /// </summary>
        /// <returns></returns>
        public async Task HandleSchemaCompareGenerateScriptRequest(SchemaCompareGenerateScriptParams parameters, RequestContext <ResultStatus> requestContext)
        {
            SchemaCompareGenerateScriptOperation operation = null;

            try
            {
                SchemaComparisonResult compareResult = schemaCompareResults.Value[parameters.OperationId];
                operation = new SchemaCompareGenerateScriptOperation(parameters, compareResult);
                SqlTask      sqlTask  = null;
                TaskMetadata metadata = new TaskMetadata();
                metadata.TaskOperation     = operation;
                metadata.TaskExecutionMode = parameters.TaskExecutionMode;
                metadata.ServerName        = parameters.TargetServerName;
                metadata.DatabaseName      = parameters.TargetDatabaseName;
                metadata.Name = SR.GenerateScriptTaskName;

                sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);

                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = true,
                    ErrorMessage = operation.ErrorMessage
                });
            }
            catch (Exception e)
            {
                Logger.Write(TraceEventType.Error, "Failed to generate schema compare script. Error: " + e);
                await requestContext.SendResult(new ResultStatus()
                {
                    Success      = false,
                    ErrorMessage = operation == null ? e.Message : operation.ErrorMessage,
                });
            }
        }
示例#6
0
        /// <summary>
        /// Handles request to generate deploy script
        /// </summary>
        /// <returns></returns>
        public async Task HandleGenerateDeployScriptRequest(GenerateDeployScriptParams parameters, RequestContext <DacFxResult> requestContext)
        {
            try
            {
                ConnectionInfo connInfo;
                ConnectionServiceInstance.TryFindConnection(
                    parameters.OwnerUri,
                    out connInfo);
                if (connInfo != null)
                {
                    GenerateDeployScriptOperation operation = new GenerateDeployScriptOperation(parameters, connInfo);
                    SqlTask      sqlTask  = null;
                    TaskMetadata metadata = new TaskMetadata();
                    metadata.TaskOperation     = operation;
                    metadata.TaskExecutionMode = parameters.TaskExecutionMode;
                    metadata.ServerName        = connInfo.ConnectionDetails.ServerName;
                    metadata.DatabaseName      = parameters.DatabaseName;
                    metadata.Name = SR.GenerateScriptTaskName;

                    sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);

                    await requestContext.SendResult(new DacFxResult()
                    {
                        OperationId  = operation.OperationId,
                        Success      = true,
                        ErrorMessage = string.Empty
                    });
                }
            }
            catch (Exception e)
            {
                await requestContext.SendError(e);
            }
        }
示例#7
0
        /// <summary>
        /// Handles request to generate deploy script
        /// </summary>
        /// <returns></returns>
        public async Task HandleGenerateDeployScriptRequest(GenerateDeployScriptParams parameters, RequestContext <DacFxResult> requestContext)
        {
            try
            {
                ConnectionInfo connInfo;
                ConnectionServiceInstance.TryFindConnection(
                    parameters.OwnerUri,
                    out connInfo);
                if (connInfo != null)
                {
                    GenerateDeployScriptOperation operation = new GenerateDeployScriptOperation(parameters, connInfo);
                    SqlTask      sqlTask  = null;
                    TaskMetadata metadata = TaskMetadata.Create(parameters, SR.GenerateScriptTaskName, operation, ConnectionServiceInstance);

                    // want to show filepath in task history instead of server and database
                    metadata.ServerName   = parameters.ScriptFilePath;
                    metadata.DatabaseName = string.Empty;

                    sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);

                    await requestContext.SendResult(new DacFxResult()
                    {
                        OperationId  = operation.OperationId,
                        Success      = true,
                        ErrorMessage = string.Empty
                    });
                }
            }
            catch (Exception e)
            {
                await requestContext.SendError(e);
            }
        }
        /// <summary>
        /// Handles a restore request
        /// </summary>
        internal async Task HandleRestoreRequest(
            RestoreParams restoreParams,
            RequestContext <RestoreResponse> requestContext)
        {
            RestoreResponse response = new RestoreResponse();

            try
            {
                ConnectionInfo connInfo;
                bool           supported = IsBackupRestoreOperationSupported(restoreParams.OwnerUri, out connInfo);

                if (supported && connInfo != null)
                {
                    try
                    {
                        RestoreDatabaseTaskDataObject restoreDataObject = this.restoreDatabaseService.CreateRestoreDatabaseTaskDataObject(restoreParams, connInfo);

                        if (restoreDataObject != null)
                        {
                            restoreDataObject.LockedDatabaseManager = ConnectionServiceInstance.LockedDatabaseManager;
                            // create task metadata
                            TaskMetadata metadata = TaskMetadata.Create(restoreParams, SR.RestoreTaskName, restoreDataObject, ConnectionServiceInstance);
                            metadata.DatabaseName = restoreParams.TargetDatabaseName;

                            // create restore task and perform
                            SqlTask sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);
                            response.TaskId = sqlTask.TaskId.ToString();
                        }
                        else
                        {
                            response.ErrorMessage = SR.RestorePlanFailed;
                        }
                    }
                    catch (Exception ex)
                    {
                        response.ErrorMessage = ex.Message;
                    }
                }
                else
                {
                    response.ErrorMessage = SR.RestoreNotSupported;
                }

                await requestContext.SendResult(response);
            }
            catch (Exception ex)
            {
                response.Result       = false;
                response.ErrorMessage = ex.Message;
                await requestContext.SendResult(response);
            }
        }
        private async Task ExecuteOperation(DacFxOperation operation, DacFxParams parameters, string taskName, RequestContext <DacFxResult> requestContext)
        {
            SqlTask      sqlTask  = null;
            TaskMetadata metadata = TaskMetadata.Create(parameters, taskName, operation, ConnectionServiceInstance);

            // put appropriate database name since connection passed was to master
            metadata.DatabaseName = parameters.DatabaseName;

            sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);

            await requestContext.SendResult(new DacFxResult()
            {
                OperationId  = operation.OperationId,
                Success      = true,
                ErrorMessage = string.Empty
            });
        }
        /// <summary>
        /// Handles a backup request
        /// </summary>
        internal async Task HandleBackupRequest(
            BackupParams backupParams,
            RequestContext <BackupResponse> requestContext)
        {
            try
            {
                BackupResponse response = new BackupResponse();
                ConnectionInfo connInfo;
                bool           supported = IsBackupRestoreOperationSupported(backupParams.OwnerUri, out connInfo);

                if (supported && connInfo != null)
                {
                    DatabaseTaskHelper helper  = AdminService.CreateDatabaseTaskHelper(connInfo, databaseExists: true);
                    SqlConnection      sqlConn = ConnectionService.OpenSqlConnection(connInfo, "Backup");
                    // Connection gets discounnected when backup is done

                    BackupOperation backupOperation = CreateBackupOperation(helper.DataContainer, sqlConn, backupParams.BackupInfo);
                    SqlTask         sqlTask         = null;

                    // create task metadata
                    TaskMetadata metadata = TaskMetadata.Create(backupParams, SR.BackupTaskName, backupOperation, ConnectionServiceInstance);

                    sqlTask = SqlTaskManagerInstance.CreateAndRun <SqlTask>(metadata);
                    sqlTask.StatusChanged += CloseConnection;
                }
                else
                {
                    response.Result = false;
                }

                await requestContext.SendResult(response);
            }
            catch (Exception ex)
            {
                await requestContext.SendError(ex.ToString());
            }
        }