Skip to content

Commit

Permalink
improve sql parser
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Jun 1, 2014
1 parent 4df624a commit 3526ac3
Show file tree
Hide file tree
Showing 32 changed files with 130 additions and 317 deletions.
3 changes: 2 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -439,13 +439,14 @@
<scope>provided</scope>
</dependency>

<!--
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0.2206.100</version>
<scope>test</scope>
</dependency>

-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.alibaba.druid.mock.MockStatementBase;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
Expand Down Expand Up @@ -142,8 +143,8 @@ public ResultSet executeQueryFromDual(MockStatementBase statement, SQLSelectQuer
} else if (expr instanceof SQLNCharExpr) {
row[i] = ((SQLNCharExpr) expr).getText();
column.setColumnType(Types.NVARCHAR);
} else if (expr instanceof MySqlBooleanExpr) {
row[i] = ((MySqlBooleanExpr) expr).getValue();
} else if (expr instanceof SQLBooleanExpr) {
row[i] = ((SQLBooleanExpr) expr).getValue();
column.setColumnType(Types.NVARCHAR);
} else if (expr instanceof SQLNullExpr) {
row[i] = null;
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/com/alibaba/druid/pool/DruidDataSource.java
Original file line number Diff line number Diff line change
Expand Up @@ -1569,7 +1569,9 @@ public DruidDataSourceStatValue getStatValueAndReset() {
value.setTestWhileIdle(this.isTestWhileIdle());

value.setDefaultAutoCommit(this.isDefaultAutoCommit());
value.setDefaultReadOnly(this.getDefaultReadOnly());
if (defaultReadOnly != null) {
value.setDefaultReadOnly(defaultReadOnly);
}
value.setDefaultTransactionIsolation(this.getDefaultTransactionIsolation());

value.setLogicConnectErrorCount(connectErrorCount.getAndSet(0));
Expand Down
8 changes: 1 addition & 7 deletions src/main/java/com/alibaba/druid/sql/PagerUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit;
import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAggregateExpr;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock;
Expand Down Expand Up @@ -367,13 +366,8 @@ private static SQLSelectQueryBlock createQueryBlock(String dbType) {
}

private static SQLSelectItem createCountItem(String dbType) {
SQLAggregateExpr countExpr;
SQLAggregateExpr countExpr = new SQLAggregateExpr("COUNT");

if (JdbcConstants.ORACLE.equals(dbType)) {
countExpr = new OracleAggregateExpr("COUNT");
} else {
countExpr = new SQLAggregateExpr("COUNT");
}
countExpr.getArguments().add(new SQLAllColumnExpr());

SQLSelectItem countItem = new SQLSelectItem(countExpr);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public class SQLAggregateExpr extends SQLExprImpl implements Serializable {
protected final List<SQLExpr> arguments = new ArrayList<SQLExpr>();
protected SQLOver over;
protected SQLOrderBy withinGroup;
protected boolean ignoreNulls = false;

public SQLAggregateExpr(String methodName){
this.methodName = methodName;
Expand All @@ -59,7 +60,7 @@ public void setWithinGroup(SQLOrderBy withinGroup) {
if (withinGroup != null) {
withinGroup.setParent(this);
}

this.withinGroup = withinGroup;
}

Expand All @@ -82,6 +83,15 @@ public SQLOver getOver() {
public void setOver(SQLOver over) {
this.over = over;
}

public boolean isIgnoreNulls() {
return this.ignoreNulls;
}

public void setIgnoreNulls(boolean ignoreNulls) {
this.ignoreNulls = ignoreNulls;
}


@Override
protected void accept0(SQLASTVisitor visitor) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,70 +15,11 @@
*/
package com.alibaba.druid.sql.dialect.mysql.ast.expr;

import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;

public class MySqlBooleanExpr extends MySqlExprImpl implements MySqlExpr, SQLLiteralExpr {
public class MySqlBooleanExpr extends SQLBooleanExpr implements MySqlExpr, SQLLiteralExpr {

private boolean value;

public MySqlBooleanExpr(){

}

public MySqlBooleanExpr(boolean value){
this.value = value;
}

public boolean getValue() {
return value;
}

public void setValue(boolean value) {
this.value = value;
}

@Override
protected void accept0(SQLASTVisitor visitor) {
this.accept0((MySqlASTVisitor) visitor);
}

public void accept0(MySqlASTVisitor visitor) {
visitor.visit(this);

visitor.endVisit(this);
}

public void output(StringBuffer buf) {
buf.append("x");
buf.append(value ? "TRUE" : "FALSE");
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (value ? 1231 : 1237);
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
MySqlBooleanExpr other = (MySqlBooleanExpr) obj;
if (value != other.value) {
return false;
}
return true;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLHexExpr;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
Expand All @@ -36,7 +37,6 @@
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique;
import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
Expand Down Expand Up @@ -138,12 +138,6 @@ public SQLExpr primary() {
}

switch (tok) {
case TRUE:
lexer.nextToken();
return primaryRest(new MySqlBooleanExpr(true));
case FALSE:
lexer.nextToken();
return primaryRest(new MySqlBooleanExpr(false));
case LITERAL_ALIAS:
String aliasValue = lexer.stringVal();
lexer.nextToken();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,12 @@
*/
package com.alibaba.druid.sql.dialect.mysql.visitor;

import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;

public class MySql2OracleOutputVisitor extends MySqlOutputVisitor {

public MySql2OracleOutputVisitor(Appendable appender){
super(appender);
}

public boolean visit(MySqlBooleanExpr x) {
return true;
}

public void endVisit(MySqlBooleanExpr x) {
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
Expand Down Expand Up @@ -123,11 +122,6 @@
import com.alibaba.druid.sql.visitor.SQLASTVisitor;

public interface MySqlASTVisitor extends SQLASTVisitor {

boolean visit(MySqlBooleanExpr x);

void endVisit(MySqlBooleanExpr x);

boolean visit(MySqlSelectQueryBlock.Limit x);

void endVisit(MySqlSelectQueryBlock.Limit x);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
Expand Down Expand Up @@ -128,17 +127,6 @@
import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter;

public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySqlASTVisitor {

@Override
public boolean visit(MySqlBooleanExpr x) {
return true;
}

@Override
public void endVisit(MySqlBooleanExpr x) {

}

@Override
public boolean visit(Limit x) {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLHexExpr;
Expand All @@ -35,7 +36,6 @@
import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.visitor.SQLEvalVisitor;
import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils;
import com.alibaba.druid.sql.visitor.functions.Function;
Expand Down Expand Up @@ -135,12 +135,6 @@ public boolean visit(SQLQueryExpr x) {
return SQLEvalVisitorUtils.visit(this, x);
}

@Override
public boolean visit(MySqlBooleanExpr x) {
x.getAttributes().put(EVAL_VALUE, x.getValue());
return false;
}

public boolean isMarkVariantIndex() {
return markVariantIndex;
}
Expand All @@ -167,4 +161,10 @@ public boolean visit(SQLIdentifierExpr x) {
public void unregisterFunction(String funcName) {
functions.remove(funcName);
}

@Override
public boolean visit(SQLBooleanExpr x) {
x.getAttributes().put(EVAL_VALUE, x.getValue());
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
Expand Down Expand Up @@ -156,15 +155,6 @@ public MySqlOutputVisitor(Appendable appender){
super(appender);
}

public boolean visit(MySqlBooleanExpr x) {
print(x.getValue() ? "true" : "false");

return false;
}

public void endVisit(MySqlBooleanExpr x) {
}

@Override
public boolean visit(SQLSelectQueryBlock select) {
if (select instanceof MySqlSelectQueryBlock) {
Expand Down Expand Up @@ -383,11 +373,6 @@ public boolean visit(SQLCharactorDataType x) {
if (x.getCharSetName() != null) {
print(" CHARACTER SET ");
print(x.getCharSetName());

if (x.getCollate() != null) {
print(" COLLATE ");
print(x.getCollate());
}
}

if (x.getCollate() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr;
Expand Down Expand Up @@ -224,17 +223,6 @@ public boolean visit(MySqlInsertStatement x) {
return false;
}

@Override
public boolean visit(MySqlBooleanExpr x) {

return true;
}

@Override
public void endVisit(MySqlBooleanExpr x) {

}

@Override
public boolean visit(Limit x) {

Expand Down
Loading

0 comments on commit 3526ac3

Please sign in to comment.