package com.fpcms.common.util;
import org.junit.Assert;
import org.junit.Test;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.SQLParserUtils;
import com.alibaba.druid.sql.parser.SQLStatementParser;
import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter;
public class DruidSqlParserTest {
@Test
public void testExprParser() {
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());
}
@Test
public void testStatementParser() {
SQLStatementParser statParser = SQLParserUtils.createSQLStatementParser("select tdate,count(*) cnt,count(distinct username) ucnt from st_user", "hive");
SQLSelect select = statParser.parseSelect().getSelect();
System.out.println(select.toString());
select.getQuery().accept(new SQLASTVisitorAdapter(){
@Override
public boolean visit(SQLSelectItem x) {
System.out.println("column:"+x);
return super.visit(x);
}
public boolean visit(SQLExprTableSource x){
System.out.println("table:"+x);
return super.visit(x);
}
});
}
}