1 23 24 package org.continuent.sequoia.controller.cache.result; 25 26 import java.util.ArrayList ; 27 import java.util.Collection ; 28 import java.util.Iterator ; 29 30 import org.continuent.sequoia.controller.cache.result.entries.AbstractResultCacheEntry; 31 import org.continuent.sequoia.controller.cache.result.schema.CacheDatabaseColumn; 32 import org.continuent.sequoia.controller.cache.result.schema.CacheDatabaseTable; 33 import org.continuent.sequoia.controller.requests.AbstractRequest; 34 import org.continuent.sequoia.controller.requests.ParsingGranularities; 35 import org.continuent.sequoia.controller.requests.SelectRequest; 36 import org.continuent.sequoia.controller.requests.UpdateRequest; 37 import org.continuent.sequoia.controller.sql.schema.TableColumn; 38 39 51 52 public class ResultCacheColumn extends ResultCache 53 { 54 60 public ResultCacheColumn(int maxEntries, int pendingTimeout) 61 { 62 super(maxEntries, pendingTimeout); 63 parsingGranularity = ParsingGranularities.COLUMN; 64 } 65 66 69 public void processAddToCache(AbstractResultCacheEntry qe) 70 { 71 SelectRequest request = qe.getRequest(); 72 ArrayList selectedColumns = request.getSelect(); 73 if (selectedColumns == null || selectedColumns.isEmpty()) 75 { 76 logger 77 .warn("No parsing of select clause found - Fallback to table granularity"); 78 Collection from = request.getFrom(); 79 if (from == null) 80 return; 81 for (Iterator i = from.iterator(); i.hasNext();) 82 { 83 CacheDatabaseTable table = cdbs.getTable((String ) i.next()); 84 table.addCacheEntry(qe); 85 ArrayList columns = table.getColumns(); 87 for (int j = 0; j < columns.size(); j++) 88 { 89 ((CacheDatabaseColumn) columns.get(j)).addCacheEntry(qe); 90 } 91 return; 92 } 93 } 94 for (Iterator i = selectedColumns.iterator(); i.hasNext();) 95 { 96 TableColumn tc = (TableColumn) i.next(); 97 cdbs.getTable(tc.getTableName()).getColumn(tc.getColumnName()) 98 .addCacheEntry(qe); 99 } 100 if (request.getWhere() != null) 101 for (Iterator i = request.getWhere().iterator(); i.hasNext();) 102 { 103 TableColumn tc = (TableColumn) i.next(); 104 cdbs.getTable(tc.getTableName()).getColumn(tc.getColumnName()) 105 .addCacheEntry(qe); 106 } 107 } 108 109 112 public boolean isUpdateNecessary(UpdateRequest request) 113 { 114 return true; 115 } 116 117 120 protected void processWriteNotify(AbstractRequest request) 121 { 122 for (Iterator iter = request.getSemantic().getWriteSet().iterator(); iter 124 .hasNext();) 125 { 126 String tableName = (String ) iter.next(); 127 CacheDatabaseTable cdt = cdbs.getTable(tableName); 128 129 if (cdt != null) 130 cdt.invalidateAll(); 131 else 132 { 133 logger.warn("Table " + tableName 134 + " not found in cache schema. Flushing whole cache."); 135 flushCache(); 136 } 137 } 138 } 139 140 143 public String getName() 144 { 145 return "column"; 146 } 147 148 } | Popular Tags |