|                                                                                                              1
 24
 25  package com.mckoi.database;
 26
 27  import java.util.ArrayList
  ; 28  import com.mckoi.util.IntegerVector;
 29
 30
 37
 38  class OuterTable extends VirtualTable implements RootTable {
 39
 40
 43    public IntegerVector[] outer_rows;
 44
 45
 48    private int outer_row_count;
 49
 50
 53    public OuterTable(Table input_table) {
 54      super();
 55
 56      RawTableInformation base_table =
 57                        input_table.resolveToRawTable(new RawTableInformation());
 58      Table[] tables = base_table.getTables();
 59      IntegerVector[] rows = base_table.getRows();
 60
 61      outer_rows = new IntegerVector[rows.length];
 62
 63          init(tables);
 65      set(tables, rows);
 66
 67    }
 68
 69
 72    public void mergeIn(Table outside_table) {
 73      RawTableInformation raw_table_info =
 74                      outside_table.resolveToRawTable(new RawTableInformation());
 75
 76          Table[] base_tables = getReferenceTables();
 78      IntegerVector[] base_rows = getReferenceRows();
 79
 80          Table[] tables = raw_table_info.getTables();
 82      IntegerVector[] rows = raw_table_info.getRows();
 83          outer_row_count = rows[0].size();
 85
 86      for (int i = 0; i < base_tables.length; ++i) {
 87        Table btable = base_tables[i];
 88        int index = -1;
 89        for (int n = 0; n < tables.length && index == -1; ++n) {
 90          if (btable == tables[n]) {
 91            index = n;
 92          }
 93        }
 94
 95              if (index == -1) {
 97          outer_rows[i] = null;
 98        }
 99        else {
 100         IntegerVector list = new IntegerVector(outer_row_count);
 101         outer_rows[i] = list;
 102                 IntegerVector to_merge = rows[index];
 104         if (to_merge.size() != outer_row_count) {
 105           throw new Error
  ("Wrong size for rows being merged in."); 106         }
 107         list.append(to_merge);
 108       }
 109
 110     }
 111
 112   }
 113
 114
 116
 119   public int getRowCount() {
 120     return super.getRowCount() + outer_row_count;
 121   }
 122
 123
 133   SelectableScheme getSelectableSchemeFor(int column, int original_column,
 134                                           Table table) {
 135
 136     if (column_scheme[column] == null) {
 137             SelectableScheme scheme = new BlindSearch(this, column);
 139       column_scheme[column] = scheme.getSubsetScheme(this, column);
 140     }
 141
 142     if (table == this) {
 143       return column_scheme[column];
 144     }
 145     else {
 146       return column_scheme[column].getSubsetScheme(table, original_column);
 147     }
 148
 149   }
 150
 151
 155   public TObject getCellContents(int column, int row) {
 156     int table_num = column_table[column];
 157     Table parent_table = reference_list[table_num];
 158     if (row >= outer_row_count) {
 159       row = row_list[table_num].intAt(row - outer_row_count);
 160       return parent_table.getCellContents(column_filter[column], row);
 161     }
 162     else {
 163       if (outer_rows[table_num] == null) {
 164                 return new TObject(getColumnDefAt(column).getTType(), null);
 166       }
 167       else {
 168         row = outer_rows[table_num].intAt(row);
 169         return parent_table.getCellContents(column_filter[column], row);
 170       }
 171     }
 172   }
 173
 174
 176
 181   public boolean typeEquals(RootTable table) {
 182     return (this == table);
 183   }
 184
 185 }
 186
                                                                                                                                                                                                             |                                                                       
 
 
 
 
 
                                                                                   Popular Tags                                                                                                                                                                                              |