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, }); } }
/// <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, }); } }
/// <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, }); } }
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 }); } }); }
/// <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, }); } }
/// <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); } }
/// <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()); } }