Search in sources :

Example 1 with SQLEntityFactory

use of org.whole.lang.sql.factories.SQLEntityFactory in project whole by wholeplatform.

the class ResultSetIterator method lookahead.

public IEntity lookahead() {
    if (nextEntity != null)
        return nextEntity;
    clearLookaheadScope();
    try {
        if (!resultSet.next()) {
            resultSet.getStatement().close();
            return null;
        }
    } catch (SQLException e) {
        return null;
    }
    BindingManagerFactory factory = BindingManagerFactory.instance;
    SQLEntityFactory ef = SQLEntityFactory.instance;
    try {
        getBindings().wEnterScope(lookaheadScope(), true);
        ResultSetMetaData metaData = resultSet.getMetaData();
        nextEntity = factory.createTuple();
        for (int i = 1; i <= metaData.getColumnCount(); i++) {
            IEntity value;
            switch(metaData.getColumnType(i)) {
                case Types.ARRAY:
                    value = ef.createArrayValue(resultSet.getArray(i).getArray());
                    break;
                case Types.BIT:
                case Types.BOOLEAN:
                    value = ef.createBooleanValue(resultSet.getBoolean(i));
                    break;
                case Types.TINYINT:
                    value = ef.createTinyIntValue(resultSet.getByte(i));
                    break;
                case Types.SMALLINT:
                    value = ef.createSmallIntValue(resultSet.getShort(i));
                    break;
                case Types.INTEGER:
                    value = ef.createIntValue(resultSet.getInt(i));
                    break;
                case Types.BIGINT:
                    value = ef.createBigIntValue(resultSet.getLong(i));
                    break;
                case Types.FLOAT:
                case Types.DOUBLE:
                    value = ef.createDoubleValue(resultSet.getDouble(i));
                    break;
                case Types.REAL:
                    value = ef.createRealValue(resultSet.getFloat(i));
                    break;
                case Types.NUMERIC:
                case Types.DECIMAL:
                    value = ef.createDecimalValue(resultSet.getBigDecimal(i));
                    break;
                case Types.CHAR:
                case Types.VARCHAR:
                case Types.LONGVARCHAR:
                    value = ef.createStringValue(resultSet.getString(i));
                    break;
                case Types.BINARY:
                case Types.VARBINARY:
                case Types.LONGVARBINARY:
                    value = ef.createBinaryValue(resultSet.getBytes(i));
                    break;
                case Types.DATE:
                    value = ef.createDateValue(resultSet.getDate(i));
                    break;
                case Types.TIME:
                    value = ef.createTimeValue(resultSet.getTime(i));
                    break;
                case Types.TIMESTAMP:
                    value = ef.createTimestampValue(resultSet.getTimestamp(i));
                    break;
                case Types.BLOB:
                    value = ef.createBlobValue(resultSet.getBlob(i));
                    break;
                case Types.CLOB:
                    value = ef.createClobValue(resultSet.getClob(i));
                    break;
                case Types.NULL:
                    value = ef.createNullValue();
                    break;
                default:
                    value = ef.createRawValue(resultSet.getObject(i));
                    break;
            }
            if (resultSet.wasNull())
                value = CommonsEntityFactory.instance.createResolver();
            String label = i <= labels.length && labels[i - 1] != null ? labels[i - 1] : metaData.getColumnLabel(i);
            getBindings().wDef(label, value);
            nextEntity.wAdd(value);
        }
        getBindings().wExitScope();
    } catch (SQLException e) {
        throw new IllegalStateException();
    }
    return nextEntity;
}
Also used : SQLEntityFactory(org.whole.lang.sql.factories.SQLEntityFactory) ResultSetMetaData(java.sql.ResultSetMetaData) BindingManagerFactory(org.whole.lang.bindings.BindingManagerFactory) SQLException(java.sql.SQLException) IEntity(org.whole.lang.model.IEntity)

Aggregations

ResultSetMetaData (java.sql.ResultSetMetaData)1 SQLException (java.sql.SQLException)1 BindingManagerFactory (org.whole.lang.bindings.BindingManagerFactory)1 IEntity (org.whole.lang.model.IEntity)1 SQLEntityFactory (org.whole.lang.sql.factories.SQLEntityFactory)1