package com.taobao.tddl.executor.cursor; import java.util.Iterator; import java.util.List; import com.taobao.tddl.executor.common.IRowsValueScaner; import com.taobao.tddl.executor.cursor.impl.ColMetaAndIndex; import com.taobao.tddl.optimizer.config.table.ColumnMeta; import com.taobao.tddl.optimizer.core.expression.ISelectable; /** * cursor中所有行数据的源信息。 * * @author Whisper */ public interface ICursorMeta { /** * 当前Cursor中间表的别名 * * @return */ // String getName(); List<ColumnMeta> getColumns(); /** * 返回index,为null则表示未找到 * * @param tableName * @param columnName * @return */ Integer getIndex(String tableName, String columnName); /** * 因为返回列可能只有三列。 但实际上数据的列数可能很多 (也就是getIndex的integer可能会大于columns的size()) * 所以在一些做位移性操作的时候,需要依托这个值进行 尤其是在join的时候 简单来说就是,ICursorMeta可能只是个facade . * 在join里面实际上是用偏移量来拿数据的, 这样就需要知道数值偏移多少,能够从右IRowSet里面取数据 比如,左面去取cursor * column可能只有2个(因为有columnFilter) * 但实际上ArrayRowSet里面有10列的数据(因为原本是取出了10个记录的,又没有走一层网络,所以在数组内还保持了原有的整行数据。 * 这样,如果只靠返回值,那么只能拿到2.用2做偏移量,是肯定不对的。 所以,需要拿真正数据的偏移量出来。所以这个数据在这时候应该返回10. * * @return */ Integer getIndexRange(); /** * 按照缩进输出String的方法 * * @param inden * @return */ String toStringWithInden(int inden); Iterator<ColMetaAndIndex> indexIterator(); IRowsValueScaner scaner(List<ISelectable> columnsYouWant); /** * 是否确定UResultSet中的index和resultCusror中的index相等? * 这个属性的主要作用在于提升ResultSet在进行单值查询时候的性能。 为true表示一定相等,为false未必不相等 * * @return */ boolean isSureLogicalIndexEqualActualIndex(); void setIsSureLogicalIndexEqualActualIndex(boolean b); }