package org.sql2o.data; import org.sql2o.ResultSetIteratorBase; import org.sql2o.Sql2oException; import org.sql2o.quirks.Quirks; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; /** * @author aldenquimby@gmail.com */ public class TableResultSetIterator extends ResultSetIteratorBase<Row> { private Map<String, Integer> columnNameToIdxMap; private List<Column> columns; public TableResultSetIterator(ResultSet rs, boolean isCaseSensitive, Quirks quirks, LazyTable lt) { super(rs, isCaseSensitive, quirks); this.columnNameToIdxMap = new HashMap<String, Integer>(); this.columns = new ArrayList<Column>(); try { lt.setName(meta.getTableName(1)); for (int colIdx = 1; colIdx <= meta.getColumnCount(); colIdx++){ String colName = getColumnName(colIdx); String colType = meta.getColumnTypeName(colIdx); columns.add(new Column(colName, colIdx - 1, colType)); String colMapName = isCaseSensitive ? colName : colName.toLowerCase(); columnNameToIdxMap.put(colMapName, colIdx - 1); } } catch (SQLException e) { throw new Sql2oException("Error while reading metadata from database", e); } lt.setColumns(columns); } @Override protected Row readNext() throws SQLException { Row row = new Row(columnNameToIdxMap, columns.size(), isCaseSensitive,this.quirks); for (Column column : columns) { row.addValue(column.getIndex(), quirks.getRSVal(rs, column.getIndex() + 1)); } return row; } }