Merge pull request #942 from wenshao/master

improved odps sql formatter
This commit is contained in:
高铁
2015-08-31 20:56:29 +08:00
11 changed files with 45 additions and 18 deletions
@@ -30,6 +30,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
import com.alibaba.druid.sql.ast.statement.SQLSelectQuery;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.ast.statement.SQLSetStatement;
import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement;
import com.alibaba.druid.sql.dialect.db2.visitor.DB2OutputVisitor;
@@ -267,6 +268,10 @@ public class SQLUtils {
}
}
visitor.println();
if (!(stmt instanceof SQLSetStatement)) {
visitor.println();
}
}
{
List<String> comments = stmt.getBeforeCommentsDirect();
@@ -21,6 +21,7 @@ import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLHint;
import com.alibaba.druid.sql.ast.SQLOrderBy;
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
@@ -34,7 +35,7 @@ public class OdpsSelectQueryBlock extends SQLSelectQueryBlock {
protected List<SQLHint> hints;
protected SQLExpr distributeBy;
protected SQLExpr sortBy;
protected SQLSelectOrderByItem sortBy;
public OdpsSelectQueryBlock(){
@@ -56,11 +57,11 @@ public class OdpsSelectQueryBlock extends SQLSelectQueryBlock {
this.distributeBy = distributeBy;
}
public SQLExpr getSortBy() {
public SQLSelectOrderByItem getSortBy() {
return sortBy;
}
public void setSortBy(SQLExpr sortBy) {
public void setSortBy(SQLSelectOrderByItem sortBy) {
this.sortBy = sortBy;
}
@@ -16,7 +16,9 @@
package com.alibaba.druid.sql.dialect.odps.parser;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
import com.alibaba.druid.sql.ast.statement.SQLSelectQuery;
import com.alibaba.druid.sql.dialect.odps.ast.OdpsSelectQueryBlock;
import com.alibaba.druid.sql.parser.SQLExprParser;
@@ -88,7 +90,18 @@ public class OdpsSelectParser extends SQLSelectParser {
if (identifierEquals("SORT")) {
lexer.nextToken();
accept(Token.BY);
SQLExpr sortBy = this.expr();
SQLExpr expr = this.expr();
SQLSelectOrderByItem sortBy = new SQLSelectOrderByItem(expr);
if (lexer.token() == Token.ASC) {
sortBy.setType(SQLOrderingSpecification.ASC);
lexer.nextToken();
} else if (lexer.token() == Token.DESC) {
sortBy.setType(SQLOrderingSpecification.DESC);
lexer.nextToken();
}
queryBlock.setSortBy(sortBy);
}
}
@@ -79,6 +79,8 @@ public class Lexer {
protected boolean keepComments = false;
protected int line = 0;
protected int lines = 0;
public Lexer(String input){
this(input, null);
@@ -293,10 +295,15 @@ public class Lexer {
comments = null;
}
this.lines = 0;
int startLine = line;
for (;;) {
if (isWhitespace(ch)) {
if (ch == '\n') {
line++;
lines = line - startLine;
}
scanChar();