예제 #1
0
        private List <TCellGroup> SubQueryRowsToCellGroups(SubQueryOutput <ShapeSheet.CellData> subquery_output)
        {
            var list_celldata = subquery_output.Rows.Select(row => this.CellDataToCellGroup(row.Cells));
            var cellgroups    = new List <TCellGroup>(subquery_output.Rows.Count);

            cellgroups.AddRange(list_celldata);
            return(cellgroups);
        }
예제 #2
0
        private Output <T> _create_output_for_shape <T>(short shapeid, T[] values, List <SubQuerySectionDetails> subqueries_details, ref int values_cursor)
        {
            int old_cursor = values_cursor;

            var output = new Output <T>(shapeid);

            // First Copy the Query Cell Values into the output
            output.Cells = new T[this.Cells.Count];
            for (int i = 0; i < this.Cells.Count; i++)
            {
                output.Cells[i] = values[values_cursor++];
            }

            // Now copy the Section values over
            if (subqueries_details != null)
            {
                output.Sections = new List <SubQueryOutput <T> >(subqueries_details.Count);
                foreach (var subquery_detail in subqueries_details)
                {
                    var subquery_output = new SubQueryOutput <T>(subquery_detail.RowCount);

                    int num_cols = subquery_detail.SubQuery.Columns.Count;
                    foreach (int row_index in subquery_detail.RowIndexes)
                    {
                        var row_values = new T[num_cols];
                        for (int col_index = 0; col_index < num_cols; col_index++)
                        {
                            row_values[col_index] = values[values_cursor++];
                        }
                        var sec_res_row = new SubQueryOutputRow <T>(row_values);
                        subquery_output.Rows.Add(sec_res_row);
                    }

                    output.Sections.Add(subquery_output);
                }
            }

            int num_cells       = this.Cells.Count + (subqueries_details == null ? 0 : subqueries_details.Select(x => x.RowCount * x.SubQuery.Columns.Count).Sum());
            int expected_cursor = old_cursor + num_cells;

            if (expected_cursor != values_cursor)
            {
                throw new InternalAssertionException("Unexpected cursor");
            }

            return(output);
        }