private MetaTable BuildOrGetMetaTable(ViewTable parentVTable, ViewTable buildingVTable) { if (parentVTable == null) { //no parent view table mean we are building the root table and must create a meta table. if (buildingVTable == null) { //we must be building a view table when building the root. Debug.LogError("Failed to build the root view table."); MemoryProfilerAnalytics.AddMetaDatatoEvent <MemoryProfilerAnalytics.LoadViewXMLEvent>(8); } Database.MetaTable metaTable = new Database.MetaTable(); metaTable.name = name; metaTable.displayName = name; metaTable.defaultFilter = defaultFilter; metaTable.defaultAllLevelSortFilter = defaultAllLevelSortFilter; buildingVTable.m_Meta = metaTable; return(metaTable); } else { // if has a parent, use parent's meta table if (buildingVTable != null) { buildingVTable.m_Meta = parentVTable.m_Meta; } return(parentVTable.m_Meta); } }
public static bool TryGetMandatoryXmlAttribute(System.Xml.XmlElement element, string attributeName, out string value) { string valueGot = element.GetAttribute(attributeName); if (String.IsNullOrEmpty(valueGot)) { LogError("Element '" + element.Name + "' is missing the '" + attributeName + "' attribute."); value = null; byte errorID = 3; switch (attributeName) { case "column": errorID = 4; break; case "view": errorID = 5; break; case "order": errorID = 6; break; default: break; } MemoryProfilerAnalytics.AddMetaDatatoEvent <MemoryProfilerAnalytics.LoadViewXMLEvent>(errorID); return(false); } value = valueGot; return(true); }
void ReportFilterChanges() { m_FilterBuffer.Clear(); foreach (var filter in m_Filters.filters) { if (filter is Filter.Sort) { var sortFilter = (filter as Filter.Sort); var level = (sortFilter.SortLevel != null && sortFilter.SortLevel.Count > 0) ? sortFilter.SortLevel[0] : null; if (level == null) { continue; } string columnName = GetColumnName(level); m_FilterBuffer.Add(new MemoryProfilerAnalytics.Filter() { column = columnName, filterName = "Sort", filterInput = level.Order.ToString() }); } else if (filter is Filter.DefaultSort) { var sortFilter = (filter as Filter.DefaultSort); Filter.Sort.Level level = null; if (sortFilter.SortOverride != null && sortFilter.SortOverride.SortLevel != null && sortFilter.SortOverride.SortLevel.Count > 0) { level = sortFilter.SortOverride.SortLevel[0]; } if ((level == null || level.Order == SortOrder.None) && sortFilter.SortDefault != null && sortFilter.SortDefault.SortLevel != null && sortFilter.SortDefault.SortLevel.Count > 0) { level = sortFilter.SortDefault.SortLevel[0]; } if (level == null) { continue; } string columnName = GetColumnName(level); m_FilterBuffer.Add(new MemoryProfilerAnalytics.Filter() { column = columnName, filterName = "Sort", filterInput = level != null ? level.Order.ToString() : null }); } else if (filter is Filter.Group) { m_FilterBuffer.Add(new MemoryProfilerAnalytics.Filter() { column = (filter as Filter.Group).GetColumnName(m_TableDisplay), filterName = "Group" }); } else if (filter is Filter.Match) { var matchFilter = (filter as Filter.Match); m_FilterBuffer.Add(new MemoryProfilerAnalytics.Filter() { column = matchFilter.GetColumnName(m_TableDisplay), filterName = "Match", filterInput = matchFilter.MatchString }); } } MemoryProfilerAnalytics.FiltersChanged(m_TableDisplay.GetName(), m_FilterBuffer); }
public bool LoadView(string filename) { if (CurrentViewMode == ViewMode.ShowNone) { DebugUtility.LogWarning("Must open a snapshot before loading a view file"); MemoryProfilerAnalytics.AddMetaDatatoEvent <MemoryProfilerAnalytics.LoadViewXMLEvent>(1); return(false); } if (String.IsNullOrEmpty(filename)) { return(false); } using (ScopeDebugContext.Func(() => { return("File '" + filename + "'"); })) { var builder = Database.View.ViewSchema.Builder.LoadFromXMLFile(filename); if (builder == null) { return(false); } BaseMode newMode = CurrentMode.BuildViewSchemaClone(builder); if (newMode == null) { return(false); } switch (CurrentViewMode) { case ViewMode.ShowFirst: FirstMode = newMode; break; case ViewMode.ShowSecond: SecondMode = newMode; break; case ViewMode.ShowDiff: diffMode = newMode as DiffMode; FirstMode = diffMode.modeFirst; SecondMode = diffMode.modeSecond; break; default: break; } history.Clear(); ModeChanged(CurrentMode, CurrentViewMode); } return(true); }
public static void LogInvalidXmlChild(System.Xml.XmlElement parent, System.Xml.XmlElement child) { MemoryProfilerAnalytics.AddMetaDatatoEvent <MemoryProfilerAnalytics.LoadViewXMLEvent>(2); var debugContext = GetCurrentDebugContext(); if (debugContext != null) { DebugUtility.LogWarning("Unhandled element '" + child.Name + "' under element '" + parent.Name + "'.\nContext:" + debugContext.GetContextString("\n")); } else { DebugUtility.LogWarning("Unhandled element '" + child.Name + "' under element '" + parent.Name + "'."); } }
public ViewTable Build(BuildingData buildingData, ViewTable parent, long row, ViewSchema vs, Database.Schema baseSchema, Operation.ExpressionParsingContext parentExpressionParsingContext) { // Check for usage error from data. if (parent == null && String.IsNullOrEmpty(name)) { Debug.LogError("Table need a name"); return(null); } // Check for usage error from code. if (!(parent == null || parent.node == this.parent)) { Debug.LogError("Parent ViewTable must points to the node's parent while building child node's ViewTable."); } ViewTable vTable = new ViewTable(vs, baseSchema, this, parentExpressionParsingContext); // If has local select set, create it and add it to the expression parsing context hierarchy. see [Figure.1] vTable.SetupLocalSelectSet(localSelectSet.Build(vTable, vs, baseSchema)); MetaTable metaTable = BuildOrGetMetaTable(parent, vTable); if (buildingData.MetaTable == null) { buildingData.MetaTable = metaTable; } //declare columns foreach (var colb in column) { MetaColumn metaColumn = metaTable.GetColumnByName(colb.name); colb.BuildOrUpdateDeclaration(buildingData, vTable, ref metaColumn, vTable.ExpressionParsingContext); } if (data != null) { data.Build(buildingData, this, vTable, parent, parentExpressionParsingContext); } // Fix meta columns (that does not have a data type set) to their fallback value foreach (var fb in buildingData.FallbackColumnType) { if (fb.Key.Type == null) { fb.Key.Type = fb.Value; } } //Build missing column with default behavior for (int i = 0; i != metaTable.GetColumnCount(); ++i) { var metaColumn = metaTable.GetColumnByIndex(i); var column = vTable.GetColumnByIndex(i); if (column == null) { if (metaColumn.DefaultMergeAlgorithm != null) { //when we have a merge algorithm, set the entries as the result of each group's merge value. column = ViewColumn.Builder.BuildColumnNodeMerge(vTable, metaColumn, parentExpressionParsingContext); } vTable.SetColumn(metaColumn, column); } } if (data != null && data.type == Data.DataType.Select && vTable.dataSelectSet.IsManyToMany()) { Debug.LogError("Cannot build a view using a many-to-many select statement. Specify a row value for your select statement where condition(s)."); MemoryProfilerAnalytics.AddMetaDatatoEvent <MemoryProfilerAnalytics.LoadViewXMLEvent>(7); } return(vTable); }
public override void OnClose() { MemoryProfilerAnalytics.SendPendingFilterChanges(); CloseCurrentTable(); m_Spreadsheet = null; }
public ViewTable Build(ViewTable parent, long row, ViewSchema vs, Database.Schema baseSchema, Operation.ExpressionParsingContext parentExpressionParsingContext) { // Check for usage error from data. if (parent == null && String.IsNullOrEmpty(name)) { DebugUtility.LogError(FormatErrorContextInfo(vs) + ": Table need a name"); return(null); } using (ScopeDebugContext.Func(() => { return("View '" + GetFullName() + "'"); })) { // Check for usage error from code. DebugUtility.CheckCondition(parent == null || (parent.node == this.parent), FormatErrorContextInfo(vs) + ": Parent ViewTable must points to the node's parent while building child node's ViewTable."); if (data == null) { //no data return(null); } ViewTable vTable = new ViewTable(vs, baseSchema); vTable.node = this; vTable.parentExpressionParsingContext = parentExpressionParsingContext; vTable.expressionParsingContext = parentExpressionParsingContext; // If has local select set, create it and add it to the expression parsing context hierarchy. see [Figure.1] vTable.localSelectSet = localSelectSet.Build(vTable, vs, baseSchema); if (vTable.localSelectSet != null) { vTable.expressionParsingContext = new Operation.ExpressionParsingContext(vTable.expressionParsingContext, vTable.localSelectSet); } MetaTable metaTable = BuildOrGetMetaTable(parent, vTable); //declare columns foreach (var colb in column) { MetaColumn metaColumn = metaTable.GetColumnByName(colb.name); bool hadMetaColumn = metaColumn != null; colb.BuildOrUpdateDeclaration(ref metaColumn); // add the metacolum to the metatable if it just got created if (!hadMetaColumn) { metaTable.AddColumn(metaColumn); } } data.Build(this, vTable, parent, vs, baseSchema, parentExpressionParsingContext, metaTable); //Build missing column with default behavior for (int i = 0; i != metaTable.GetColumnCount(); ++i) { var metaColumn = metaTable.GetColumnByIndex(i); var column = vTable.GetColumnByIndex(i); if (column == null) { if (metaColumn.DefaultMergeAlgorithm != null) { //when we have a merge algorithm, set the entries as the result of each group's merge value. column = ViewColumn.Builder.BuildColumnNodeMerge(vTable, metaColumn, parentExpressionParsingContext); } vTable.SetColumn(metaColumn, column); } } if (data.type == Data.DataType.Select && vTable.dataSelectSet.IsManyToMany()) { DebugUtility.LogError("Cannot build the view table '" + vTable.GetName() + "' using a many-to-many select statement. Specify a row value for your select statement where condition(s)."); MemoryProfilerAnalytics.AddMetaDatatoEvent <MemoryProfilerAnalytics.LoadViewXMLEvent>(7); } return(vTable); } }