📄 jcrsql.jjt
字号:
| ((<NOT> { jjtThis.setNegate(true); })? ( (<BETWEEN> { jjtThis.setOperationType(QueryConstants.OPERATION_BETWEEN); } Literal() <AND> Literal()) | ( <LIKE> { jjtThis.setOperationType(QueryConstants.OPERATION_LIKE); } value = CharStringLiteral() { ASTLiteral s = new ASTLiteral(JJTLITERAL); s.setType(QueryConstants.TYPE_STRING); s.setValue(value); jjtree.pushNode(s); } (<ESCAPE> escapeString = CharStringLiteral() { jjtThis.setEscapeString(escapeString); })? ) ) ) | (<IS> (<NOT> { jjtThis.setNegate(true); })? <NULL> { jjtThis.setOperationType(jjtThis.isNegate() ? QueryConstants.OPERATION_NOT_NULL : QueryConstants.OPERATION_NULL); } ) ) ) | ( Literal() (<NOT> { jjtThis.setNegate(true); })? <IN> ( ( identifier = Identifier() | identifier = PropertyFunction() ) { jjtThis.setIdentifier(identifier); jjtThis.setOperationType(jjtThis.isNegate() ? QueryConstants.OPERATION_NE_GENERAL : QueryConstants.OPERATION_EQ_GENERAL); } ) ) )}QName PropertyFunction() #void :{ QName identifier;}{ ( identifier = LowerFunction() | identifier = UpperFunction() ) { return identifier; }}QName LowerFunction() :{ QName identifier;}{ ( <LOWER> "(" identifier = Identifier() ")" ) { return identifier; }}QName UpperFunction() :{ QName identifier;}{ ( <UPPER> "(" identifier = Identifier() ")" ) { return identifier; }}int ComparisonOperation() #void :{ int operationType;}{ ( <EQ_OPERATOR> { operationType = QueryConstants.OPERATION_EQ_GENERAL; } | <NE_OPERATOR> { operationType = QueryConstants.OPERATION_NE_GENERAL; } | <LT_OPERATOR> { operationType = QueryConstants.OPERATION_LT_GENERAL; } | <GT_OPERATOR> { operationType = QueryConstants.OPERATION_GT_GENERAL; } | <LE_OPERATOR> { operationType = QueryConstants.OPERATION_LE_GENERAL; } | <GE_OPERATOR> { operationType = QueryConstants.OPERATION_GE_GENERAL; } ) { return operationType; }}// SEARCH CONDITION 8.12void SearchCondition() #void :{}{ OrExpression()}void OrExpression() #void :{}{ ( AndExpression() (<OR> AndExpression())* ) #OrExpression(>1)}void AndExpression() #void :{}{ ( UnaryExpression() (<AND> UnaryExpression())* ) #AndExpression(>1)}void UnaryExpression() #void :{}{ ( <NOT> UnaryExpression() ) #NotExpression()| ( PrimaryExpression() )}void PrimaryExpression() #void :{}{ ( Predicate() )| ( BracketExpression() )| ( ContainsExpression() )}void BracketExpression() :{}{ <LEFT_PAREN> SearchCondition() <RIGHT_PAREN>}void ContainsExpression() :{ Token t = null; QName name = null;}{ <CONTAINS> <LEFT_PAREN> ( <ASTERISK> | <PERIOD> | (name = Identifier() { jjtThis.setPropertyName(name); }) ) "," t = <CHAR_STRING_LITERAL> { jjtThis.setQuery(t.image.substring(1, t.image.length() - 1).replaceAll("''", "'")); } <RIGHT_PAREN>}void Literal() :{ Token t = null; String value;}{ ( t = <APPROXIMATE_NUMERIC_LITERAL> { jjtThis.setType(QueryConstants.TYPE_DOUBLE); jjtThis.setValue(t.image); } | // can contain a dot -> use double t = <EXACT_NUMERIC_LITERAL> { if (t.image.indexOf('.') > -1) { jjtThis.setType(QueryConstants.TYPE_DOUBLE); } else { jjtThis.setType(QueryConstants.TYPE_LONG); } jjtThis.setValue(t.image); } | value = CharStringLiteral() { jjtThis.setType(QueryConstants.TYPE_STRING); jjtThis.setValue(value); } | t = <DATETIME_LITERAL> { if (t.image.startsWith("TIMESTAMP")) { jjtThis.setValue(t.image.substring(t.image.indexOf('\'') + 1, t.image.length() - 1)); if (jjtThis.getValue().indexOf(" ") == 10) { // replace SQL 92 timesamp string with ISO8601 StringBuffer tmp = new StringBuffer(); tmp.append(jjtThis.getValue().substring(0, 10)); tmp.append("T").append(jjtThis.getValue().substring(11)); jjtThis.setValue(tmp.toString()); } jjtThis.setType(QueryConstants.TYPE_TIMESTAMP); /* } else if (t.image.startsWith("TIME")) { jjtThis.setValue(t.image.substring(t.image.indexOf('\'') + 1, t.image.length() - 1)); jjtThis.setType(QueryConstants.TYPE_TIME); */ } else { jjtThis.setValue(t.image.substring(t.image.indexOf('\'') + 1, t.image.length() - 1)); jjtThis.setType(QueryConstants.TYPE_DATE); } } )}String CharStringLiteral() #void :{ Token t; String value = "";}{ ( t = <CHAR_STRING_LITERAL> { value += t.image.substring(1, t.image.length() - 1); } ( t = <CHAR_STRING_LITERAL> { value += t.image.substring(1, t.image.length() - 1); } )* ) { // strip any quote escapes return value.replaceAll("''", "'"); }}QName Identifier() :{ Token t = null; QName name = null;}{ ( t = <REGULAR_IDENTIFIER> { try { jjtThis.setName(NameFormat.parse(t.image, resolver)); } catch (NameException e) { throw new ParseException(e.getMessage()); } } | t = <DELIMITED_IDENTIFIER> { try { jjtThis.setName(NameFormat.parse(t.image.substring(1, t.image.length()-1), resolver)); } catch (NameException e) { throw new ParseException(e.getMessage()); } } | ( ( // or any keyword t = <BY> | t = <IN> | t = <OR> | t = <IS> | t = <AND> /*| <NOT>*/ | t = <LIKE> | t = <NULL> | t = <FROM> | t = <ORDER> | t = <WHERE> | t = <SELECT> | t = <BETWEEN> ) { try { jjtThis.setName(NameFormat.parse(t.image, resolver)); } catch (NameException e) { throw new ParseException(e.getMessage()); } } ) ) { return jjtThis.getName(); }}QName ExcerptFunction() :{}{ <EXCERPT> "(" <PERIOD> ")" { return new QName(QName.NS_REP_URI, "excerpt(.)"); }}void OrderByClause() :{}{ <ORDER> <BY> OrderSpec() (<COMMA> OrderSpec())*}void OrderSpec() :{}{ Identifier() (AscendingOrderSpec() | DescendingOrderSpec())?}void AscendingOrderSpec() :{}{ <ASC>}void DescendingOrderSpec() :{}{ <DESC>}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -