1 34 package smallsql.database; 35 41 class IndexDescriptions { 42 private int size; 43 private IndexDescription[] data; 44 45 46 IndexDescriptions(){ 47 data = new IndexDescription[4]; 48 } 49 50 51 final int size(){ 52 return size; 53 } 54 55 56 final IndexDescription get(int idx){ 57 if (idx >= size) 58 throw new IndexOutOfBoundsException ("Column index: "+idx+", Size: "+size); 59 return data[idx]; 60 } 61 62 63 final void add(IndexDescription descr){ 64 if(size >= data.length ){ 65 resize(size << 1); 66 } 67 data[size++] = descr; 68 } 69 70 71 private final void resize(int newSize){ 72 IndexDescription[] dataNew = new IndexDescription[newSize]; 73 System.arraycopy(data, 0, dataNew, 0, size); 74 data = dataNew; 75 } 76 77 78 final IndexDescription findBestMatch(Strings columns){ 79 int bestFactor = Integer.MAX_VALUE; 80 int bestIdx = 0; 81 for(int i=0; i<size; i++){ 82 int factor = data[i].matchFactor(columns); 83 if(factor == 0) 84 return data[i]; 85 86 if(factor < bestFactor){ 87 bestFactor = factor; 88 bestIdx = i; 89 } 90 } 91 if(bestFactor == Integer.MAX_VALUE) 92 return null; 93 else 94 return data[bestIdx]; 95 } 96 97 98 104 void create(Database database, TableView tableView) throws Exception { 105 for(int i=0; i<size; i++){ 106 data[i].create(database, tableView); 107 } 108 } 109 110 111 void drop(Database database) throws Exception { 112 for(int i=0; i<size; i++){ 113 data[i].drop(database); 114 } 115 } 116 117 118 void close() throws Exception { 119 for(int i=0; i<size; i++){ 120 data[i].close(); 121 } 122 } 123 } 124 | Popular Tags |