public SQLMethodInvokeExpr ltrim(SQLExpr expr) { return new SQLMethodInvokeExpr("ltrim", null, expr); }
public SQLMethodInvokeExpr rtrim(SQLExpr expr) { return new SQLMethodInvokeExpr("rtrim", null, expr); }
public SQLMethodInvokeExpr trim(SQLExpr expr) { return new SQLMethodInvokeExpr("trim", null, expr); }
public SQLMethodInvokeExpr length(SQLExpr expr) { return new SQLMethodInvokeExpr("length", null, expr); }
public SQLMethodInvokeExpr substr(SQLExpr expr) { return new SQLMethodInvokeExpr("substr", null, expr); }
public SQLMethodInvokeExpr lower(SQLExpr expr) { return new SQLMethodInvokeExpr("lower", null, expr); }
public SQLMethodInvokeExpr upper(SQLExpr expr) { return new SQLMethodInvokeExpr("upper", null, expr); }
public SQLMethodInvokeExpr ifnull(SQLExpr expr1, SQLExpr expr2) { if (JdbcConstants.ALIYUN_ADS.equals(dbType) || JdbcConstants.PRESTO.equals(dbType) || JdbcConstants.ODPS.equals(dbType)) { return new SQLMethodInvokeExpr("coalesce", null, expr1, expr2); } if (JdbcConstants.ORACLE.equals(dbType)) { return new SQLMethodInvokeExpr("nvl", null, expr1, expr2); } if (JdbcConstants.SQL_SERVER.equals(dbType)) { return new SQLMethodInvokeExpr("isnull", null, expr1, expr2); } return new SQLMethodInvokeExpr("ifnull", null, expr1, expr2); } }
private static SQLMethodInvokeExpr convertBinaryOperatorToMethod(String operator, SQLBinaryOpExpr expr) { SQLMethodInvokeExpr methodInvokeExpr = new SQLMethodInvokeExpr(operator, null); methodInvokeExpr.addParameter(expr.getLeft()); methodInvokeExpr.addParameter(expr.getRight()); return methodInvokeExpr; }
private boolean explanSpecialCondWithBothSidesAreProperty(SQLBinaryOpExpr bExpr, Where where) throws SqlParseException { //join is not support if ((bExpr.getLeft() instanceof SQLPropertyExpr || bExpr.getLeft() instanceof SQLIdentifierExpr) && (bExpr.getRight() instanceof SQLPropertyExpr || bExpr.getRight() instanceof SQLIdentifierExpr) && Sets.newHashSet("=", "<", ">", ">=", "<=").contains(bExpr.getOperator().getName()) && !Util.isFromJoinOrUnionTable(bExpr) ) { SQLMethodInvokeExpr sqlMethodInvokeExpr = new SQLMethodInvokeExpr("script", null); String operator = bExpr.getOperator().getName(); if (operator.equals("=")) { operator = "=="; } String leftProperty = Util.expr2Object(bExpr.getLeft()).toString(); String rightProperty = Util.expr2Object(bExpr.getRight()).toString(); if (leftProperty.split("\\.").length > 1) { leftProperty = leftProperty.substring(leftProperty.split("\\.")[0].length() + 1); } if (rightProperty.split("\\.").length > 1) { rightProperty = rightProperty.substring(rightProperty.split("\\.")[0].length() + 1); } sqlMethodInvokeExpr.addParameter(new SQLCharExpr( "doc['" + leftProperty + "'].value " + operator + " doc['" + rightProperty + "'].value")); explanCond("AND", sqlMethodInvokeExpr, where); return true; } return false; }
protected SQLExpr parsePosition() { SQLExpr subStr = this.primary(); accept(Token.IN); SQLExpr str = this.expr(); accept(Token.RPAREN); SQLMethodInvokeExpr locate = new SQLMethodInvokeExpr("LOCATE"); locate.addParameter(subStr); locate.addParameter(str); return primaryRest(locate); }
SQLMethodInvokeExpr uuid_generate_v4 = new SQLMethodInvokeExpr("uuid_generate_v4"); || (param0 instanceof SQLIdentifierExpr && ((SQLIdentifierExpr) param0).nameHashCode64() == FnvHash.Constants.CURRENT_TIMESTAMP)) { SQLMethodInvokeExpr current_timestamp = new SQLMethodInvokeExpr("CURRENT_TIMESTAMP"); current_timestamp.addParameter(new SQLIntegerExpr(0)); String text = ((SQLCharExpr) param0).getText(); if ("SESSIONID".equalsIgnoreCase(text)) { SQLMethodInvokeExpr xx = new SQLMethodInvokeExpr(); xx.setMethodName("get_session_id"); xx.setParent(x.getParent()); String text = ((SQLCharExpr) param0).getText(); if ("SESSIONID".equalsIgnoreCase(text)) { SQLMethodInvokeExpr xx = new SQLMethodInvokeExpr(); xx.setMethodName("get_session_id"); xx.setParent(x.getParent());
public SQLMethodInvokeExpr clone() { SQLMethodInvokeExpr x = new SQLMethodInvokeExpr(); x.name = name; if (owner != null) { x.setOwner(owner.clone()); } for (SQLExpr param : parameters) { x.addParameter(param.clone()); } if (from != null) { x.setFrom(from.clone()); } if (using != null) { x.setUsing(using.clone()); } return x; }
@Override protected SQLExpr methodRest(SQLExpr expr, boolean acceptLPAREN) { if (acceptLPAREN) { accept(Token.LPAREN); } if (expr instanceof SQLName || expr instanceof SQLDefaultExpr) { String methodName; SQLMethodInvokeExpr methodInvokeExpr; if (expr instanceof SQLPropertyExpr) { methodName = ((SQLPropertyExpr) expr).getName(); methodInvokeExpr = new SQLMethodInvokeExpr(methodName); methodInvokeExpr.setOwner(((SQLPropertyExpr) expr).getOwner()); } else { methodName = expr.toString(); methodInvokeExpr = new SQLMethodInvokeExpr(methodName); } if (isAggreateFunction(methodName)) { SQLAggregateExpr aggregateExpr = parseAggregateExpr(methodName); return aggregateExpr; } if (lexer.token() != Token.RPAREN) { exprList(methodInvokeExpr.getParameters(), methodInvokeExpr); } accept(Token.RPAREN); return primaryRest(methodInvokeExpr); } throw new ParserException("not support token:" + lexer.token()); }
protected SQLExpr parseAny() { SQLExpr sqlExpr; lexer.nextToken(); if (lexer.token == Token.LPAREN) { accept(Token.LPAREN); if (lexer.token == Token.ARRAY || lexer.token == Token.IDENTIFIER) { SQLExpr expr = this.expr(); SQLMethodInvokeExpr methodInvokeExpr = new SQLMethodInvokeExpr("ANY"); methodInvokeExpr.addParameter(expr); accept(Token.RPAREN); return methodInvokeExpr; } SQLSelect anySubQuery = createSelectParser().select(); SQLAnyExpr anyExpr = new SQLAnyExpr(anySubQuery); accept(Token.RPAREN); sqlExpr = anyExpr; } else { sqlExpr = new SQLIdentifierExpr("ANY"); } return sqlExpr; }
lexer.nextToken(); SQLMethodInvokeExpr methodInvokeExpr = new SQLMethodInvokeExpr("INTERVAL"); if (lexer.token() != Token.RPAREN) { exprList(methodInvokeExpr.getParameters(), methodInvokeExpr);
private boolean explanSpecialCondWithBothSidesAreLiterals(SQLBinaryOpExpr bExpr, Where where) throws SqlParseException { if ((bExpr.getLeft() instanceof SQLNumericLiteralExpr || bExpr.getLeft() instanceof SQLCharExpr) && (bExpr.getRight() instanceof SQLNumericLiteralExpr || bExpr.getRight() instanceof SQLCharExpr) ) { SQLMethodInvokeExpr sqlMethodInvokeExpr = new SQLMethodInvokeExpr("script", null); String operator = bExpr.getOperator().getName(); if (operator.equals("=")) { operator = "=="; } sqlMethodInvokeExpr.addParameter( new SQLCharExpr(Util.expr2Object(bExpr.getLeft(), "'") + " " + operator + " " + Util.expr2Object(bExpr.getRight(), "'")) ); explanCond("AND", sqlMethodInvokeExpr, where); return true; } return false; }
@Override protected SQLExpr methodRest(SQLExpr expr, boolean acceptLPAREN) { if (acceptLPAREN) { accept(Token.LPAREN); } if (lexer.token() == Token.PLUS) { lexer.nextToken(); accept(Token.RPAREN); return new OracleOuterExpr(expr); } if (expr instanceof SQLIdentifierExpr) { String methodName = ((SQLIdentifierExpr) expr).getName(); SQLMethodInvokeExpr methodExpr = new SQLMethodInvokeExpr(methodName); if ("treat".equalsIgnoreCase(methodName)) { OracleTreatExpr treatExpr = new OracleTreatExpr(); treatExpr.setExpr(this.expr()); accept(Token.AS); if (lexer.identifierEquals("REF")) { treatExpr.setRef(true); lexer.nextToken(); } treatExpr.setType(this.expr()); accept(Token.RPAREN); return primaryRest(treatExpr); } } return super.methodRest(expr, false); }
SQLMethodInvokeExpr methodInvokeExpr = new SQLMethodInvokeExpr(name); methodInvokeExpr.setOwner(expr); if (lexer.token == Token.RPAREN) {
protected SQLExpr parseInterval() { accept(Token.INTERVAL); if (lexer.token() == Token.LPAREN) { lexer.nextToken(); SQLMethodInvokeExpr methodInvokeExpr = new SQLMethodInvokeExpr("INTERVAL"); if (lexer.token() != Token.RPAREN) { exprList(methodInvokeExpr.getParameters(), methodInvokeExpr); } accept(Token.RPAREN); return primaryRest(methodInvokeExpr); } else { SQLExpr value = expr(); if (lexer.token() != Token.IDENTIFIER) { throw new ParserException("Syntax error"); } String unit = lexer.stringVal(); lexer.nextToken(); MySqlIntervalExpr intervalExpr = new MySqlIntervalExpr(); intervalExpr.setValue(value); intervalExpr.setUnit(MySqlIntervalUnit.valueOf(unit.toUpperCase())); return intervalExpr; } }