亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sql-gen.g

?? hibernate-distribution-3.3.1.GA-dist.zip源碼
?? G
字號:
header{//   $Id: sql-gen.g 10001 2006-06-08 21:08:04Z steve.ebersole@jboss.com $package org.hibernate.hql.antlr;import org.slf4j.Logger;import org.slf4j.LoggerFactory;}/** * SQL Generator Tree Parser, providing SQL rendering of SQL ASTs produced by the previous phase, HqlSqlWalker.  All * syntax decoration such as extra spaces, lack of spaces, extra parens, etc. should be added by this class. * <br> * This grammar processes the HQL/SQL AST and produces an SQL string.  The intent is to move dialect-specific * code into a sub-class that will override some of the methods, just like the other two grammars in this system. * @author Joshua Davis (joshua@hibernate.org) */class SqlGeneratorBase extends TreeParser;options {	// Note: importVocab and exportVocab cause ANTLR to share the token type numbers between the	// two grammars.  This means that the token type constants from the source tree are the same	// as those in the target tree.  If this is not the case, tree translation can result in	// token types from the *source* tree being present in the target tree.	importVocab=HqlSql;         // import definitions from "HqlSql"	exportVocab=Sql;            // Call the resulting definitions "Sql"	buildAST=false;             // Don't build an AST.}{	private static Logger log = LoggerFactory.getLogger(SqlGeneratorBase.class);   /** the buffer resulting SQL statement is written to */	private StringBuffer buf = new StringBuffer();	protected void out(String s) {		buf.append(s);	}	/**	 * Returns the last character written to the output, or -1 if there isn't one.	 */	protected int getLastChar() {		int len = buf.length();		if ( len == 0 )			return -1;		else			return buf.charAt( len - 1 );	}	/**	 * Add a aspace if the previous token was not a space or a parenthesis.	 */	protected void optionalSpace() {		// Implemented in the sub-class.	}	protected void out(AST n) {		out(n.getText());	}	protected void separator(AST n, String sep) {		if (n.getNextSibling() != null)			out(sep);	}	protected boolean hasText(AST a) {		String t = a.getText();		return t != null && t.length() > 0;	}	protected void fromFragmentSeparator(AST a) {		// moved this impl into the subclass...	}	protected void nestedFromFragment(AST d,AST parent) {		// moved this impl into the subclass...	}	protected StringBuffer getStringBuffer() {		return buf;	}	protected void nyi(AST n) {		throw new UnsupportedOperationException("Unsupported node: " + n);	}	protected void beginFunctionTemplate(AST m,AST i) {		// if template is null we just write the function out as it appears in the hql statement		out(i);		out("(");	}	protected void endFunctionTemplate(AST m) {	      out(")");	}	protected void commaBetweenParameters(String comma) {		out(comma);	}}statement	: selectStatement	| updateStatement	| deleteStatement	| insertStatement	;selectStatement	: #(SELECT { out("select "); }		selectClause		from		( #(WHERE { out(" where "); } whereExpr ) )?		( #(GROUP { out(" group by "); } groupExprs ( #(HAVING { out(" having "); } booleanExpr[false]) )? ) )?		( #(ORDER { out(" order by "); } orderExprs ) )?	)	;// Note: eats the FROM token node, as it is not valid in an update statement.// It's outlived its usefulness after analysis phase :)// TODO : needed to use conditionList directly here and deleteStatement, as whereExprs no longer works for this stuffupdateStatement	: #(UPDATE { out("update "); }		#( FROM fromTable )		setClause		(whereClause)?	)	;deleteStatement	// Note: not space needed at end of "delete" because the from rule included one before the "from" it outputs	: #(DELETE { out("delete"); }		from		(whereClause)?	)	;insertStatement	: #(INSERT { out( "insert " ); }		i:INTO { out( i ); out( " " ); }		selectStatement	)	;setClause	// Simply re-use comparisionExpr, because it already correctly defines the EQ rule the	// way it is needed here; not the most aptly named, but ah	: #( SET { out(" set "); } comparisonExpr[false] ( { out(", "); } comparisonExpr[false] )* )	;whereClause	: #(WHERE { out(" where "); } whereClauseExpr )	;whereClauseExpr	: (SQL_TOKEN) => conditionList	| booleanExpr[ false ]	;orderExprs	// TODO: remove goofy space before the comma when we don't have to regression test anymore.	: ( expr ) (dir:orderDirection { out(" "); out(dir); })? ( {out(", "); } orderExprs)?	;groupExprs	// TODO: remove goofy space before the comma when we don't have to regression test anymore.	: expr ( {out(" , "); } groupExprs)?	;orderDirection	: ASCENDING	| DESCENDING	;whereExpr	// Expect the filter subtree, followed by the theta join subtree, followed by the HQL condition subtree.	// Might need parens around the HQL condition if there is more than one subtree.	// Put 'and' between each subtree.	: filters		( { out(" and "); } thetaJoins )?		( { out(" and "); } booleanExpr [ true ] )?	| thetaJoins		( { out(" and "); } booleanExpr [ true ] )? 	| booleanExpr[false]	;filters	: #(FILTERS conditionList )	;thetaJoins	: #(THETA_JOINS conditionList )	;conditionList	: sqlToken ( { out(" and "); } conditionList )?	;selectClause	: #(SELECT_CLAUSE (distinctOrAll)? ( selectColumn )+ )	;selectColumn	: p:selectExpr (sc:SELECT_COLUMNS { out(sc); } )? { separator( (sc != null) ? sc : p,", "); }	;selectExpr	: e:selectAtom { out(e); }	| count	| #(CONSTRUCTOR (DOT | IDENT) ( selectColumn )+ )	| methodCall	| aggregate	| c:constant { out(c); }	| arithmeticExpr	| PARAM { out("?"); }	| sn:SQL_NODE { out(sn); }	| { out("("); } selectStatement { out(")"); }	;count	: #(COUNT { out("count("); }  ( distinctOrAll ) ? countExpr { out(")"); } )	;distinctOrAll	: DISTINCT { out("distinct "); }	| ALL { out("all "); }	;countExpr	// Syntacitic predicate resolves star all by itself, avoiding a conflict with STAR in expr.	: ROW_STAR { out("*"); }	| simpleExpr	;selectAtom	: DOT	| SQL_TOKEN	| ALIAS_REF	| SELECT_EXPR	;// The from-clause piece is all goofed up.  Currently, nodes of type FROM_FRAGMENT// and JOIN_FRAGMENT can occur at any level in the FromClause sub-tree. We really// should come back and clean this up at some point; which I think will require// a post-HqlSqlWalker phase to "re-align" the FromElements in a more sensible// manner.from	: #(f:FROM { out(" from "); }		(fromTable)* )	;fromTable	// Write the table node (from fragment) and all the join fragments associated with it.	: #( a:FROM_FRAGMENT  { out(a); } (tableJoin [ a ])* { fromFragmentSeparator(a); } )	| #( b:JOIN_FRAGMENT  { out(b); } (tableJoin [ b ])* { fromFragmentSeparator(b); } )	;tableJoin [ AST parent ]	: #( c:JOIN_FRAGMENT { out(" "); out(c); } (tableJoin [ c ] )* )	| #( d:FROM_FRAGMENT { nestedFromFragment(d,parent); } (tableJoin [ d ] )* )	;booleanOp[ boolean parens ]	: #(AND booleanExpr[true] { out(" and "); } booleanExpr[true])	| #(OR { if (parens) out("("); } booleanExpr[false] { out(" or "); } booleanExpr[false] { if (parens) out(")"); })	| #(NOT { out(" not ("); } booleanExpr[false] { out(")"); } )	;booleanExpr[ boolean parens ]	: booleanOp [ parens ]	| comparisonExpr [ parens ]	| st:SQL_TOKEN { out(st); } // solely for the purpose of mapping-defined where-fragments	;	comparisonExpr[ boolean parens ]	: binaryComparisonExpression	| { if (parens) out("("); } exoticComparisonExpression { if (parens) out(")"); }	;	binaryComparisonExpression	: #(EQ expr { out("="); } expr)	| #(NE expr { out("<>"); } expr)	| #(GT expr { out(">"); } expr)	| #(GE expr { out(">="); } expr)	| #(LT expr { out("<"); } expr)	| #(LE expr { out("<="); } expr)	;	exoticComparisonExpression	: #(LIKE expr { out(" like "); } expr likeEscape )	| #(NOT_LIKE expr { out(" not like "); } expr likeEscape)	| #(BETWEEN expr { out(" between "); } expr { out(" and "); } expr)	| #(NOT_BETWEEN expr { out(" not between "); } expr { out(" and "); } expr)	| #(IN expr { out(" in"); } inList )	| #(NOT_IN expr { out(" not in "); } inList )	| #(EXISTS { optionalSpace(); out("exists "); } quantified )	| #(IS_NULL expr) { out(" is null"); }	| #(IS_NOT_NULL expr) { out(" is not null"); }	;likeEscape	: ( #(ESCAPE { out(" escape "); } expr) )?	;inList	: #(IN_LIST { out(" "); } ( parenSelect | simpleExprList ) )	;	simpleExprList	: { out("("); } (e:simpleExpr { separator(e," , "); } )* { out(")"); }	;// A simple expression, or a sub-select with parens around it.expr	: simpleExpr	| #( VECTOR_EXPR { out("("); } (e:expr { separator(e," , "); } )*  { out(")"); } )	| parenSelect	| #(ANY { out("any "); } quantified )	| #(ALL { out("all "); } quantified )	| #(SOME { out("some "); } quantified )	;	quantified	: { out("("); } ( sqlToken | selectStatement ) { out(")"); } 	;	parenSelect	: { out("("); } selectStatement { out(")"); }	;	simpleExpr	: c:constant { out(c); }	| NULL { out("null"); }	| addrExpr	| sqlToken	| aggregate	| methodCall	| count	| parameter	| arithmeticExpr	;	constant	: NUM_DOUBLE	| NUM_FLOAT	| NUM_INT	| NUM_LONG	| QUOTED_STRING	| CONSTANT	| JAVA_CONSTANT	| TRUE	| FALSE	| IDENT	;	arithmeticExpr	: additiveExpr	| multiplicativeExpr//	| #(CONCAT { out("("); } expr ( { out("||"); } expr )+ { out(")"); } )	| #(UNARY_MINUS { out("-"); } expr)	| caseExpr	;additiveExpr	: #(PLUS expr { out("+"); } expr)	| #(MINUS expr { out("-"); } nestedExprAfterMinusDiv)	;multiplicativeExpr	: #(STAR nestedExpr { out("*"); } nestedExpr)	| #(DIV nestedExpr { out("/"); } nestedExprAfterMinusDiv)	;nestedExpr	// Generate parens around nested additive expressions, use a syntactic predicate to avoid conflicts with 'expr'.	: (additiveExpr) => { out("("); } additiveExpr { out(")"); }	| expr	;	nestedExprAfterMinusDiv	// Generate parens around nested arithmetic expressions, use a syntactic predicate to avoid conflicts with 'expr'.	: (arithmeticExpr) => { out("("); } arithmeticExpr { out(")"); }	| expr	;caseExpr	: #(CASE { out("case"); } 		( #(WHEN { out( " when "); } booleanExpr[false] { out(" then "); } expr) )+ 		( #(ELSE { out(" else "); } expr) )?		{ out(" end"); } )	| #(CASE2 { out("case "); } expr		( #(WHEN { out( " when "); } expr { out(" then "); } expr) )+ 		( #(ELSE { out(" else "); } expr) )?		{ out(" end"); } )	;aggregate	: #(a:AGGREGATE { out(a); out("("); }  expr { out(")"); } )	;methodCall	: #(m:METHOD_CALL i:METHOD_NAME { beginFunctionTemplate(m,i); }	 ( #(EXPR_LIST (arguments)? ) )?	 { endFunctionTemplate(m); } )	;arguments	: expr ( { commaBetweenParameters(", "); } expr )*	;parameter	: n:NAMED_PARAM { out(n); }	| p:PARAM { out(p); }	;addrExpr	: #(r:DOT . .) { out(r); }	| i:ALIAS_REF { out(i); }	| j:INDEX_OP { out(j); }	;sqlToken	: t:SQL_TOKEN { out(t); }	;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷开心激情综合| 国产精品久久久久久久久免费相片| 韩国在线一区二区| 精品日本一线二线三线不卡| 国产精品一品视频| 精品一区二区三区视频| 亚洲高清免费观看高清完整版在线观看| 免费在线观看视频一区| 久久一日本道色综合| 欧美成人a∨高清免费观看| 成人中文字幕合集| 国产河南妇女毛片精品久久久| 欧美日韩国产高清一区二区 | 日本欧美韩国一区三区| 久久综合色婷婷| 久久人人97超碰com| 精品国精品自拍自在线| 欧美日韩精品欧美日韩精品| 欧美在线免费观看亚洲| 国产乱人伦偷精品视频免下载| 日韩精品中午字幕| 久久久久久夜精品精品免费| 久久午夜国产精品| 在线观看av不卡| 成人少妇影院yyyy| 色综合激情五月| 欧美日产国产精品| 精品国产伦理网| 91精品国产欧美一区二区| 欧美va亚洲va国产综合| 精品视频资源站| 日韩一二三区视频| 一区二区三区四区国产精品| 欧美私人免费视频| 91精品国产一区二区三区香蕉 | 精品成人免费观看| 欧美精品黑人性xxxx| 555夜色666亚洲国产免| 欧美色图12p| 99精品视频一区二区三区| 欧美日韩中文精品| 久久久久久久免费视频了| 亚洲女人的天堂| 国产在线一区二区综合免费视频| 精品国产一区二区三区av性色| 麻豆久久一区二区| 日韩精品91亚洲二区在线观看| 亚洲欧洲av色图| 五月激情六月综合| av成人老司机| 99视频精品免费视频| 日韩片之四级片| 亚洲乱码一区二区三区在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美va在线播放| 91麻豆精品国产91久久久久| 日韩欧美视频在线| 久久综合国产精品| 丝瓜av网站精品一区二区 | 欧美精品成人一区二区三区四区| 99r国产精品| 欧美成人精品福利| 亚洲成人动漫精品| 色综合欧美在线| 欧美三级日韩三级| 日韩一二三四区| 亚洲成人av资源| 在线影视一区二区三区| 6080国产精品一区二区| 亚洲一线二线三线久久久| 亚洲成人av一区二区| 97精品久久久午夜一区二区三区 | 亚洲狠狠爱一区二区三区| av中文字幕在线不卡| 国产日韩v精品一区二区| 麻豆91在线播放免费| 日韩三级电影网址| 蜜桃av噜噜一区二区三区小说| 国产精品网站在线观看| 精品一区二区在线免费观看| 成人av网站在线观看免费| 精品久久久久久久久久久久久久久久久 | 亚洲欧美偷拍三级| 午夜欧美视频在线观看 | 日韩精品自拍偷拍| 国产精品成人免费在线| 国产成人一区二区精品非洲| www国产成人| 亚洲精品免费电影| 紧缚奴在线一区二区三区| 91视频在线观看免费| 日韩毛片精品高清免费| 91色视频在线| 久久久久国产精品麻豆| 国产91精品一区二区麻豆网站| 国产在线播放一区二区三区| 欧美亚洲一区三区| 丝袜诱惑亚洲看片| jlzzjlzz亚洲女人18| 18涩涩午夜精品.www| 在线观看视频一区| 青青草97国产精品免费观看无弹窗版| 韩国av一区二区三区在线观看| 99久久精品免费看| 久久婷婷综合激情| av一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 亚洲精选视频在线| 91精品国产91综合久久蜜臀| 一区二区三区91| 97se亚洲国产综合自在线不卡 | 国产精品成人一区二区艾草| 午夜精品久久久久久久| 97精品久久久久中文字幕| 国产欧美日韩一区二区三区在线观看| 亚洲综合久久久久| 91在线一区二区| 麻豆精品国产传媒mv男同| 欧美在线看片a免费观看| 美女精品一区二区| 国产精品国产三级国产a| 在线电影一区二区三区| 亚洲6080在线| 中文av一区二区| 欧美成人a视频| 久久www免费人成看片高清| 欧美一区二区二区| 亚洲成年人网站在线观看| 久久精品无码一区二区三区| 欧美日韩免费一区二区三区视频| 久久久久国色av免费看影院| 欧美在线观看18| 亚洲成人自拍一区| 亚洲欧美在线另类| 欧美精品一区二区不卡| 欧美日韩亚洲另类| av在线综合网| 亚洲综合一区二区| 欧美图片一区二区三区| 粉嫩嫩av羞羞动漫久久久| 亚洲区小说区图片区qvod| 久久综合久久久久88| 在线成人免费视频| 欧美无砖砖区免费| 色综合天天做天天爱| 国产白丝网站精品污在线入口| 中文无字幕一区二区三区| 欧美xingq一区二区| 国产亚洲成av人在线观看导航| 国产精品欧美久久久久无广告| 午夜精品福利视频网站| 日韩一级免费一区| 欧美午夜视频网站| 色综合久久久久久久久| 99久久久免费精品国产一区二区| 欧美一二三区精品| 91网站最新网址| 亚洲国产一区二区三区青草影视| 91麻豆精品国产91久久久久久| 亚洲精品国产高清久久伦理二区| 欧美性猛片aaaaaaa做受| 在线免费不卡电影| 欧美图区在线视频| 国产成人亚洲综合a∨婷婷图片| 宅男噜噜噜66一区二区66| 粉嫩嫩av羞羞动漫久久久| 国产乱色国产精品免费视频| 国产精品一线二线三线| 亚洲第一会所有码转帖| 久久久www成人免费毛片麻豆| 色先锋久久av资源部| 极品少妇一区二区| 激情五月婷婷综合| 国产高清视频一区| 欧美aaaaa成人免费观看视频| 日本一区二区电影| 日韩欧美一级二级| 国产欧美日韩卡一| 日韩视频一区二区三区在线播放 | 欧美高清一级片在线观看| 国产精品天天看| 久久久不卡网国产精品一区| 中文字幕国产一区二区| 在线成人小视频| 国产欧美一区二区精品性色超碰| 丁香五精品蜜臀久久久久99网站 | 一本色道久久综合亚洲91| 国产精品一区二区在线播放| 免费观看在线色综合| 国产精品一区二区视频| 欧美自拍丝袜亚洲| 久久丝袜美腿综合| 日韩欧美综合在线| 国产精品高清亚洲| 午夜精品一区二区三区免费视频| 国产精品高潮呻吟| 成人免费在线视频| 一区免费观看视频| 人妖欧美一区二区| 免费一级欧美片在线观看|