bug fixed for mapping

This commit is contained in:
温少
2012-03-13 09:26:36 +08:00
parent 4b07baec86
commit 28c99426fd
12 changed files with 126 additions and 11 deletions
@@ -1,11 +1,14 @@
package com.alibaba.druid.mapping.spi;
import com.alibaba.druid.mapping.MappingEngine;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement;
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.mysql.parser.MySqlSelectParser;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
@@ -20,7 +23,7 @@ public class MySqlMappingProvider implements MappingProvider {
public SQLASTOutputVisitor createOutputVisitor(MappingEngine engine, Appendable out) {
return new MySqlOutputVisitor(out);
}
public SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql) {
MySqlSelectParser selectParser = new MySqlSelectParser(sql);
MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) selectParser.query();
@@ -30,10 +33,10 @@ public class MySqlMappingProvider implements MappingProvider {
if (maxLimit != null) {
if (query.getLimit() == null) {
Limit limit = new Limit();
limit.setRowCount(new SQLNumberExpr(maxLimit));
limit.setRowCount(new SQLIntegerExpr(maxLimit));
query.setLimit(limit);
} else {
SQLNumberExpr rowCountExpr = (SQLNumberExpr) query.getLimit().getRowCount();
SQLNumericLiteralExpr rowCountExpr = (SQLNumericLiteralExpr) query.getLimit().getRowCount();
int rowCount = rowCountExpr.getNumber().intValue();
if (rowCount > maxLimit.intValue()) {
rowCountExpr.setNumber(maxLimit);
@@ -43,4 +46,9 @@ public class MySqlMappingProvider implements MappingProvider {
return query;
}
public MySqlDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql) {
MySqlStatementParser parser = new MySqlStatementParser(sql);
return parser.parseDeleteStatement();
}
}