src/org/objectweb/cjdbc/controller/cache/result/ResultCacheColumn.java

説明を見る。
00001 00025 package org.objectweb.cjdbc.controller.cache.result; 00026 00027 import java.util.ArrayList; 00028 import java.util.Iterator; 00029 00030 import org.objectweb.cjdbc.common.sql.AbstractWriteRequest; 00031 import org.objectweb.cjdbc.common.sql.ParsingGranularities; 00032 import org.objectweb.cjdbc.common.sql.SelectRequest; 00033 import org.objectweb.cjdbc.common.sql.UpdateRequest; 00034 import org.objectweb.cjdbc.common.sql.schema.TableColumn; 00035 import org.objectweb.cjdbc.controller.cache.result.entries.CacheEntry; 00036 import org.objectweb.cjdbc.controller.cache.result.schema.CacheDatabaseColumn; 00037 import org.objectweb.cjdbc.controller.cache.result.schema.CacheDatabaseTable; 00038 00051 public class ResultCacheColumn extends ResultCache 00052 { 00059 public ResultCacheColumn(int maxEntries, int pendingTimeout) 00060 { 00061 super(maxEntries, pendingTimeout); 00062 parsingGranularity = ParsingGranularities.COLUMN; 00063 } 00064 00068 public void processAddToCache(CacheEntry qe) 00069 { 00070 SelectRequest request = qe.getRequest(); 00071 ArrayList selectedColumns = request.getSelect(); 00072 // Update the tables columns dependencies 00073 if (selectedColumns == null || selectedColumns.isEmpty()) 00074 { 00075 logger 00076 .warn("No parsing of select clause found - Fallback to table granularity"); 00077 for (Iterator i = request.getFrom().iterator(); i.hasNext();) 00078 { 00079 CacheDatabaseTable table = cdbs.getTable((String) i.next()); 00080 table.addCacheEntry(qe); 00081 // Add all columns, entries will be added below. 00082 ArrayList columns = table.getColumns(); 00083 for (int j = 0; j < columns.size(); j++) 00084 { 00085 ((CacheDatabaseColumn) columns.get(j)).addCacheEntry(qe); 00086 } 00087 return; 00088 } 00089 } 00090 for (Iterator i = selectedColumns.iterator(); i.hasNext();) 00091 { 00092 TableColumn tc = (TableColumn) i.next(); 00093 cdbs.getTable(tc.getTableName()).getColumn(tc.getColumnName()) 00094 .addCacheEntry(qe); 00095 } 00096 if (request.getWhere() != null) 00097 for (Iterator i = request.getWhere().iterator(); i.hasNext();) 00098 { 00099 TableColumn tc = (TableColumn) i.next(); 00100 cdbs.getTable(tc.getTableName()).getColumn(tc.getColumnName()) 00101 .addCacheEntry(qe); 00102 } 00103 } 00104 00108 public boolean isUpdateNecessary(UpdateRequest request) 00109 { 00110 return true; 00111 } 00112 00116 protected void processWriteNotify(AbstractWriteRequest request) 00117 { 00118 // Sanity check 00119 if (request.getColumns() == null) 00120 { 00121 logger.warn("No column parsing found - Fallback to table granularity (" 00122 + request.getSQL() + ")"); 00123 cdbs.getTable(request.getTableName()).invalidateAll(); 00124 return; 00125 } 00126 if (request.isAlter()) 00127 { 00128 cdbs.getTable(request.getTableName()).invalidateAll(); 00129 return; 00130 } 00131 for (Iterator i = request.getColumns().iterator(); i.hasNext();) 00132 { 00133 TableColumn tc = (TableColumn) i.next(); 00134 cdbs.getTable(tc.getTableName()).getColumn(tc.getColumnName()) 00135 .invalidateAll(); 00136 } 00137 } 00138 00142 public String getName() 00143 { 00144 return "column"; 00145 } 00146 00147 }

CJDBCversion1.0.4に対してTue Oct 12 15:16:00 2004に生成されました。 doxygen 1.3.8