public void SimpleTestTableSelect() { var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder(); var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(DatabaseFixture.TestTableSelectQuery, DatabaseFixture.OneTarget, argumentStringBuilder); _output.WriteLine(systemRunOutput.ToVerboseString()); SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput); var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput); }
public void Test3() { var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder(); var query = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test3.sql"); var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(query, DatabaseFixture.OneTarget, argumentStringBuilder); _output.WriteLine(systemRunOutput.ToVerboseString()); SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput); var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput); Assert.DoesNotMatch("ERROR", systemRunOutput.StandardOutput); Assert.Equal(3, sheetCount); Assert.True(systemRunOutput.OutputFileContent.Length > 5000); Assert.True(systemRunOutput.OutputFileContent.Length < 10000); }
public void Test10() { var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder(); var query = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test2.sql"); var targets = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.Targets.targets.01.json", true); var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(query, targets, argumentStringBuilder); _output.WriteLine(systemRunOutput.ToVerboseString()); SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput); var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput); Assert.Matches("ERROR", systemRunOutput.StandardOutput); Assert.Equal(5, sheetCount); Assert.True(systemRunOutput.OutputFileContent.Length > 10000); Assert.True(systemRunOutput.OutputFileContent.Length < 20000); }
public void Test16() { var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder(); argumentStringBuilder.Exporter = "csv"; argumentStringBuilder.ShowInformationMessages = false; var query = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test7.sql"); var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(query, DatabaseFixture.TwoTargets, argumentStringBuilder); _output.WriteLine(systemRunOutput.ToVerboseString()); SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput); var sheetCount = SystemTestsHelpers.AssertStandardCsvSuccessConditions(systemRunOutput); Assert.DoesNotMatch("ERROR", systemRunOutput.StandardOutput); Assert.Equal(4, sheetCount); Assert.True(systemRunOutput.OutputFileContent.Length > 2000); Assert.True(systemRunOutput.OutputFileContent.Length < 3000); }
public void Test15() { var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder(); argumentStringBuilder.Progress = true; argumentStringBuilder.Overwrite = false; var query = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test8.sql"); argumentStringBuilder.Query = query; argumentStringBuilder.Targets = DatabaseFixture.TwoTargets; var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecution(argumentStringBuilder, true); _output.WriteLine(systemRunOutput.ToVerboseString()); Assert.NotEqual(0, systemRunOutput.ExitCode); Assert.Matches("FATAL", systemRunOutput.StandardOutput); }
public void Test14() { var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder(); argumentStringBuilder.Progress = true; argumentStringBuilder.Overwrite = true; var query = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test1.sql"); argumentStringBuilder.Query = query; argumentStringBuilder.Targets = DatabaseFixture.TwoTargets; var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecution(argumentStringBuilder, true); _output.WriteLine(systemRunOutput.ToVerboseString()); SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput); var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput); Assert.DoesNotMatch("ERROR", systemRunOutput.StandardOutput); Assert.Equal(6, sheetCount); Assert.True(systemRunOutput.OutputFileContent.Length > 10000); Assert.True(systemRunOutput.OutputFileContent.Length < 20000); }
private void executeButton_Click(object sender, EventArgs e) { if (sqlFileDisplayControl.AbsoluteFilePath == null || targetsComboBox.SelectedItem == null || outputFileDisplayControl.AbsoluteFilePath == null) { MessageBox.Show("Select a SQL script, a target, and an output file to execute.", "Cannot execute.", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return; } var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder { Overwrite = overwriteOutputFileCheckBox.Checked, Progress = true, QueryFile = sqlFileDisplayControl.AbsoluteFilePath, TargetsFile = ((TargetFileEntry)targetsComboBox.SelectedItem).Filepath, OutputFile = outputFileDisplayControl.AbsoluteFilePath, ShowNulls = showNullCheckBox.Checked, NullsColor = ToHex(nullColorPictureBox.BackColor), DiscardResults = discardResultsCheckBox.Checked, CommandTimeout = (int)commandTimeoutNumericUpDown.Value, Parallelism = (int)parallelismNumericUpDown.Value, SheetLabels = sheetlabelTextBox.Text, ApplicationName = "GUI", ShowIpAddress = !hideLotCheckBox.Checked, ShowServerName = !hideLotCheckBox.Checked, ShowDatabaseName = !hideLotCheckBox.Checked, ShowExtraColumns = !hideLotCheckBox.Checked, ShowLogSheet = !hideLotCheckBox.Checked, ShowParameterSheet = !hideLotCheckBox.Checked, ShowInformationMessages = !hideLotCheckBox.Checked, Exporter = "excel", CsvDelimiter = ";", Base10Threshold = 4, Base16Threshold = 64, Base64Threshold = 262144 }; var startInfo = new ProcessStartInfo { UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, FileName = QueryMultiDbExecutableFullPath, Arguments = argumentStringBuilder.ToString() }; try { var process = new Process { StartInfo = startInfo }; process.OutputDataReceived += Process_OutputDataReceived; process.ErrorDataReceived += Process_ErrorDataReceived; process.Exited += Process_Exited; process.EnableRaisingEvents = true; this.InvokeEx(() => consoleOutputTextBox.Text = string.Empty); this.InvokeEx(() => commandLineTextBox.Text = QueryMultiDbExecutableFullPath + argumentStringBuilder); _consoleBuffer = new StringBuilder(1 * 1024 * 1024); process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); executeButton.Enabled = false; cancelButton.Enabled = true; _runningProcess = process; } catch (Win32Exception exp) { MessageBox.Show($"Unable to start the process with the specified file '{startInfo.FileName}'. There might be a path issue. {exp.Message}", "Cannot start QueryMultiDb process.", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } }
public static SystemExecutionOutput RunQueryMultiDbExecution(QueryMultiDbArgumentStringBuilder argumentStringBuilder, bool createOutputFileBeforeExecution = false) { if (argumentStringBuilder == null) { throw new ArgumentNullException(nameof(argumentStringBuilder)); } var temporaryDirectory = GetTemporaryDirectory(); var outputFilename = Guid.NewGuid().ToString(); var outputFile = Path.Combine(temporaryDirectory, outputFilename); argumentStringBuilder.OutputFile = outputFile; if (createOutputFileBeforeExecution) { using (var sw = File.CreateText(outputFile)) { sw.WriteLine("Test file created before execution."); } } var arguments = argumentStringBuilder.ToString(); var startInfo = new ProcessStartInfo { UseShellExecute = false, CreateNoWindow = false, RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, FileName = ExecutableResolver.GetQueryMultiDbExecutablePath(QueryMultiDbFilename, RelativeExecutablePath), Arguments = arguments }; SystemExecutionOutput systemExecutionOutput; using (var process = Process.Start(startInfo)) { if (process == null) { throw new Exception(); } string standardOutput; using (var standardOutputReader = process.StandardOutput) { standardOutput = standardOutputReader.ReadToEnd(); } string standardError; using (var standardErrorReader = process.StandardError) { standardError = standardErrorReader.ReadToEnd(); } process.WaitForExit(); var exitCode = process.ExitCode; byte[] fileContent = null; try { var path = outputFile; fileContent = File.ReadAllBytes(path); SafeCreateDirectory(RelativeTestResultsDirectory); var extension = argumentStringBuilder.Exporter == "csv" ? ".zip" : ".xlsx"; File.Move(path, RelativeTestResultsDirectory + outputFilename + extension); } catch { // Ignored because fileContent being null is fine in this case. It will be asserted later. throw; } systemExecutionOutput = new SystemExecutionOutput(exitCode, standardOutput, standardError, fileContent); } DeleteDirectory(temporaryDirectory); return(systemExecutionOutput); }
public static SystemExecutionOutput RunQueryMultiDbExecutionFromResource(string resourceNameSql, string resourceNameJson, bool formatResource, QueryMultiDbArgumentStringBuilder argumentStringBuilder) { if (argumentStringBuilder == null) { throw new ArgumentNullException(nameof(argumentStringBuilder)); } var temporaryDirectory = GetTemporaryDirectory(); CopyResourceToDirectory(resourceNameSql, temporaryDirectory, formatResource); CopyResourceToDirectory(resourceNameJson, temporaryDirectory, formatResource); argumentStringBuilder.QueryFile = Path.Combine(temporaryDirectory, resourceNameSql); argumentStringBuilder.TargetsFile = Path.Combine(temporaryDirectory, resourceNameJson); var systemExecutionOutput = RunQueryMultiDbExecution(argumentStringBuilder); DeleteDirectory(temporaryDirectory); return(systemExecutionOutput); }
public static SystemExecutionOutput RunQueryMultiDbExecutionFromData(string query, string targets, QueryMultiDbArgumentStringBuilder argumentStringBuilder) { if (argumentStringBuilder == null) { throw new ArgumentNullException(nameof(argumentStringBuilder)); } argumentStringBuilder.Query = query; argumentStringBuilder.Targets = targets; var systemExecutionOutput = RunQueryMultiDbExecution(argumentStringBuilder); return(systemExecutionOutput); }