Merge pull request #925 from wenshao/master

improved odps sql formmatter
This commit is contained in:
高铁
2015-07-29 00:57:55 +08:00
11 changed files with 111 additions and 25 deletions
@@ -15,8 +15,11 @@
*/
package com.alibaba.druid.sql.dialect.odps.visitor;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.alibaba.druid.sql.ast.SQLDataType;
import com.alibaba.druid.sql.ast.SQLHint;
import com.alibaba.druid.sql.ast.SQLOrderBy;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
@@ -48,7 +51,24 @@ import com.alibaba.druid.sql.dialect.odps.ast.OdpsUDTFSQLSelectItem;
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVisitor {
private Set<String> builtInFunctions = new HashSet<String>();
{
builtInFunctions.add("IF");
builtInFunctions.add("COALESCE");
builtInFunctions.add("TO_DATE");
builtInFunctions.add("SUBSTR");
builtInFunctions.add("INSTR");
builtInFunctions.add("LENGTH");
builtInFunctions.add("SPLIT");
builtInFunctions.add("TOLOWER");
builtInFunctions.add("TOUPPER");
builtInFunctions.add("EXPLODE");
builtInFunctions.add("LEAST");
builtInFunctions.add("GREATEST");
}
public OdpsOutputVisitor(Appendable appender){
super(appender);
}
@@ -62,8 +82,6 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis
x.getName().accept(this);
x.getName().accept(this);
if (x.getLike() != null) {
print(" LIKE ");
x.getLike().accept(this);
@@ -684,7 +702,7 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis
x.getOwner().accept(this);
print(":");
}
print(x.getMethodName());
printFunctionName(x.getMethodName());
print("(");
printAndAccept(x.getParameters(), ", ");
print(")");
@@ -702,4 +720,24 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis
print(JoinType.toString(joinType));
}
}
public boolean visit(SQLDataType x) {
print(x.getName().toUpperCase());
if (x.getArguments().size() > 0) {
print("(");
printAndAccept(x.getArguments(), ", ");
print(")");
}
return false;
}
protected void printFunctionName(String name) {
String upperName = name.toUpperCase();
if (builtInFunctions.contains(upperName)) {
print(upperName);
} else {
print(name);
}
}
}
@@ -562,12 +562,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
x.getOwner().accept(this);
print(".");
}
print(x.getMethodName());
printFunctionName(x.getMethodName());
print("(");
printAndAccept(x.getParameters(), ", ");
print(")");
return false;
}
protected void printFunctionName(String name) {
print(name);
}
public boolean visit(SQLAggregateExpr x) {
print(x.getMethodName());