Main Page   Namespace List   Class Hierarchy   Compound List   Header Files   Namespace Members   Compound Members  

odbc++/resultset.h

This is the verbatim text of the resultset.h include file.
/* 
   This file is part of libodbc++.
   
   Copyright (C) 1999-2000 Manush Dodunekov <manush@stendahls.net>
   
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.
   
   This library 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
   Library General Public License for more details.
   
   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.  If not, write to
   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.
*/

#ifndef __ODBCXX_RESULTSET_H
#define __ODBCXX_RESULTSET_H

#include <odbc++/setup.h>
#include <odbc++/types.h>
#include <odbc++/errorhandler.h>
#include <odbc++/statement.h>


namespace odbc {

  class ResultSetMetaData;
  class Statement;
  class Rowset;

  class ODBCXX_EXPORT ResultSet : public ErrorHandler {
    friend class Statement;
    friend class ResultSetMetaData;
    
  private:
    Statement* statement_;
    SQLHSTMT hstmt_;
    bool ownStatement_;


    int currentFetchSize_;
    int newFetchSize_;

    Rowset* rowset_;
    SQLUSMALLINT* rowStatus_;
    SQLUINTEGER rowsInRowset_;

    //tells us if the columns are bound right now
    bool colsBound_;
    bool streamedColsBound_;

    //the position in the rowset last time we did a bind
    unsigned int bindPos_;

    //meta data - it's always there since we need info from it
    ResultSetMetaData* metaData_;

    int location_;
    
    bool lastWasNull_;

    int rowBeforeInsert_;
    int locBeforeInsert_;

    ResultSet(Statement* stmt,SQLHSTMT hstmt, bool ownStmt);
    
    //driver info
    const DriverInfo* _getDriverInfo() const {
      return statement_->_getDriverInfo();
    }

    //private utils
    void _applyFetchSize();
    //this makes sure there is a rowset 
    void _resetRowset();

    //this should be called before any call to SQLExtendedFetch
    void _prepareForFetch();
    //this performs a possibly scrolled fetch with fetchType to rownum
    void _doFetch(int fetchType, int rowNum);

    //this should be called after the position in the rowset changes
    SQLRETURN _applyPosition(int mode =SQL_POSITION);

    //these bind/unbind all non-streamed columns
    void _bindCols();
    void _unbindCols();

    //these bind/unbind all streamed columns
    void _bindStreamedCols();
    void _unbindStreamedCols();
    
    //this sends all needed data from streamed columns
    //to be called from insertRow and updateRow
    void _handleStreams(SQLRETURN r);
    

  public:
    virtual ~ResultSet();
    
    //remember to update DatabaseMetaData when changing those values

    enum {
      CONCUR_READ_ONLY,
      CONCUR_UPDATABLE
    };


    enum {
      TYPE_FORWARD_ONLY,
      TYPE_SCROLL_INSENSITIVE,
      TYPE_SCROLL_SENSITIVE
    };

    bool absolute(int row);

    bool relative(int rows);

    void afterLast();

    void beforeFirst();

    bool isAfterLast();

    bool isBeforeFirst();

    bool isFirst();

    bool isLast();

    int getRow();

    bool next();

    bool previous();

    bool first();

    bool last();

    void moveToInsertRow();
    
    void moveToCurrentRow();

    void refreshRow();

    void deleteRow();

    void insertRow();

    void updateRow();

    void cancelRowUpdates();

    ResultSetMetaData* getMetaData() {
      return metaData_;
    }

    int findColumn(const ODBCXX_STRING& colName);

    bool rowDeleted();

    bool rowInserted();

    bool rowUpdated();

    int getType();

    int getConcurrency();
    
    
    int getFetchSize() {
      return newFetchSize_;
    }

    void setFetchSize(int fetchSize);

    ODBCXX_STRING getCursorName();

    Statement* getStatement() {
      return statement_;
    }

    double getDouble(int idx);

    bool getBoolean(int idx);

    signed char getByte(int idx);

    ODBCXX_BYTES getBytes(int idx);

    Date getDate(int idx);

    float getFloat(int idx);

    int getInt(int idx);

    Long getLong(int idx);

    short getShort(int idx);

    ODBCXX_STRING getString(int idx);

    Time getTime(int idx);

    Timestamp getTimestamp(int idx);

    double getDouble(const ODBCXX_STRING& colName);
    
    bool getBoolean(const ODBCXX_STRING& colName);

    signed char getByte(const ODBCXX_STRING& colName);


    ODBCXX_BYTES getBytes(const ODBCXX_STRING& colName);

    Date getDate(const ODBCXX_STRING& colName);

    float getFloat(const ODBCXX_STRING& colName);

    int getInt(const ODBCXX_STRING& colName);

    Long getLong(const ODBCXX_STRING& colName);

    short getShort(const ODBCXX_STRING& colName);

    ODBCXX_STRING getString(const ODBCXX_STRING& colName);

    Time getTime(const ODBCXX_STRING& colName);

    Timestamp getTimestamp(const ODBCXX_STRING& colName);


    ODBCXX_STREAM* getAsciiStream(int idx);

    ODBCXX_STREAM* getAsciiStream(const ODBCXX_STRING& colName);

    ODBCXX_STREAM* getBinaryStream(int idx);

    ODBCXX_STREAM* getBinaryStream(const ODBCXX_STRING& colName);
    
    bool wasNull() {
      return lastWasNull_;
    }

    void updateDouble(int idx, double val);

    void updateBoolean(int idx, bool val);

    void updateByte(int idx, signed char val);


    void updateBytes(int idx, const ODBCXX_BYTES& val);

    void updateDate(int idx, const Date& val);

    void updateFloat(int idx, float val);

    void updateInt(int idx, int val);

    void updateLong(int idx, Long val);

    void updateShort(int idx, short val);

    void updateString(int idx, const ODBCXX_STRING& val);

    void updateTime(int idx, const Time& val);

    void updateTimestamp(int idx, const Timestamp& val);

    void updateNull(int idx);


    void updateDouble(const ODBCXX_STRING& colName, double val);

    void updateBoolean(const ODBCXX_STRING& colName, bool val);

    void updateByte(const ODBCXX_STRING& colName, signed char val);

    void updateBytes(const ODBCXX_STRING& colName, 
                     const ODBCXX_BYTES& val);


    void updateDate(const ODBCXX_STRING& colName, const Date& val);

    void updateFloat(const ODBCXX_STRING& colName, float val);

    void updateInt(const ODBCXX_STRING& colName, int val);

    void updateLong(const ODBCXX_STRING& colName, Long val);

    void updateShort(const ODBCXX_STRING& colName, short val);

    void updateString(const ODBCXX_STRING& colName, const ODBCXX_STRING& val);

    void updateTime(const ODBCXX_STRING& colName, const Time& val);

    void updateTimestamp(const ODBCXX_STRING& colName, const Timestamp& val);

    void updateAsciiStream(int idx, ODBCXX_STREAM* s, int len);

    void updateAsciiStream(const ODBCXX_STRING& colName, ODBCXX_STREAM* s, int len);


    void updateBinaryStream(int idx, ODBCXX_STREAM* s, int len);

    void updateBinaryStream(const ODBCXX_STRING& colName, ODBCXX_STREAM* s, int len);

    void updateNull(const ODBCXX_STRING& colName);
  };

  

}; // namespace odbc


#endif // __ODBCXX_RESULTSET_H

Go back to the freeodbc++ homepage