Package railo.runtime.query

Source Code of railo.runtime.query.CacheQueryCache

package railo.runtime.query;

import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import railo.commons.io.cache.Cache;
import railo.commons.io.cache.CacheEntry;
import railo.commons.lang.KeyGenerator;
import railo.runtime.PageContext;
import railo.runtime.cache.ram.RamCache;
import railo.runtime.cache.util.CacheKeyFilterAll;
import railo.runtime.config.ConfigImpl;
import railo.runtime.db.SQL;
import railo.runtime.functions.cache.Util;
import railo.runtime.type.Query;

class CacheQueryCache extends QueryCacheSupport {
 
  private static final long serialVersionUID = -2321532150542424070L;
 
  private final RamCache DEFAULT_CACHE=new RamCache();

  public CacheQueryCache(){
  }

 
  @Override
  public void clear(PageContext pc) {
    try {
      getCache(pc).remove(CacheKeyFilterAll.getInstance());
    } catch (IOException e) {}
  }

  @Override
  public void clearUnused(PageContext pc) throws IOException {
   
    Cache c = getCache(pc);
    List<CacheEntry> entries = c.entries();
    if(entries.size()<100) return;
   
    Iterator<CacheEntry> it = entries.iterator();
    while(it.hasNext()){
      it.next(); // touch them to makes sure the cache remove them, not really good, cache must do this by itself
      /*qce=(QueryCacheEntry) entry.getValue();
      if(qce.isInCacheRange(null)) {
        print.o(entry.getKey());
        c.remove(entry.getKey());
      }*/
    }
  }

  @Override
  public Object get(PageContext pc,SQL sql, String datasource, String username,String password, Date cacheAfter) {
    String key=key(sql,datasource,username,password);
    Object obj= getCache(pc).getValue(key,null);
    if(obj instanceof QueryCacheEntry) {
      QueryCacheEntry entry=(QueryCacheEntry) obj;
      if(entry.isCachedAfter(cacheAfter)) {
          return entry.getValue();
        }
        //getCache().remove(key);
    }
    return null;
  }

  @Override
  public Query getQuery(PageContext pc,SQL sql, String datasource, String username,String password, Date cacheAfter) {
    Object o=get(pc,sql, datasource, username, password, cacheAfter);
    if(o instanceof Query) return (Query) o;
    return null;
  }

  @Override
  public void remove(PageContext pc,SQL sql, String datasource, String username,String password) {
    try {
      getCache(pc).remove(key(sql, datasource, username, password));
    } catch (IOException e) {}
  }

  @Override
  public void set(PageContext pc,SQL sql, String datasource, String username,String password, Object value, Date cacheBefore) {
    long timeSpan = ((cacheBefore.getTime()-System.currentTimeMillis())+1);
    getCache(pc).put(key(sql, datasource, username, password), new QueryCacheEntry(cacheBefore,value), Long.valueOf(timeSpan), Long.valueOf(timeSpan));
  }

  private Cache getCache(PageContext pc) {
    Cache c = Util.getDefault(pc,ConfigImpl.CACHE_DEFAULT_QUERY,DEFAULT_CACHE)
    return c;
  }

    private String key(SQL sql, String datasource, String username,String password) {
      try {
        return Util.key(KeyGenerator.createKey(sql.toHashString()+datasource+username+password));
        //return Util.key(Md5.getDigestAsString(sql.toHashString()+datasource+username+password));
    }
      catch (IOException e) {
      return null;
    }
  }
   
    @Override
    public void clear(PageContext pc,QueryCacheFilter filter) {
      try {
      _clear(pc,filter);
    } catch (IOException e) {}
    }

  private void _clear(PageContext pc,QueryCacheFilter filter) throws IOException {
    Cache c = getCache(pc);
    Iterator it = c.entries().iterator();
      String key;
      CacheEntry entry;
      QueryCacheEntry ce;
      Query q;
      while(it.hasNext()){
      entry=(CacheEntry) it.next();
      if(!(entry.getValue() instanceof QueryCacheEntry)) continue;
      ce=(QueryCacheEntry) entry.getValue();
      if(!(ce.getValue() instanceof Query)) continue;
      q=(Query) ce.getValue();
      key=entry.getKey();
        if(filter.accept(q.getSql().toString())){
        c.remove(key);
        }
      }
  }

  @Override
  public int size(PageContext pc) {
    try {
      return getCache(pc).keys().size();
    } catch (IOException e) {
      return 0;
    }
  }


  public long sizeOf() {
    // TODO Auto-generated method stub
    return 0;
  }
}
TOP

Related Classes of railo.runtime.query.CacheQueryCache

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.