📄 sql92parser.cup
字号:
} :} | expr:e1 GT expr:e2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("basic_pred '" + e1 + " > " + e2 + "'"); if (e1 == null || e2 == null) { RESULT = new Boolean(false); } else { if (e1 instanceof String) RESULT = new Boolean(((String)e1).compareTo((String)e2) > 0); else RESULT = new Boolean( ((Double)e1).doubleValue() > ((Double)e2).doubleValue()); } :} | expr:e1 GET expr:e2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("basic_pred '" + e1 + " >= " + e2 + "'"); if (e1 == null || e2 == null) { RESULT = new Boolean(false); } else { if (e1 instanceof String) RESULT = new Boolean(((String)e1).compareTo((String)e2) >= 0); else RESULT = new Boolean( ((Double)e1).doubleValue() >= ((Double)e2).doubleValue()); } :} ; /* between_pred ::= expr [ NOT ] BETWEEN expr AND expr */between_pred ::= expr:e1 BETWEEN expr:e2 AND expr:e3 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("between_pred: '" + e1 + " BETWEEN " + e2 + " AND " + e3 + "'"); if (e1 == null || e2 == null || e3 == null) { RESULT = new Boolean(false); } else { if (e1 instanceof String) { RESULT = new Boolean((((String)e1).compareTo((String)e2) >= 0) && (((String)e1).compareTo((String)e3) <= 0)); } else { RESULT = new Boolean(((Double)e1).doubleValue() >= ((Double)e2).doubleValue() && ((Double)e1).doubleValue() <= ((Double)e3).doubleValue()); } } :} ;null_pred ::= STRING:l IS NULL {: RESULT = new Boolean(l == null); :} | STRING:l IS NOT NULL {: RESULT = new Boolean(l != null); :} | NUMBER:l IS NULL {: RESULT = new Boolean(l == null); :} | NUMBER:l IS NOT NULL {: RESULT = new Boolean(l != null); :} | NULL_OBJECT IS NULL {: RESULT = new Boolean(true); :} | NULL_OBJECT IS NOT NULL {: RESULT = new Boolean(false); :} ;like_pred ::= STRING:p1 LIKE STRING:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " LIKE " + p2 + "'"); LikeOpWrapper wrapper = parser.getExpression(p2, (char)0, true); if (wrapper != null) { RESULT = new Boolean(wrapper.match(p1)); } else { RESULT = new Boolean(false); } :} | NULL_OBJECT:p1 LIKE STRING:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " LIKE " + p2 + "'"); RESULT = new Boolean(false); :} | STRING:p1 NOT LIKE STRING:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " NOT LIKE " + p2 + "'"); LikeOpWrapper wrapper = parser.getExpression(p2, (char)0, true); if (wrapper != null) { RESULT = new Boolean(!wrapper.match(p1)); } else { RESULT = new Boolean(true); } :} | NULL_OBJECT:p1 NOT LIKE STRING:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " NOT LIKE " + p2 + "'"); RESULT = new Boolean(true); :} | STRING:p1 LIKE STRING:p2 ESCAPE ESC:esc {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " LIKE " + p2 + " ESCAPE " + esc + "'"); LikeOpWrapper wrapper = parser.getExpression(p2, esc.charValue(), true); if (wrapper != null) { RESULT = new Boolean(wrapper.match(p1)); } else { RESULT = new Boolean(false); } :} | NULL_OBJECT:p1 LIKE STRING:p2 ESCAPE ESC:esc {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " LIKE " + p2 + " ESCAPE " + esc + "'"); RESULT = new Boolean(false); :} | STRING:p1 NOT LIKE STRING:p2 ESCAPE ESC:esc {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " NOT LIKE " + p2 + " ESCAPE " + esc + "'"); LikeOpWrapper wrapper = parser.getExpression(p2, esc.charValue(), true); if (wrapper != null) { RESULT = new Boolean(!wrapper.match(p1)); } else { RESULT = new Boolean(true); } :} | NULL_OBJECT:p1 NOT LIKE STRING:p2 ESCAPE ESC:esc {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("like_pred: '" + p1 + " NOT LIKE " + p2 + " ESCAPE " + esc + "'"); RESULT = new Boolean(true); :} ;/* This is not jms specific. It is a special xmlBlaster extention */regex_pred ::= STRING:p1 REGEX STRING:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("regex_pred: '" + p1 + " REGEX " + p2 + "'"); LikeOpWrapper wrapper = parser.getExpression(p2, (char)0, false); if (wrapper != null) { RESULT = new Boolean(wrapper.match(p1)); } else { RESULT = new Boolean(false); } :} | NULL_OBJECT:p1 REGEX STRING:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("regex_pred: '" + p1 + " REGEX " + p2 + "'"); RESULT = new Boolean(false); :} ;/* in_pred ::= expr [ NOT ] IN { (constant , constant [ , ... ] ) } */in_value ::= STRING:v {: RESULT = v; :} | NUMBER:v {: RESULT = v; :} ;in_term ::= in_value:v1 COMMA in_value:v2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("in_term '" + v1 + ", " + v2 + "'"); java.util.Set set = new java.util.HashSet(); if (v1 != null) set.add(v1); if (v2 != null) set.add(v2); RESULT = set; :} | in_value:v COMMA in_term:s {: if (s == null) s = new java.util.HashSet(); if (v != null) s.add(v); RESULT = s; :} ;in_pred ::= expr:e IN L_BRACKET in_value:v R_BRACKET {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("in_pred '" + e + "IN(" + v + ")'"); if (e == null || v == null) RESULT = new Boolean(false); else { if (e instanceof String) RESULT = new Boolean(e.equals(v)); else RESULT = new Boolean(((Double)e).doubleValue() == ((Double)v).doubleValue()); } :} | expr:e IN L_BRACKET in_term:s R_BRACKET {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("in_pred '" + e + " IN (" + s + ")'"); if (e == null || s == null) RESULT = new Boolean(false); else { RESULT = new Boolean(s.contains(e)); } :}/* | NOT in_pred:p {: if (p == null) { RESULT = new Boolean(true); } else { RESULT = new Boolean(!p.booleanValue()); } :};*/ ;expr ::= math_term:e {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("expr(math_term) '" + e + "'"); RESULT = e; :} | STRING:l {: RESULT = l; :} ; math_term ::= math_term:p1 PLUS math_term:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_term(math_term + math_term): '" + p1 + " + " + p2 + "'"); if (p1 == null) { RESULT = p2; } else if (p2 == null) { RESULT = p1; } else { RESULT = new Double(p1.doubleValue() + p2.doubleValue()); } :} | math_term:p1 MINUS math_term:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_term(math_term - math_term): '" + p1 + " - " + p2 + "'"); if (p1 == null) { RESULT = p2; } else if (p2 == null) { RESULT = p1; } else { RESULT = new Double(p1.doubleValue() - p2.doubleValue()); } :} | math_factor:p {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_term(math_factor) '" + p + "'"); RESULT = p; :} ; math_factor ::= math_factor:p1 TIMES math_term:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_factor(math_factor * math_term): '" + p1 + " * " + p2 + "'"); if (p1 == null || p2 == null) { RESULT = null; } else { RESULT = new Double(p1.doubleValue() * p2.doubleValue()); } :} | math_factor:p1 DIV math_term:p2 {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_factor(math_factor / math_term): '" + p1 + " / " + p2 + "'"); if (p1 == null || p2 == null) { RESULT = null; } else { RESULT = new Double(p1.doubleValue() / p2.doubleValue()); } :} | math_pred:p {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_factor(math_pred) '" + p + "'"); RESULT = p; :} ;math_pred ::= MINUS math_pred:p {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_pred(-math_pred) '-" + p + "'"); if (p == null) { RESULT = null; } else { RESULT = new Double(-p.doubleValue()); } :} %prec UMINUS | PLUS math_pred:p {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_pred(+math_pred) '+" + p + "'"); RESULT = p; :} %prec UMINUS | L_BRACKET math_term:p R_BRACKET {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_pred((math_term)) '(" + p + ")'"); RESULT = p; :} | NUMBER:p {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_pred(NUMBER) '" + p + "'"); RESULT = p; :} | NULL_OBJECT:p {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("math_pred(NULL_OBJECT) '" + p + "'"); RESULT = (Double)null; :} ;ESC ::= | STRING:p {: if (Sql92Parser.log.isLoggable(Level.FINER)) Sql92Parser.log.finer("ESC(STRING) '" + p + "'"); RESULT = new Character(p.charAt(0)); :} ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -