00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
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
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 public class ResultCacheColumn extends ResultCache
00052 {
00053
00054
00055
00056
00057
00058
00059 public ResultCacheColumn(int maxEntries, int pendingTimeout)
00060 {
00061 super(maxEntries, pendingTimeout);
00062 parsingGranularity = ParsingGranularities.COLUMN;
00063 }
00064
00065
00066
00067
00068 public void processAddToCache(CacheEntry qe)
00069 {
00070 SelectRequest request = qe.getRequest();
00071 ArrayList selectedColumns = request.getSelect();
00072
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
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
00105
00106
00107
00108 public boolean isUpdateNecessary(UpdateRequest request)
00109 {
00110 return true;
00111 }
00112
00113
00114
00115
00116 protected void processWriteNotify(AbstractWriteRequest request)
00117 {
00118
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
00139
00140
00141
00142 public String getName()
00143 {
00144 return "column";
00145 }
00146
00147 }