1 24 25 package com.mckoi.database; 26 27 import com.mckoi.util.BigNumber; 28 import com.mckoi.database.global.SQLTypes; 29 30 39 40 final class GTTableColumnsDataSource extends GTDataSource { 41 42 45 private Transaction transaction; 46 47 50 private DataTableDef[] visible_tables; 51 52 55 private int row_count; 56 57 60 public GTTableColumnsDataSource(Transaction transaction) { 61 super(transaction.getSystem()); 62 this.transaction = transaction; 63 } 64 65 68 public GTTableColumnsDataSource init() { 69 TableName[] list = transaction.getTableList(); 71 visible_tables = new DataTableDef[list.length]; 72 row_count = 0; 73 for (int i = 0; i < list.length; ++i) { 74 DataTableDef def = transaction.getDataTableDef(list[i]); 75 row_count += def.columnCount(); 76 visible_tables[i] = def; 77 } 78 return this; 79 } 80 81 83 public DataTableDef getDataTableDef() { 84 return DEF_DATA_TABLE_DEF; 85 } 86 87 public int getRowCount() { 88 return row_count; 89 } 90 91 public TObject getCellContents(final int column, final int row) { 92 93 final int sz = visible_tables.length; 94 int rs = 0; 95 for (int n = 0; n < sz; ++n) { 96 final DataTableDef def = visible_tables[n]; 97 final int b = rs; 98 rs += def.columnCount(); 99 if (row >= b && row < rs) { 100 int seq_no = row - b; 102 DataTableColumnDef col_def = def.columnAt(seq_no); 103 switch (column) { 104 case 0: return columnValue(column, def.getSchema()); 106 case 1: return columnValue(column, def.getName()); 108 case 2: return columnValue(column, col_def.getName()); 110 case 3: return columnValue(column, 112 BigNumber.fromLong(col_def.getSQLType())); 113 case 4: return columnValue(column, col_def.getSQLTypeString()); 115 case 5: return columnValue(column, BigNumber.fromLong(col_def.getSize())); 117 case 6: return columnValue(column, BigNumber.fromLong(col_def.getScale())); 119 case 7: return columnValue(column, new Boolean (col_def.isNotNull())); 121 case 8: return columnValue(column, 123 col_def.getDefaultExpressionString()); 124 case 9: return columnValue(column, col_def.getIndexScheme()); 126 case 10: return columnValue(column, BigNumber.fromLong(seq_no)); 128 default: 129 throw new Error ("Column out of bounds."); 130 } 131 } 132 133 } 135 throw new Error ("Row out of bounds."); 136 } 137 138 140 public void dispose() { 141 super.dispose(); 142 visible_tables = null; 143 transaction = null; 144 } 145 146 148 151 static final DataTableDef DEF_DATA_TABLE_DEF; 152 153 static { 154 155 DataTableDef def = new DataTableDef(); 156 def.setTableName( 157 new TableName(Database.SYSTEM_SCHEMA, "sUSRTableColumns")); 158 159 def.addColumn(stringColumn("schema")); 161 def.addColumn(stringColumn("table")); 162 def.addColumn(stringColumn("column")); 163 def.addColumn(numericColumn("sql_type")); 164 def.addColumn(stringColumn("type_desc")); 165 def.addColumn(numericColumn("size")); 166 def.addColumn(numericColumn("scale")); 167 def.addColumn(booleanColumn("not_null")); 168 def.addColumn(stringColumn("default")); 169 def.addColumn(stringColumn("index_str")); 170 def.addColumn(numericColumn("seq_no")); 171 172 def.setImmutable(); 174 175 DEF_DATA_TABLE_DEF = def; 176 177 } 178 179 } 180 | Popular Tags |