/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.operator.nio.model; import java.util.Date; import com.rapidminer.operator.OperatorException; import com.rapidminer.tools.Ontology; import com.rapidminer.tools.ProgressListener; /** * This interface represents a ResultSet like view on a data source. It is just the interface for * iterating over the raw data. The * * @author Tobias Malbrecht, Sebastian Loh, Sebastian Land */ public interface DataResultSet extends AutoCloseable { public enum ValueType { STRING(Ontology.POLYNOMINAL), DATE(Ontology.DATE_TIME), // INTEGER(Ontology.INTEGER), NUMBER(Ontology.NUMERICAL), EMPTY(Ontology.ATTRIBUTE_VALUE); private final int rapidMinerAttributeType; private ValueType(int rapidMinerAttributeType) { this.rapidMinerAttributeType = rapidMinerAttributeType; } public int getRapidMinerAttributeType() { return rapidMinerAttributeType; } } /** * This returns if another row exists. */ boolean hasNext(); /** * Proceed to the next row if existent. Will throw NoSuchElementException if no further row * exists * * @param listener * * @return */ void next(ProgressListener listener) throws OperatorException; /** * Returns the number of columns found so far. If there are any rows containing more columns * that this value, an error has to be registered. */ int getNumberOfColumns(); /** * This returns the names of the columns according to the underlying technical system. For * example the database column name might be returned. This method is only used, if there's no * user specific setting in the {@link DataResultSetTranslationConfiguration} or annotations * present in the {@link DataResultSetTranslationConfiguration}. */ String[] getColumnNames(); /** * Returns whether the value in the specified column in the current row is missing. * * @param columnIndex * index of the column * @return */ boolean isMissing(int columnIndex); /** * Returns a numerical value contained in the specified column in the current row. Should return * null if the value is not a numerical or if the value is missing. * * @param columnIndex * @return * @throws ParseException */ Number getNumber(int columnIndex) throws ParseException; /** * Returns a nominal value contained in the specified column in the current row. Should return * null if the value is not a nominal or a kind of string type or if the value is missing. * * @param columnIndex * @return */ String getString(int columnIndex) throws ParseException; /** * Returns a date, time or date_time value contained in the specified column in the current row. * Should return null if the value is not a date or time value or if the value is missing. * * @param columnIndex * @return */ Date getDate(int columnIndex) throws ParseException; /** * * @return The type which most closely matches the value type of the underlying data source. The * corresponding getter method for this type must not throw an RuntimeException when * invoked for this column. */ ValueType getNativeValueType(int columnIndex) throws ParseException; /** * Closes the data source. May tear down a database connection or close a file which is read * from. The underlying {@link DataResultSetFactory} may choose to keep the connection open for * performance reasons and must be closed independently. * * @throws OperatorException */ @Override void close() throws OperatorException; /** * This will reset the current iteration and start at the first row * * @param listener * @throws OperatorException */ void reset(ProgressListener listener) throws OperatorException; /** * This will return an integer array containing the value types of all columns. This might be * determined by the underlying technical system like data bases. If not, just an Array * Containing 0 might be returned. */ int[] getValueTypes(); /** * @return the current {@code 0} based row index of the current parsed row. In case no row has * been parsed yet, {@code -1} will be returned. */ int getCurrentRow(); }