1 21 package com.db4o.nativequery.optimization; 22 23 import java.util.*; 24 25 import EDU.purdue.cs.bloat.context.*; 26 import EDU.purdue.cs.bloat.editor.*; 27 import EDU.purdue.cs.bloat.file.*; 28 29 import com.db4o.inside.query.*; 30 import com.db4o.nativequery.bloat.*; 31 import com.db4o.nativequery.expr.*; 32 import com.db4o.query.*; 33 34 public class Db4oOnTheFlyEnhancer implements Db4oNQOptimizer { 36 private transient ClassFileLoader loader=new ClassFileLoader(); 37 private transient BloatUtil bloatUtil=new BloatUtil(loader); 38 private transient EditorContext context=new CachingBloatContext(loader,new ArrayList(),false); 39 40 public Object optimize(Query query,Predicate filter) { 41 try { 42 Expression expr = analyzeInternal(filter); 44 if(expr==null) { 47 throw new RuntimeException ("Could not analyze "+filter); 48 } 49 new SODAQueryBuilder().optimizeQuery(expr,query,filter); 51 return expr; 53 } catch (ClassNotFoundException exc) { 54 throw new RuntimeException (exc.getMessage()); 55 } 56 } 57 58 private Expression analyzeInternal(Predicate filter) throws ClassNotFoundException { 59 ClassEditor classEditor=new ClassEditor(context,loader.loadClass(filter.getClass().getName())); 60 Expression expr=new NativeQueryEnhancer().analyze(bloatUtil,classEditor,Predicate.PREDICATEMETHOD_NAME); 61 return expr; 62 } 63 64 public static Expression analyze(Predicate filter) throws ClassNotFoundException { 65 return new Db4oOnTheFlyEnhancer().analyzeInternal(filter); 66 } 67 } 68 | Popular Tags |