⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlastfactory.java

📁 一个Java持久层类库
💻 JAVA
字号:
// $Id: SqlASTFactory.java 10060 2006-06-28 02:53:39Z steve.ebersole@jboss.com $package org.hibernate.hql.ast;import antlr.ASTFactory;import antlr.Token;import antlr.collections.AST;import org.hibernate.hql.antlr.HqlSqlTokenTypes;import org.hibernate.hql.ast.tree.AggregateNode;import org.hibernate.hql.ast.tree.BinaryArithmeticOperatorNode;import org.hibernate.hql.ast.tree.BinaryLogicOperatorNode;import org.hibernate.hql.ast.tree.Case2Node;import org.hibernate.hql.ast.tree.CaseNode;import org.hibernate.hql.ast.tree.CollectionFunction;import org.hibernate.hql.ast.tree.ConstructorNode;import org.hibernate.hql.ast.tree.CountNode;import org.hibernate.hql.ast.tree.DeleteStatement;import org.hibernate.hql.ast.tree.DotNode;import org.hibernate.hql.ast.tree.FromClause;import org.hibernate.hql.ast.tree.FromElement;import org.hibernate.hql.ast.tree.IdentNode;import org.hibernate.hql.ast.tree.ImpliedFromElement;import org.hibernate.hql.ast.tree.IndexNode;import org.hibernate.hql.ast.tree.InitializeableNode;import org.hibernate.hql.ast.tree.InsertStatement;import org.hibernate.hql.ast.tree.IntoClause;import org.hibernate.hql.ast.tree.LiteralNode;import org.hibernate.hql.ast.tree.MethodNode;import org.hibernate.hql.ast.tree.OrderByClause;import org.hibernate.hql.ast.tree.ParameterNode;import org.hibernate.hql.ast.tree.QueryNode;import org.hibernate.hql.ast.tree.SelectClause;import org.hibernate.hql.ast.tree.SelectExpressionImpl;import org.hibernate.hql.ast.tree.SqlFragment;import org.hibernate.hql.ast.tree.SqlNode;import org.hibernate.hql.ast.tree.UnaryArithmeticNode;import org.hibernate.hql.ast.tree.UpdateStatement;import org.hibernate.hql.ast.tree.BetweenOperatorNode;import org.hibernate.hql.ast.tree.UnaryLogicOperatorNode;import org.hibernate.hql.ast.tree.InLogicOperatorNode;import org.hibernate.hql.ast.tree.JavaConstantNode;import org.hibernate.hql.ast.tree.SessionFactoryAwareNode;import org.hibernate.hql.ast.tree.BooleanLiteralNode;import org.hibernate.hql.ast.tree.IsNullLogicOperatorNode;import org.hibernate.hql.ast.tree.IsNotNullLogicOperatorNode;import java.lang.reflect.Constructor;/** * Custom AST factory the intermediate tree that causes ANTLR to create specialized * AST nodes, given the AST node type (from HqlSqlTokenTypes).   HqlSqlWalker registers * this factory with itself when it is initialized. * * @author Joshua */public class SqlASTFactory extends ASTFactory implements HqlSqlTokenTypes {	private HqlSqlWalker walker;	/**	 * Create factory with a specific mapping from token type	 * to Java AST node type.  Your subclasses of ASTFactory	 * can override and reuse the map stuff.	 */	public SqlASTFactory(HqlSqlWalker walker) {		super();		this.walker = walker;	}	/**	 * Returns the class for a given token type (a.k.a. AST node type).	 *	 * @param tokenType The token type.	 * @return Class - The AST node class to instantiate.	 */	public Class getASTNodeType(int tokenType) {		switch ( tokenType ) {			case SELECT:			case QUERY:				return QueryNode.class;			case UPDATE:				return UpdateStatement.class;			case DELETE:				return DeleteStatement.class;			case INSERT:				return InsertStatement.class;			case INTO:				return IntoClause.class;			case FROM:				return FromClause.class;			case FROM_FRAGMENT:				return FromElement.class;			case IMPLIED_FROM:				return ImpliedFromElement.class;			case DOT:				return DotNode.class;			case INDEX_OP:				return IndexNode.class;				// Alias references and identifiers use the same node class.			case ALIAS_REF:			case IDENT:				return IdentNode.class;			case SQL_TOKEN:				return SqlFragment.class;			case METHOD_CALL:				return MethodNode.class;			case ELEMENTS:			case INDICES:				return CollectionFunction.class;			case SELECT_CLAUSE:				return SelectClause.class;			case SELECT_EXPR:				return SelectExpressionImpl.class;			case AGGREGATE:				return AggregateNode.class;			case COUNT:				return CountNode.class;			case CONSTRUCTOR:				return ConstructorNode.class;			case NUM_INT:			case NUM_FLOAT:			case NUM_LONG:			case NUM_DOUBLE:			case QUOTED_STRING:				return LiteralNode.class;			case TRUE:			case FALSE:				return BooleanLiteralNode.class;			case JAVA_CONSTANT:				return JavaConstantNode.class;			case ORDER:				return OrderByClause.class;			case PLUS:			case MINUS:			case STAR:			case DIV:				return BinaryArithmeticOperatorNode.class;			case UNARY_MINUS:			case UNARY_PLUS:				return UnaryArithmeticNode.class;			case CASE2:				return Case2Node.class;			case CASE:				return CaseNode.class;			case PARAM:			case NAMED_PARAM:				return ParameterNode.class;			case EQ:			case NE:			case LT:			case GT:			case LE:			case GE:			case LIKE:			case NOT_LIKE:				return BinaryLogicOperatorNode.class;			case IN:			case NOT_IN:				return InLogicOperatorNode.class;			case BETWEEN:			case NOT_BETWEEN:				return BetweenOperatorNode.class;			case IS_NULL:				return IsNullLogicOperatorNode.class;			case IS_NOT_NULL:				return IsNotNullLogicOperatorNode.class;			case EXISTS:				return UnaryLogicOperatorNode.class;			default:				return SqlNode.class;		} // switch	}	protected AST createUsingCtor(Token token, String className) {		Class c;		AST t;		try {			c = Class.forName( className );			Class[] tokenArgType = new Class[]{antlr.Token.class};			Constructor ctor = c.getConstructor( tokenArgType );			if ( ctor != null ) {				t = ( AST ) ctor.newInstance( new Object[]{token} ); // make a new one				initializeSqlNode( t );			}			else {				// just do the regular thing if you can't find the ctor				// Your AST must have default ctor to use this.				t = create( c );			}		}		catch ( Exception e ) {			throw new IllegalArgumentException( "Invalid class or can't make instance, " + className );		}		return t;	}	private void initializeSqlNode(AST t) {		// Initialize SQL nodes here.		if ( t instanceof InitializeableNode ) {			InitializeableNode initializeableNode = ( InitializeableNode ) t;			initializeableNode.initialize( walker );		}		if ( t instanceof SessionFactoryAwareNode ) {			( ( SessionFactoryAwareNode ) t ).setSessionFactory( walker.getSessionFactoryHelper().getFactory() );		}	}	/**	 * Actually instantiate the AST node.	 *	 * @param c The class to instantiate.	 * @return The instantiated and initialized node.	 */	protected AST create(Class c) {		AST t;		try {			t = ( AST ) c.newInstance(); // make a new one			initializeSqlNode( t );		}		catch ( Exception e ) {			error( "Can't create AST Node " + c.getName() );			return null;		}		return t;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -