예제 #1
0
                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);
                    }
                }
예제 #2
0
        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);
 }
예제 #4
0
        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);
        }
예제 #5
0
        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 + "'.");
            }
        }
예제 #6
0
                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);
                }
예제 #7
0
 public override void OnClose()
 {
     MemoryProfilerAnalytics.SendPendingFilterChanges();
     CloseCurrentTable();
     m_Spreadsheet = null;
 }
예제 #8
0
                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);
                    }
                }