private static SQLExpr toSqlExpr(String sql) { SQLExprParser parser = new ElasticSqlExprParser(sql); SQLExpr expr = parser.expr(); if (parser.getLexer().token() != Token.EOF) { throw new ParserException("illegal sql expr : " + sql); } return expr; }
public void test_binary() throws Exception { SQLExprParser exprParser = new SQLExprParser("AGE > 5"); SQLBinaryOpExpr binaryOpExpr = (SQLBinaryOpExpr) exprParser.expr(); Assert.assertEquals(SQLBinaryOperator.GreaterThan, binaryOpExpr.getOperator()); SQLIdentifierExpr left = (SQLIdentifierExpr) binaryOpExpr.getLeft(); SQLIntegerExpr right = (SQLIntegerExpr) binaryOpExpr.getRight(); Assert.assertEquals("AGE", left.getName()); Assert.assertEquals(5, right.getNumber().intValue()); }
public SQLColumnDefinition parseColumnRest(SQLColumnDefinition column) { if (lexer.token() == Token.ON) { lexer.nextToken(); accept(Token.UPDATE); SQLExpr expr = this.expr(); ((MySqlSQLColumnDefinition) column).setOnUpdate(expr); } if (identifierEquals("AUTO_INCREMENT")) { lexer.nextToken(); if (column instanceof MySqlSQLColumnDefinition) { ((MySqlSQLColumnDefinition) column).setAutoIncrement(true); } return parseColumnRest(column); } if (identifierEquals("precision") && column.getDataType().getName().equalsIgnoreCase("double")) { lexer.nextToken(); } if (identifierEquals("PARTITION")) { throw new ParserException("syntax error " + lexer.token() + " " + lexer.stringVal()); } if (identifierEquals("COMMENT")) { lexer.nextToken(); column.setComment(lexer.stringVal()); accept(Token.LITERAL_CHARS); } super.parseColumnRest(column); return column; }
protected SQLDataType parseDataTypeRest(SQLDataType dataType) { super.parseDataTypeRest(dataType); if (identifierEquals("UNSIGNED")) { lexer.nextToken(); dataType.getAttributes().put("unsigned", true); } return dataType; }