bug fixed for mapping

This commit is contained in:
温少
2012-03-12 21:52:22 +08:00
parent 4b07baec86
commit e201b09d72
7 changed files with 80 additions and 5 deletions
@@ -2,6 +2,7 @@ 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.SQLNumericLiteralExpr;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.Top;
@@ -13,7 +14,7 @@ public class MSSQLServerMappingProvider implements MappingProvider {
@Override
public MappingVisitor createMappingVisitor(MappingEngine engine) {
return new MySqlMappingVisitor(engine.getEntities());
return new MSSQLServerMappingVisitor(engine.getEntities());
}
@Override
@@ -33,7 +34,7 @@ public class MSSQLServerMappingProvider implements MappingProvider {
top.setExpr(new SQLNumberExpr(maxLimit));
query.setTop(top);
} else {
SQLNumberExpr rowCountExpr = (SQLNumberExpr) query.getTop().getExpr();
SQLNumericLiteralExpr rowCountExpr = (SQLNumericLiteralExpr) query.getTop().getExpr();
int rowCount = rowCountExpr.getNumber().intValue();
if (rowCount > maxLimit.intValue()) {
rowCountExpr.setNumber(maxLimit);
@@ -1,7 +1,8 @@
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.MySqlSelectQueryBlock;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit;
@@ -30,10 +31,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);
@@ -24,4 +24,6 @@ public abstract class SQLNumericLiteralExpr extends SQLLiteralExpr {
}
public abstract Number getNumber();
public abstract void setNumber(Number number);
}
@@ -72,4 +72,14 @@ public class OracleBinaryDoubleExpr extends SQLNumericLiteralExpr implements Ora
return true;
}
@Override
public void setNumber(Number number) {
if (number == null) {
this.setValue(null);
return;
}
this.setValue(number.doubleValue());
}
}
@@ -72,4 +72,14 @@ public class OracleBinaryFloatExpr extends SQLNumericLiteralExpr implements Orac
return true;
}
@Override
public void setNumber(Number number) {
if (number == null) {
this.setValue(null);
return;
}
this.setValue(number.floatValue());
}
}