mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser.
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
package com.alibaba.druid.sql.dialect.db2.ast.stmt;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.dialect.db2.ast.DB2Object;
|
||||
import com.alibaba.druid.sql.dialect.db2.visitor.DB2ASTVisitor;
|
||||
@@ -80,4 +81,12 @@ public class DB2SelectQueryBlock extends SQLSelectQueryBlock implements DB2Objec
|
||||
public static enum Isolation {
|
||||
RR, RS, CS, UR
|
||||
}
|
||||
|
||||
public void limit(int rowCount, int offset) {
|
||||
if (offset <= 0) {
|
||||
setFirst(new SQLIntegerExpr(rowCount));
|
||||
} else {
|
||||
throw new UnsupportedOperationException("not support offset");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,9 +328,10 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
dataType.accept(this);
|
||||
}
|
||||
|
||||
if (x.getCharsetExpr() != null) {
|
||||
final SQLExpr charsetExpr = x.getCharsetExpr();
|
||||
if (charsetExpr != null) {
|
||||
print0(ucase ? " CHARSET " : " charset ");
|
||||
x.getCharsetExpr().accept(this);
|
||||
charsetExpr.accept(this);
|
||||
}
|
||||
|
||||
for (SQLColumnConstraint item : x.getConstraints()) {
|
||||
@@ -338,20 +339,23 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
item.accept(this);
|
||||
}
|
||||
|
||||
if (x.getDefaultExpr() != null) {
|
||||
final SQLExpr defaultExpr = x.getDefaultExpr();
|
||||
if (defaultExpr != null) {
|
||||
print0(ucase ? " DEFAULT " : " default ");
|
||||
x.getDefaultExpr().accept(this);
|
||||
defaultExpr.accept(this);
|
||||
}
|
||||
|
||||
if (x.getStorage() != null) {
|
||||
final SQLExpr storage = x.getStorage();
|
||||
if (storage != null) {
|
||||
print0(ucase ? " STORAGE " : " storage ");
|
||||
x.getStorage().accept(this);
|
||||
storage.accept(this);
|
||||
}
|
||||
|
||||
if (x.getOnUpdate() != null) {
|
||||
SQLExpr onUpdate = x.getOnUpdate();
|
||||
if (onUpdate != null) {
|
||||
print0(ucase ? " ON UPDATE " : " on update ");
|
||||
|
||||
x.getOnUpdate().accept(this);
|
||||
onUpdate.accept(this);
|
||||
}
|
||||
|
||||
if (x.isAutoIncrement()) {
|
||||
|
||||
@@ -21,7 +21,9 @@ import java.util.List;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.SQLHint;
|
||||
import com.alibaba.druid.sql.ast.SQLLimit;
|
||||
import com.alibaba.druid.sql.ast.SQLOrderBy;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
|
||||
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;
|
||||
@@ -122,4 +124,12 @@ public class OdpsSelectQueryBlock extends SQLSelectQueryBlock {
|
||||
public String toString() {
|
||||
return SQLUtils.toOdpsString(this);
|
||||
}
|
||||
|
||||
public void limit(int rowCount, int offset) {
|
||||
if (offset > 0) {
|
||||
throw new UnsupportedOperationException("not support offset");
|
||||
}
|
||||
|
||||
setLimit(new SQLLimit(new SQLIntegerExpr(rowCount)));
|
||||
}
|
||||
}
|
||||
|
||||
+14
@@ -21,6 +21,9 @@ import java.util.List;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLCommentHint;
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.SQLLimit;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause;
|
||||
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
|
||||
@@ -147,4 +150,15 @@ public class OracleSelectQueryBlock extends SQLSelectQueryBlock {
|
||||
public String toString() {
|
||||
return SQLUtils.toOracleString(this);
|
||||
}
|
||||
|
||||
public void limit(int rowCount, int offset) {
|
||||
if (offset <= 0) {
|
||||
SQLExpr rowCountExpr = new SQLIntegerExpr(rowCount);
|
||||
SQLExpr newCondition = SQLUtils.buildCondition(SQLBinaryOperator.BooleanAnd, rowCountExpr, false,
|
||||
where);
|
||||
setWhere(newCondition);
|
||||
} else {
|
||||
throw new UnsupportedOperationException("not support offset");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.alibaba.druid.sql.dialect.sqlserver.ast;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLLimit;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
@@ -34,6 +36,10 @@ public class SQLServerSelectQueryBlock extends SQLSelectQueryBlock {
|
||||
this.top = top;
|
||||
}
|
||||
|
||||
public void setTop(int rowCount) {
|
||||
setTop(new SQLServerTop(new SQLIntegerExpr(rowCount)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void accept0(SQLASTVisitor visitor) {
|
||||
accept0((SQLServerASTVisitor) visitor);
|
||||
@@ -49,4 +55,12 @@ public class SQLServerSelectQueryBlock extends SQLSelectQueryBlock {
|
||||
}
|
||||
visitor.endVisit(this);
|
||||
}
|
||||
|
||||
public void limit(int rowCount, int offset) {
|
||||
if (offset <= 0) {
|
||||
setTop(rowCount);
|
||||
} else {
|
||||
throw new UnsupportedOperationException("not support offset");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user