package com.taobao.tddl.executor.cursor.impl;
import java.util.ArrayList;
import java.util.List;
import com.taobao.tddl.common.exception.TddlException;
import com.taobao.tddl.executor.common.ExecutionContext;
import com.taobao.tddl.executor.cursor.ICursorMeta;
import com.taobao.tddl.executor.cursor.ResultCursor;
import com.taobao.tddl.executor.rowset.ArrayRowSet;
import com.taobao.tddl.executor.rowset.IRowSet;
import com.taobao.tddl.optimizer.config.table.ColumnMeta;
import com.taobao.tddl.optimizer.core.ASTNodeFactory;
import com.taobao.tddl.optimizer.core.datatype.DataType;
import com.taobao.tddl.optimizer.core.datatype.StringType;
import com.taobao.tddl.optimizer.core.expression.IColumn;
/**
* 用于返回执行计划
*
* @author mengshi.sunmengshi 2013-12-3 下午5:41:36
* @since 5.0.0
*/
public class QueryPlanResultCursor extends ResultCursor {
static List<Object> columns = new ArrayList();
static List<ColumnMeta> cms = new ArrayList();
static {
IColumn c = ASTNodeFactory.getInstance().createColumn();
c.setColumnName("EXPLAIN");
c.setDataType(DataType.StringType);
columns.add(c);
ColumnMeta cm = new ColumnMeta(null, "EXPLAIN", new StringType(), null, false);
cms.add(cm);
}
List<IRowSet> rows = new ArrayList();
public QueryPlanResultCursor(String queryPlan, ExecutionContext executionContext){
super(null, executionContext);
ICursorMeta meta = CursorMetaImp.buildNew(cms);
IRowSet row = new ArrayRowSet(meta, new String[] { queryPlan });
rows.add(row);
}
@Override
public List<Object> getOriginalSelectColumns() {
return columns;
}
@Override
public void setOriginalSelectColumns(List<Object> originalSelectColumns) {
return;
}
@Override
public int getTotalCount() {
return 1;
}
int index = 0;
@Override
public IRowSet next() throws TddlException {
if (index > 0) {
return null;
}
return rows.get(index++);
}
@Override
public void beforeFirst() throws TddlException {
index = 0;
return;
}
@Override
public List<TddlException> close(List<TddlException> exceptions) {
if (exceptions == null) {
exceptions = new ArrayList();
}
return exceptions;
}
}