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

odbc++/statement.h

This is the verbatim text of the statement.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_STATEMENT_H
#define __ODBCXX_STATEMENT_H

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

namespace odbc {

  class ResultSet;
  class DriverInfo;

  class ODBCXX_EXPORT Statement : public ErrorHandler {
    friend class Connection;
    friend class ResultSet;
    friend class DatabaseMetaData;

  protected:
    Connection* connection_;
    SQLHSTMT hstmt_;

    const DriverInfo* _getDriverInfo() const {
      return connection_->_getDriverInfo();
    }

  private:
    ResultSet* currentResultSet_;

    int fetchSize_;
    int resultSetType_;
    int resultSetConcurrency_;
    
    //used internally
    enum StatementState {
      STATE_CLOSED,
      STATE_OPEN
    };

    StatementState state_;

    std::vector<ODBCXX_STRING> batches_;

    void _registerResultSet(ResultSet* rs);
    void _unregisterResultSet(ResultSet* rs);

    void _applyResultSetType();

    ResultSet* _getTypeInfo();
    ResultSet* _getTables(const ODBCXX_STRING& catalog,
                          const ODBCXX_STRING& schema,
                          const ODBCXX_STRING& tableName,
                          const ODBCXX_STRING& types);

    ResultSet* _getTablePrivileges(const ODBCXX_STRING& catalog,
                                   const ODBCXX_STRING& schema,
                                   const ODBCXX_STRING& tableName);

    ResultSet* _getColumnPrivileges(const ODBCXX_STRING& catalog,
                                    const ODBCXX_STRING& schema,
                                    const ODBCXX_STRING& tableName,
                                    const ODBCXX_STRING& columnName);

    ResultSet* _getPrimaryKeys(const ODBCXX_STRING& catalog,
                               const ODBCXX_STRING& schema,
                               const ODBCXX_STRING& tableName);

    ResultSet* _getColumns(const ODBCXX_STRING& catalog,
                           const ODBCXX_STRING& schema,
                           const ODBCXX_STRING& tableName,
                           const ODBCXX_STRING& columnName);

    ResultSet* _getIndexInfo(const ODBCXX_STRING& catalog,
                             const ODBCXX_STRING& schema,
                             const ODBCXX_STRING& tableName,
                             bool unique, bool approximate);
    
    ResultSet* _getCrossReference(const ODBCXX_STRING& pc,
                                  const ODBCXX_STRING& ps,
                                  const ODBCXX_STRING& pt,
                                  const ODBCXX_STRING& fc,
                                  const ODBCXX_STRING& fs,
                                  const ODBCXX_STRING& ft);

    
    ResultSet* _getProcedures(const ODBCXX_STRING& catalog,
                              const ODBCXX_STRING& schema,
                              const ODBCXX_STRING& procName);
    
    ResultSet* _getProcedureColumns(const ODBCXX_STRING& catalog,
                                    const ODBCXX_STRING& schema,
                                    const ODBCXX_STRING& procName,
                                    const ODBCXX_STRING& colName);

    ResultSet* _getSpecialColumns(const ODBCXX_STRING& catalog,
                                  const ODBCXX_STRING& schema,
                                  const ODBCXX_STRING& table,
                                  int what,int scope,int nullable);
      
  protected:
    Statement(Connection* con, SQLHSTMT hstmt, 
              int resultSetType, int resultSetConcurrency);
    
    //utilities
    SQLUINTEGER _getNumericOption(SQLINTEGER optnum);
    ODBCXX_STRING _getStringOption(SQLINTEGER optnum);
    
    void _setNumericOption(SQLINTEGER optnum, SQLUINTEGER value);
    void _setStringOption(SQLINTEGER optnum, const ODBCXX_STRING& value);

#if ODBCVER >= 0x0300
    SQLPOINTER _getPointerOption(SQLINTEGER optnum);
    void _setPointerOption(SQLINTEGER optnum, SQLPOINTER value);
#endif

    //this returns true if we have a result set pending
    bool _checkForResults();

    //this _always_ returns a ResultSet. If hideMe is true, this statement
    //becomes 'owned' by the ResultSet
    ResultSet* _getResultSet(bool hideMe =false);

    //this is called before a Statement (or any of the derived classes)
    //is executed
    void _beforeExecute();

    //this is called after a successeful execution
    void _afterExecute();
    

  public:
    virtual ~Statement();

    Connection* getConnection();
    

    void cancel();

    virtual bool execute(const ODBCXX_STRING& sql);
    
    virtual ResultSet* executeQuery(const ODBCXX_STRING& sql);

    virtual int executeUpdate(const ODBCXX_STRING& sql);
    
    int getUpdateCount();
    
    ResultSet* getResultSet();

    bool getMoreResults();

    void setCursorName(const ODBCXX_STRING& name);
    
    int getFetchSize() {
      return fetchSize_;
    }

    void setFetchSize(int size);

    int getResultSetConcurrency() {
      return resultSetConcurrency_;
    }

    int getResultSetType() {
      return resultSetType_;
    }
    
    int getQueryTimeout();
    void setQueryTimeout(int seconds);

    int getMaxRows();
    void setMaxRows(int maxRows);

    int getMaxFieldSize();
    void setMaxFieldSize(int maxFieldSize);

    void setEscapeProcessing(bool on);

    bool getEscapeProcessing();
  };
  


}; // namespace odbc


#endif // __ODBCXX_STATEMENT_H

Go back to the freeodbc++ homepage