package com.taobao.tddl.optimizer.core; import com.taobao.tddl.common.utils.extension.ExtensionLoader; import com.taobao.tddl.optimizer.core.expression.IBindVal; import com.taobao.tddl.optimizer.core.expression.IBooleanFilter; import com.taobao.tddl.optimizer.core.expression.IColumn; import com.taobao.tddl.optimizer.core.expression.IFunction; import com.taobao.tddl.optimizer.core.expression.ILogicalFilter; import com.taobao.tddl.optimizer.core.expression.IOrderBy; import com.taobao.tddl.optimizer.core.expression.bean.BindVal; import com.taobao.tddl.optimizer.core.expression.bean.BooleanFilter; import com.taobao.tddl.optimizer.core.expression.bean.Column; import com.taobao.tddl.optimizer.core.expression.bean.Function; import com.taobao.tddl.optimizer.core.expression.bean.LogicalFilter; import com.taobao.tddl.optimizer.core.expression.bean.NullValue; import com.taobao.tddl.optimizer.core.expression.bean.OrderBy; import com.taobao.tddl.optimizer.core.plan.bean.Delete; import com.taobao.tddl.optimizer.core.plan.bean.Insert; import com.taobao.tddl.optimizer.core.plan.bean.Join; import com.taobao.tddl.optimizer.core.plan.bean.Merge; import com.taobao.tddl.optimizer.core.plan.bean.Query; import com.taobao.tddl.optimizer.core.plan.bean.Replace; import com.taobao.tddl.optimizer.core.plan.bean.Update; import com.taobao.tddl.optimizer.core.plan.dml.IDelete; import com.taobao.tddl.optimizer.core.plan.dml.IInsert; import com.taobao.tddl.optimizer.core.plan.dml.IReplace; import com.taobao.tddl.optimizer.core.plan.dml.IUpdate; import com.taobao.tddl.optimizer.core.plan.query.IJoin; import com.taobao.tddl.optimizer.core.plan.query.IMerge; import com.taobao.tddl.optimizer.core.plan.query.IQuery; /** * Ast node构建工厂,简单的工具类没必要上接口了 */ public class ASTNodeFactory { private static volatile ASTNodeFactory instance = null; public static ASTNodeFactory getInstance() { if (instance == null) { synchronized (ASTNodeFactory.class) { if (instance == null) { // double-check try { // 预留扩展,比如生成PB协议的node对象,未来比较长远 instance = ExtensionLoader.load(ASTNodeFactory.class); } catch (Throwable e) { instance = new ASTNodeFactory(); } } } } return instance; } public IQuery createQuery() { return new Query(); } public IReplace createReplace() { return new Replace(); } public IInsert createInsert() { return new Insert(); } public IDelete createDelete() { return new Delete(); } public IUpdate createUpdate() { return new Update(); } public IColumn createColumn() { return new Column(); } public IOrderBy createOrderBy() { return new OrderBy(); } public IJoin createJoin() { return new Join(); } public IMerge createMerge() { return new Merge(); } public IBindVal createBindValue(int bind) { return new BindVal(bind); } public IBooleanFilter createBooleanFilter() { return new BooleanFilter(); } public ILogicalFilter createLogicalFilter() { return new LogicalFilter(); } public IFunction createFunction() { return new Function(); } public Comparable createNullValue() { return NullValue.getNullValue(); } }