1 24 25 package com.mckoi.database; 26 27 import com.mckoi.util.IntegerVector; 28 import java.io.IOException ; 29 import java.io.OutputStream ; 30 import java.io.InputStream ; 31 32 48 49 public abstract class DefaultDataTable extends AbstractDataTable { 50 51 54 private Database database; 55 56 59 protected int row_count; 60 61 64 private SelectableScheme[] column_scheme; 65 66 69 DefaultDataTable(Database database) { 70 super(); 71 this.database = database; 72 this.row_count = 0; 73 } 74 75 78 public Database getDatabase() { 79 return database; 80 } 81 82 87 protected SelectableScheme getRootColumnScheme(int column) { 88 return column_scheme[column]; 89 } 90 91 94 protected void clearColumnScheme(int column) { 95 column_scheme[column] = null; 96 } 97 98 106 protected void blankSelectableSchemes() { 107 blankSelectableSchemes(0); 108 } 109 110 117 protected void blankSelectableSchemes(int type) { 118 column_scheme = new SelectableScheme[getColumnCount()]; 119 for (int i = 0; i < column_scheme.length; ++i) { 120 if (type == 0) { 121 column_scheme[i] = new InsertSearch(this, i); 122 } 123 else if (type == 1) { 124 column_scheme[i] = new BlindSearch(this, i); 125 } 126 } 127 } 128 129 132 public int getColumnCount() { 133 return getDataTableDef().columnCount(); 134 } 135 136 139 public int getRowCount() { 140 return row_count; 141 } 142 143 154 164 177 182 public Variable getResolvedVariable(int column) { 183 String col_name = getDataTableDef().columnAt(column).getName(); 184 return new Variable(getTableName(), col_name); 185 } 186 187 216 221 public int findFieldName(Variable v) { 222 TableName table_name = v.getTableName(); 224 DataTableDef table_def = getDataTableDef(); 225 if (table_name != null && table_name.equals(getTableName())) { 226 String col_name = v.getName(); 228 int size = getColumnCount(); 229 for (int i = 0; i < size; ++i) { 230 DataTableColumnDef col = table_def.columnAt(i); 231 if (col.getName().equals(col_name)) { 232 return i; 233 } 234 } 235 } 236 return -1; 237 } 238 239 245 SelectableScheme getSelectableSchemeFor(int column, int original_column, 246 Table table) { 247 SelectableScheme scheme = getRootColumnScheme(column); 248 249 252 254 if (table == this) { 257 return scheme; 258 } 259 260 else { 262 return scheme.getSubsetScheme(table, original_column); 263 } 264 265 } 266 267 274 void setToRowTableDomain(int column, IntegerVector row_set, 275 TableDataSource ancestor) { 276 if (ancestor != this) { 277 throw new RuntimeException ("Method routed to incorrect table ancestor."); 278 } 279 } 280 281 288 RawTableInformation resolveToRawTable(RawTableInformation info) { 289 System.err.println("Efficiency Warning in DataTable.resolveToRawTable."); 290 IntegerVector row_set = new IntegerVector(); 291 RowEnumeration e = rowEnumeration(); 292 while (e.hasMoreRows()) { 293 row_set.addInt(e.nextRowIndex()); 294 } 295 info.add(this, row_set); 296 return info; 297 } 298 299 311 313 314 317 void addCellToColumnSchemes(int row_number, int column_number) { 318 boolean indexable_type = 319 getDataTableDef().columnAt(column_number).isIndexableType(); 320 if (indexable_type) { 321 SelectableScheme ss = getRootColumnScheme(column_number); 322 ss.insert(row_number); 323 } 324 } 325 326 331 void addRowToColumnSchemes(int row_number) { 332 int col_count = getColumnCount(); 333 DataTableDef table_def = getDataTableDef(); 334 for (int i = 0; i < col_count; ++i) { 335 if (table_def.columnAt(i).isIndexableType()) { 336 SelectableScheme ss = getRootColumnScheme(i); 337 ss.insert(row_number); 338 } 339 } 340 } 341 342 347 void removeRowToColumnSchemes(int row_number) { 348 int col_count = getColumnCount(); 349 DataTableDef table_def = getDataTableDef(); 350 for (int i = 0; i < col_count; ++i) { 351 if (table_def.columnAt(i).isIndexableType()) { 352 SelectableScheme ss = getRootColumnScheme(i); 353 ss.remove(row_number); 354 } 355 } 356 } 357 358 } 359 | Popular Tags |