internal override SqlSelect VisitSelect(SqlSelect select) { SqlSelect saveSelect = this.outerSelect; this.outerSelect = select; // big-joins may need to lift PK's out for default ordering, so don't allow big-join if we see these this.canJoin &= select.GroupBy.Count == 0 && select.Top == null && !select.IsDistinct; bool saveIsTopLevel = this.isTopLevel; this.isTopLevel = false; select = this.VisitSelectCore(select); this.isTopLevel = saveIsTopLevel; select.Selection = this.VisitExpression(select.Selection); this.isTopLevel = saveIsTopLevel; this.outerSelect = saveSelect; if (select.IsDistinct && HierarchyChecker.HasHierarchy(select.Selection)) { // distinct across heirarchy is a NO-OP select.IsDistinct = false; } return(select); }
public static List <string> RemoveAdditionalSpacingAndUnneccearyFields(List <string> mergefieldsToTest, string logFile) { var amendedMergefields = new List <string>(); var usableMergefields = new List <string>(); bool usable; var ignoreList = HierarchyChecker.ConfigImport(ConfigurationManager.AppSettings.Get("SpecificTextToIgnore").Split(',')); foreach (var field in mergefieldsToTest) { var amended = field.Replace("{ ", "{").Replace("{ ", "{").Replace(" }", "}").Replace(" }", "}").Replace("MERGEFIELD ", "MERGEFIELD ").Replace(" \\* MERGEFORMAT", "").Replace(" \\* MERGEFORMAT", "").Replace("\\* MERGEFORMAT", ""); amendedMergefields.Add(amended); } foreach (var field in amendedMergefields) { usable = true; foreach (var parameter in ignoreList) { if (field.Contains(parameter) | field.Contains("\"")) { File.AppendAllText(logFile, Environment.NewLine + field + " Was removed from the test data due to \"" + parameter + "\" appearing in it"); usable = false; } } if (!field.Contains("}") && !field.Contains("{")) { usable = false; } if (usable == true) { usableMergefields.Add(field); } } return(usableMergefields); }
//Confirmation Button private void Button_Click_1(object sender, RoutedEventArgs e) { selectAndLoad_Grid.Visibility = Visibility.Hidden; progress_Grid.Visibility = Visibility.Visible; processingStatus_Text.AppendText(DateTime.Now.ToString("HH'.'mm'.'ss") + ": Creating Log File"); Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); //Creates a Log file - and folder if one doesn't exist var installLocation = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Custom Report Debugger Logs"; Directory.CreateDirectory(installLocation); logFile = installLocation + "\\" + DateTime.Now.ToString("dd-MM-yy HH'.'mm'.'ss") + ".txt"; var log = File.Create(logFile); log.Close(); processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Log file created at: " + logFile); progress_bar.Value = 10; processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Beginning Test"); processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Removing excluded fields listed in config"); Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); //Loads excluded Fields and removes any test fields that match var mergefieldsToTest = ExistenceCheck.RemoveAdditionalSpacingAndUnneccearyFields(mergefieldsInDoc, logFile); processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Field exclusion complete"); progress_bar.Value = 20; Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); //Loads legal Mergefields from config processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Loading legal mergefields from config in to MergeField database"); Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); var(uniqueMergefields, duplicateMergefields) = ExistenceCheck.DefineLegalMergefields(ConfigurationManager.AppSettings.Get("DataDictionary").Split(',')); //Grabs config arguements for the legal mergefields so I don't have to hardcode File.AppendAllText(logFile, "The following fields were loaded as legal fields from the config file, if any fields are missing or incorrect, please add them to the config:" + Environment.NewLine); foreach (var field in uniqueMergefields) { File.AppendAllText(logFile, Environment.NewLine + field); } processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Database Loaded"); progress_bar.Value = 30; Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); //Checks if Test Fields exist in the config processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Comparing submitted fields against the MergeField database"); Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); failedMergefields_doNotExist = ExistenceCheck.CheckExistenceOfMergefield(mergefieldsToTest, uniqueMergefields, logFile); processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Comparison complete, a total of " + failedMergefields_doNotExist.Count + " MergeFields were found to not exist in the database"); progress_bar.Value = 50; Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); //Checks for missing Begin or End groups processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Checking for missing begin and end groups"); Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); (failedMergefields_MissingBegin, failedMergefields_MissingEnd) = BeginAndEndGroups.CheckAllBeginGroupsHaveEndGroups(mergefieldsToTest); processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Check complete, a total of " + failedMergefields_MissingBegin.Count + " begin groups and " + failedMergefields_MissingEnd.Count + " end groups appear to be missing"); progress_bar.Value = 75; Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); //Checks Hierarchy processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Checking hierarchy against the database"); Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); failedMergefields_Hierarchy = HierarchyChecker.HierarchyManagement(mergefieldsToTest, logFile); processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Check complete, a total of " + failedMergefields_Hierarchy.Count + " fields did not appear to match the expected Hierarchy"); progress_bar.Value = 100; processingStatus_Text.AppendText(Environment.NewLine + DateTime.Now.ToString("HH'.'mm'.'ss") + ": Test Complete"); doggo_pic.Opacity = 0.2; kitty_pic.Opacity = 0.2; hamster_pic.Opacity = 0.2; softwareRunning_Label.Content = "Checks Complete! Press continue to view the results"; viewResults_Button.Visibility = Visibility.Visible; Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle); }