public async Task ScriptDatabaseSchemaAndData() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile()) { ScriptingParams requestParams = new ScriptingParams { FilePath = tempFile.FilePath, ConnectionString = this.Northwind.ConnectionString, ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaAndData", }, }; ScriptingResult result = await testService.Script(requestParams); ScriptingPlanNotificationParams planEvent = await testService.Driver.WaitForEvent(ScriptingPlanNotificationEvent.Type, TimeSpan.FromSeconds(30)); ScriptingCompleteParams completeParameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30)); Assert.True(completeParameters.Success); Assert.Equal <int>(ScriptingFixture.ObjectCountWithDatabase, planEvent.Count); Assert.True(File.Exists(tempFile.FilePath)); Assert.True(new FileInfo(tempFile.FilePath).Length > 0); AssertSchemaInFile(tempFile.FilePath, assert: true); AssertTableDataInFile(tempFile.FilePath, assert: true); } }
public async Task ScriptSelectTable() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile()) { await testService.Connect(tempFile.FilePath, testService.TestConnectionService.GetConnectionParameters(serverType: TestServerType.OnPrem)); ScriptingParams requestParams = new ScriptingParams { ScriptDestination = "ToEditor", OwnerUri = tempFile.FilePath, ScriptOptions = new ScriptOptions { ScriptCreateDrop = "ScriptSelect" }, ScriptingObjects = new List <ScriptingObject> { new ScriptingObject { Type = "Table", Schema = "dbo", Name = "Customers", } } }; ScriptingResult result = await testService.Script(requestParams); Assert.True(result.Script.Contains("SELECT")); } }
public async Task ScriptTableDoesNotExist() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile()) { ScriptingParams requestParams = new ScriptingParams { FilePath = tempFile.FilePath, ConnectionString = this.Northwind.ConnectionString, ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaOnly", }, ScriptingObjects = new List <ScriptingObject> { new ScriptingObject { Type = "Table", Schema = "dbo", Name = "TableDoesNotExist", }, } }; ScriptingResult result = await testService.Script(requestParams); ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(15)); Assert.True(parameters.HasError); Assert.Equal("An error occurred while scripting the objects.", parameters.ErrorMessage); Assert.Contains("The Table '[dbo].[TableDoesNotExist]' does not exist on the server.", parameters.ErrorDetails); } }
public async Task ScriptTable() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) { ScriptingParams requestParams = new ScriptingParams { ScriptDestination = "ToEditor", ConnectionString = this.Northwind.ConnectionString, ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaOnly", }, ScriptingObjects = new List <ScriptingObject> { new ScriptingObject { Type = "Table", Schema = "dbo", Name = "Customers", }, } }; ScriptingResult result = await testService.Script(requestParams); ScriptingPlanNotificationParams planEvent = await testService.Driver.WaitForEvent(ScriptingPlanNotificationEvent.Type, TimeSpan.FromSeconds(1)); ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30)); Assert.True(parameters.Success); Assert.Equal <int>(1, planEvent.Count); } }
void scriptObjectAction_Execute(object sender, SimpleActionExecuteEventArgs e) { ObjectScriptGenerator creator = new ObjectScriptGenerator(); var result = new ScriptingResult() { Script = creator.GenerateScript(e.SelectedObjects.Cast <object>().ToList()) }; e.ShowViewParameters.CreatedView = Application.CreateDetailView(Application.CreateObjectSpace(result.GetType()), result); }
public string GenerateScript(IList <object> selectedObjects) { CodeCompileUnit compileUnit = new CodeCompileUnit(); CodeNamespace ns = new CodeNamespace(); ns.Name = "ScriptedObjects"; compileUnit.Namespaces.Add(ns); CodeTypeDeclaration typeDeclaration = new CodeTypeDeclaration(); typeDeclaration.Name = "Class1"; ns.Types.Add(typeDeclaration); var method = new CodeMemberMethod(); method.Name = "CreateObject"; typeDeclaration.Members.Add(method); method.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(Session)), "session")); ns.Imports.AddRange(selectedObjects.Select(obj => obj.GetType().Name).Distinct().Select(n => new CodeNamespaceImport(n)).ToArray()); var instanceManager = new InstanceManager(); if (selectedObjects.Count == 1) { var rootObject = selectedObjects[0]; var rootObjectType = rootObject.GetType(); method.ReturnType = new CodeTypeReference(rootObjectType.Name); string resultName = AddObjectInstance(method, rootObject, instanceManager); method.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(resultName))); } else { foreach (var obj in selectedObjects) { AddObjectInstance(method, obj, instanceManager); } } CSharpCodeProvider codeProvider = new CSharpCodeProvider(); var result = new ScriptingResult(); using (var stringWriter = new StringWriter()) { using (var itw = new IndentedTextWriter(stringWriter)) { var options = new CodeGeneratorOptions(); options.BracingStyle = "C"; codeProvider.GenerateCodeFromCompileUnit(compileUnit, itw, options); } return(stringWriter.ToString()); } }
public async Task <ScriptingResult> EvaluateScriptAsync <T>(string code, T properties) { if (string.IsNullOrWhiteSpace(code)) { return(ScriptingResult.FromError( new ArgumentException("code parameter cannot be empty, null or whitespace", nameof(code)), ScriptStage.Preprocessing)); } var options = ScriptOptions.Default .WithReferences(typeof(IDiscordClient).Assembly) .WithReferences(typeof(DiscordSocketClient).Assembly) .WithReferences(typeof(BotService).Assembly) .WithImports(Imports); var script = CSharpScript.Create(code, options, typeof(T)); var compilationTimer = Stopwatch.StartNew(); var compilationDiagnostics = script.Compile(); compilationTimer.Stop(); if (compilationDiagnostics.Length > 0 && compilationDiagnostics.Any(a => a.Severity == DiagnosticSeverity.Error)) { return(ScriptingResult.FromError(compilationDiagnostics, ScriptStage.Compilation, compilationTime: compilationTimer.ElapsedMilliseconds)); } var executionTimer = new Stopwatch(); try { executionTimer.Start(); var executionResult = await script.RunAsync(properties).ConfigureAwait(false); executionTimer.Stop(); var returnValue = executionResult.ReturnValue; GC.Collect(); return(ScriptingResult.FromSuccess(returnValue, compilationTimer.ElapsedMilliseconds, executionTimer.ElapsedMilliseconds)); } catch (Exception exception) { return(ScriptingResult.FromError(exception, ScriptStage.Execution, compilationTimer.ElapsedMilliseconds, executionTimer.ElapsedMilliseconds)); } }
private static bool VerifyScriptingResult(ScriptingResult result, List <string> expectedScripts) { if (expectedScripts == null || (expectedScripts.Count > 0 && expectedScripts.All(x => x == null))) { return(string.IsNullOrEmpty(result.Script)); } foreach (string expectedScript in expectedScripts) { if (!result.Script.Contains(expectedScript)) { return(false); } } return(true); }
public async Task ScriptDatabaseSchemaAndData() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) { ScriptingParams requestParams = new ScriptingParams { ScriptDestination = "ToEditor", ConnectionString = this.Northwind.ConnectionString, ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaAndData", }, }; ScriptingResult result = await testService.Script(requestParams); ScriptingCompleteParams completeParameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30)); Assert.True(completeParameters.Success); } }
public async Task ScriptSchemaInvalidFilePath() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) { ScriptingParams requestParams = new ScriptingParams { FilePath = "This path doesn't event exist", ConnectionString = "Server=Temp;Database=Temp;User Id=Temp;Password=Temp", ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaAndData", }, }; ScriptingResult result = await testService.Script(requestParams); ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(10)); Assert.True(parameters.HasError); Assert.Equal("Invalid directory specified by the ScriptingParams.FilePath property.", parameters.ErrorMessage); } }
public async Task ScriptSchemaInvalidConnectionString() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) { ScriptingParams requestParams = new ScriptingParams { ScriptDestination = "ToEditor", ConnectionString = "I'm an invalid connection string", ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaAndData", }, }; ScriptingResult result = await testService.Script(requestParams); ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(10)); Assert.True(parameters.HasError); Assert.Equal("Error parsing ScriptingParams.ConnectionString property.", parameters.ErrorMessage); } }
public async Task ScriptSchemaCancel() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile()) { ScriptingParams requestParams = new ScriptingParams { FilePath = tempFile.FilePath, ConnectionString = this.Northwind.ConnectionString, ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaAndData", }, }; ScriptingResult result = await testService.Script(requestParams); ScriptingCancelResult cancelResult = await testService.CancelScript(result.OperationId); ScriptingCompleteParams cancelEvent = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(10)); Assert.True(cancelEvent.Canceled); } }
public async Task ScriptTableAndData() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) using (SelfCleaningTempFile tempFile = new SelfCleaningTempFile()) { ScriptingParams requestParams = new ScriptingParams { FilePath = tempFile.FilePath, ConnectionString = this.Northwind.ConnectionString, ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaAndData", }, ScriptingObjects = new List <ScriptingObject> { new ScriptingObject { Type = "Table", Schema = "dbo", Name = "Customers", }, } }; ScriptingResult result = await testService.Script(requestParams); ScriptingPlanNotificationParams planEvent = await testService.Driver.WaitForEvent(ScriptingPlanNotificationEvent.Type, TimeSpan.FromSeconds(30)); ScriptingCompleteParams parameters = await testService.Driver.WaitForEvent(ScriptingCompleteEvent.Type, TimeSpan.FromSeconds(30)); Assert.True(parameters.Success); Assert.Equal <int>(1, planEvent.Count); Assert.True(File.Exists(tempFile.FilePath)); Assert.True(new FileInfo(tempFile.FilePath).Length > 0); } }
private static bool VerifyScriptingResult(ScriptingResult result, string expected) { return(!string.IsNullOrEmpty(result.Script) && result.Script.Contains(expected)); }