internal override SelectableScheme GetSelectableSchemeFor(int column, int originalColumn, Table table) { // First check if the given SelectableScheme is in the column_scheme array SelectableScheme scheme = columnScheme[column]; if (scheme != null) { if (table == this) { return(scheme); } return(scheme.GetSubsetScheme(table, originalColumn)); } // If it isn't then we need to calculate it SelectableScheme ss; // Optimization: The table may be naturally ordered by a column. If it // is we don't try to generate an ordered set. if (sortedAgainstColumn != -1 && sortedAgainstColumn == column) { InsertSearch isop = new InsertSearch(this, column, CalculateRowReferenceList().Cast <int>()); isop.RecordUid = false; ss = isop; columnScheme[column] = ss; if (table != this) { ss = ss.GetSubsetScheme(table, originalColumn); } } else { // Otherwise we must generate the ordered set from the information in // a parent index. Table parentTable = referenceList[vtTableInfo.IndexOfTable(column)]; ss = parentTable.GetSelectableSchemeFor(vtTableInfo.AdjustColumnOffset(column), originalColumn, table); if (table == this) { columnScheme[column] = ss; } } return(ss); }
/// <inheritdoc/> public override DataObject GetValue(int column, long row) { int tableNum = JoinedTableInfo.IndexOfTable(column); Table parentTable = ReferenceTables[tableNum]; if (row >= outerRowCount) { row = ReferenceRows[tableNum][(int)row - outerRowCount]; return(parentTable.GetValue(JoinedTableInfo.AdjustColumnOffset(column), row)); } if (outerRows[tableNum] == null) { // Special case, handling outer entries (NULL) return(new DataObject(TableInfo[column].DataType, null)); } row = outerRows[tableNum][(int)row]; return(parentTable.GetValue(JoinedTableInfo.AdjustColumnOffset(column), row)); }