improve SQLEvalVisitor

This commit is contained in:
wenshao
2012-11-12 00:10:44 +08:00
parent c2c66f5ddc
commit 795beb3451
2 changed files with 13 additions and 9 deletions
@@ -441,20 +441,17 @@ public class SQLEvalVisitorUtils {
}
if (nullFrom) {
Object[] row = new Object[queryBlock.getSelectList().size()];
List<Object> row = new ArrayList<Object>(queryBlock.getSelectList().size());
for (int i = 0; i < queryBlock.getSelectList().size(); ++i) {
SQLSelectItem item = queryBlock.getSelectList().get(i);
item.getExpr().accept(visitor);
Object cell = item.getExpr().getAttribute(EVAL_VALUE);
row[i] = cell;
}
Object result;
if (row.length == 1) {
result = row[0];
} else {
result = row;
row.add(cell);
}
List<List<Object>> rows = new ArrayList<List<Object>>(1);
rows.add(row);
Object result = rows;
queryBlock.putAttribute(EVAL_VALUE, result);
x.getSubQuery().putAttribute(EVAL_VALUE, result);
x.putAttribute(EVAL_VALUE, result);
@@ -1,5 +1,8 @@
package com.alibaba.druid.bvt.sql.eval;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -9,6 +12,10 @@ import com.alibaba.druid.util.JdbcConstants;
public class EvalSelectTest extends TestCase {
public void test_select() throws Exception {
Assert.assertEquals(1, SQLEvalVisitorUtils.evalExpr(JdbcConstants.MYSQL, "SELECT 1"));
List<List<Object>> rows = new ArrayList<List<Object>>();
List<Object> row = new ArrayList<Object>();
row.add(1);
rows.add(row);
Assert.assertEquals(rows, SQLEvalVisitorUtils.evalExpr(JdbcConstants.MYSQL, "SELECT 1"));
}
}