Files
mariadb-connector-cpp/include/conncpp/ResultSet.hpp
2021-06-29 13:31:23 +02:00

288 lines
14 KiB
C++

/************************************************************************************
Copyright (C) 2020 MariaDB Corporation AB
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.1 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; if not see <http://www.gnu.org/licenses>
or write to the Free Software Foundation, Inc.,
51 Franklin St., Fifth Floor, Boston, MA 02110, USA
*************************************************************************************/
#ifndef _RESULTSET_H_
#define _RESULTSET_H_
#include <istream>
#include "buildconf.hpp"
#include "SQLString.hpp"
#include "Warning.hpp"
#include "jdbccompat.hpp"
namespace sql
{
class ResultSetMetaData;
class Statement;
class MARIADB_EXPORTED ResultSet {
ResultSet(const ResultSet &);
void operator=(ResultSet &);
public:
enum {
HOLD_CURSORS_OVER_COMMIT= 1,
CLOSE_CURSORS_AT_COMMIT= 2
};
enum {
CONCUR_READ_ONLY= 1007,
CONCUR_UPDATABLE= 1008
};
enum {
FETCH_FORWARD= 1000,
FETCH_REVERSE,
FETCH_UNKNOWN
};
enum enum_type {
TYPE_FORWARD_ONLY= 1003,
TYPE_SCROLL_INSENSITIVE,
TYPE_SCROLL_SENSITIVE
};
ResultSet() {}
virtual ~ResultSet(){}
virtual void close()=0;
virtual bool next()=0;
virtual SQLWarning* getWarnings()=0;
virtual void clearWarnings()=0;
virtual bool isBeforeFirst() const=0;
virtual bool isFirst() const=0;
// In case of the ResultSet streaming, these two methods might need to fetch row from server, and thus can not be const
virtual bool isLast()=0;
virtual bool isAfterLast()=0;
virtual void beforeFirst()=0;
virtual void afterLast()=0;
virtual bool first()=0;
virtual bool last()=0;
virtual int32_t getRow()=0;
virtual bool absolute(int32_t row)=0;
virtual bool relative(int32_t rows)=0;
virtual bool previous()=0;
virtual int32_t getFetchDirection() const=0;
virtual void setFetchDirection(int32_t direction)=0;
virtual int32_t getFetchSize() const=0;
virtual void setFetchSize(int32_t fetchSize)=0;
virtual int32_t getType() const=0;
virtual int32_t getConcurrency() const=0;
virtual bool isClosed() const=0;
virtual Statement* getStatement()=0;
virtual bool wasNull() const=0;
virtual bool isNull(int32_t columnIndex) const=0;
virtual bool isNull(const SQLString& columnLabel) const=0;
virtual SQLString getString(int32_t columnIndex) const=0;
virtual SQLString getString(const SQLString& columnLabel) const=0;
virtual int32_t getInt(int32_t columnIndex) const=0;
virtual int32_t getInt(const SQLString& columnLabel) const=0;
virtual uint32_t getUInt(int32_t columnIndex) const=0;
virtual uint32_t getUInt(const SQLString& columnLabel) const=0;
virtual int64_t getLong(const SQLString& columnLabel) const=0;
virtual int64_t getLong(int32_t columnIndex) const=0;
/* getInt64 are aliases for getLong */
virtual int64_t getInt64(const SQLString& columnLabel) const=0;
virtual int64_t getInt64(int32_t columnIndex) const=0;
virtual uint64_t getUInt64(const SQLString& columnLabel) const=0;
virtual uint64_t getUInt64(int32_t columnIndex) const=0;
virtual float getFloat(const SQLString& columnLabel) const=0;
virtual float getFloat(int32_t columnIndex) const=0;
virtual long double getDouble(const SQLString& columnLabel) const=0;
virtual long double getDouble(int32_t columnIndex) const=0;
virtual bool getBoolean(int32_t index) const=0;
virtual bool getBoolean(const SQLString& columnLabel) const=0;
virtual int8_t getByte(int32_t index) const=0;
virtual int8_t getByte(const SQLString& columnLabel) const=0;
virtual int16_t getShort(int32_t index) const=0;
virtual int16_t getShort(const SQLString& columnLabel) const=0;
virtual std::istream* getBinaryStream(int32_t columnIndex) const=0;
virtual std::istream* getBinaryStream(const SQLString& columnLabel) const=0;
virtual int32_t findColumn(const SQLString& columnLabel) const=0;
virtual SQLString getCursorName()=0;
virtual int32_t getHoldability() const=0;
virtual ResultSetMetaData* getMetaData() const=0;
virtual Blob* getBlob(int32_t columnIndex) const=0;
virtual Blob* getBlob(const SQLString& columnLabel) const=0;
#ifdef MAYBE_IN_NEXT_VERSION
virtual sql::bytes* getBytes(const SQLString& columnLabel) const=0;
virtual sql::bytes* getBytes(int32_t columnIndex) const=0;
virtual SQLString getNString(int32_t columnIndex) const=0;
virtual SQLString getNString(SQLString& columnLabel) const=0;
virtual Date* getDate(int32_t columnIndex) const=0;
virtual Date* getDate(SQLString& columnLabel) const=0;
virtual Time* getTime(int32_t columnIndex) const=0;
virtual Time* getTime(SQLString& columnLabel) const=0;
virtual std::istream* getAsciiStream(SQLString& columnLabel) const=0;
virtual std::istream* getAsciiStream(int32_t columnIndex) const=0;
virtual std::istringstream* getCharacterStream(SQLString& columnLabel) const=0;
virtual std::istringstream* getCharacterStream(int32_t columnIndex) const=0;
virtual std::istringstream& getNCharacterStream(int32_t columnIndex) const=0;
virtual std::istringstream& getNCharacterStream(SQLString& columnLabel) const=0;
virtual NClob* getNClob(int32_t columnIndex) const=0;
virtual NClob* getNClob(SQLString& columnLabel) const=0;
virtual Clob* getClob(int32_t columnIndex) const=0;
virtual Clob* getClob(SQLString& columnLabel) const=0;
virtual Timestamp* getTimestamp(int32_t columnIndex) const=0;
virtual Timestamp* getTimestamp(SQLString& columnLabel) const=0;
#endif
virtual RowId* getRowId(int32_t columnIndex) const=0;
virtual RowId* getRowId(const SQLString& columnLabel) const=0;
#ifdef JDBC_SPECIFIC_TYPES_IMPLEMENTED
virtual BigDecimal* getBigDecimal(SQLString& columnLabel,int32_t scale) const=0;
virtual BigDecimal* getBigDecimal(int32_t columnIndex,int32_t scale) const=0;
virtual BigDecimal* getBigDecimal(int32_t columnIndex) const=0;
virtual BigDecimal* getBigDecimal(SQLString& columnLabel) const=0;
virtual Date* getDate(int32_t columnIndex,Calendar& cal) const=0;
virtual Date* getDate(SQLString& columnLabel,Calendar& cal) const=0;
virtual Time* getTime(int32_t columnIndex,Calendar& cal) const=0;
virtual Time* getTime(SQLString& columnLabel,Calendar& cal) const=0;
virtual Timestamp* getTimestamp(int32_t columnIndex,Calendar& cal) const=0;
virtual Timestamp* getTimestamp(SQLString& columnLabel,Calendar& cal) const=0;
virtual sql::Object* getObject(int32_t columnIndex) const=0;
virtual sql::Object* getObject(SQLString& columnLabel) const=0;
virtual Ref* getRef(int32_t columnIndex) const=0;
virtual Ref* getRef(SQLString& columnLabel) const=0;
virtual sql::Array* getArray(int32_t columnIndex) const=0;
virtual sql::Array* getArray(SQLString& columnLabel) const=0;
virtual URL* getURL(int32_t columnIndex) const=0;
virtual URL* getURL(SQLString& columnLabel) const=0;
virtual SQLXML* getSQLXML(int32_t columnIndex) const=0;
virtual SQLXML* getSQLXML(SQLString& columnLabel) const=0;
#endif
virtual bool rowUpdated()=0;
virtual bool rowInserted()=0;
virtual bool rowDeleted()=0;
virtual void moveToInsertRow()=0;
virtual void moveToCurrentRow()=0;
virtual void cancelRowUpdates()=0;
virtual void insertRow()=0;
virtual void refreshRow()=0;
virtual std::size_t rowsCount() const=0;
#ifdef RS_UPDATE_FUNCTIONALITY_IMPLEMENTED
virtual void deleteRow()=0;
virtual void updateNull(int32_t columnIndex)=0;
virtual void updateNull(SQLString& columnLabel)=0;
virtual void updateBoolean(int32_t columnIndex,bool boolean)=0;
virtual void updateBoolean(SQLString& columnLabel,bool value)=0;
virtual void updateByte(int32_t columnIndex,char value)=0;
virtual void updateByte(SQLString& columnLabel,char value)=0;
virtual void updateShort(int32_t columnIndex,short value)=0;
virtual void updateShort(SQLString& columnLabel,short value)=0;
virtual void updateInt(int32_t columnIndex,int32_t value)=0;
virtual void updateInt(SQLString& columnLabel,int32_t value)=0;
virtual void updateFloat(int32_t columnIndex,float value)=0;
virtual void updateFloat(SQLString& columnLabel,float value)=0;
virtual void updateDouble(int32_t columnIndex,double value)=0;
virtual void updateDouble(SQLString& columnLabel,double value)=0;
virtual void updateBigDecimal(int32_t columnIndex,BigDecimal value)=0;
virtual void updateBigDecimal(SQLString& columnLabel,BigDecimal value)=0;
virtual void updateString(int32_t columnIndex, SQLString& value)=0;
virtual void updateString(SQLString& columnLabel, SQLString& value)=0;
virtual void updateBytes(int32_t columnIndex,char* value)=0;
virtual void updateBytes(SQLString& columnLabel,char* value)=0;
virtual void updateDate(int32_t columnIndex,Date date)=0;
virtual void updateDate(SQLString& columnLabel,Date value)=0;
virtual void updateTime(int32_t columnIndex,Time time)=0;
virtual void updateTime(SQLString& columnLabel,Time value)=0;
virtual void updateTimestamp(int32_t columnIndex,Timestamp timeStamp)=0;
virtual void updateTimestamp(SQLString& columnLabel,Timestamp value)=0;
virtual void updateAsciiStream(int32_t columnIndex,std::istream* inputStream,int32_t length)=0;
virtual void updateAsciiStream(SQLString& columnLabel,std::istream* inputStream)=0;
virtual void updateAsciiStream(SQLString& columnLabel,std::istream* value,int32_t length)=0;
virtual void updateAsciiStream(int32_t columnIndex,std::istream* inputStream,int64_t length)=0;
virtual void updateAsciiStream(SQLString& columnLabel,std::istream* inputStream,int64_t length)=0;
virtual void updateAsciiStream(int32_t columnIndex,std::istream* inputStream)=0;
virtual void updateBinaryStream(int32_t columnIndex,std::istream* inputStream,int32_t length)=0;
virtual void updateBinaryStream(int32_t columnIndex,std::istream* inputStream,int64_t length)=0;
virtual void updateBinaryStream(SQLString& columnLabel,std::istream* value,int32_t length)=0;
virtual void updateBinaryStream(SQLString& columnLabel,std::istream* inputStream,int64_t length)=0;
virtual void updateBinaryStream(int32_t columnIndex,std::istream* inputStream)=0;
virtual void updateBinaryStream(SQLString& columnLabel,std::istream* inputStream)=0;
virtual void updateCharacterStream(int32_t columnIndex,std::istringstream& value,int32_t length)=0;
virtual void updateCharacterStream(int32_t columnIndex,std::istringstream& value)=0;
virtual void updateCharacterStream(SQLString& columnLabel,std::istringstream& std::istringstream&,int32_t length)=0;
virtual void updateCharacterStream(int32_t columnIndex,std::istringstream& value,int64_t length)=0;
virtual void updateCharacterStream(SQLString& columnLabel,std::istringstream& std::istringstream&,int64_t length)=0;
virtual void updateCharacterStream(SQLString& columnLabel,std::istringstream& reader)=0;
virtual void updateObject(int32_t columnIndex,sql::Object* value,int32_t scaleOrLength)=0;
virtual void updateObject(int32_t columnIndex,sql::Object* value)=0;
virtual void updateObject(SQLString& columnLabel,sql::Object* value,int32_t scaleOrLength)=0;
virtual void updateObject(SQLString& columnLabel,sql::Object* value)=0;
virtual void updateLong(SQLString& columnLabel,int64_t value)=0;
virtual void updateLong(int32_t columnIndex,int64_t value)=0;
virtual void updateRow()=0;
virtual void updateRef(int32_t columnIndex,Ref ref)=0;
virtual void updateRef(SQLString& columnLabel,Ref ref)=0;
virtual void updateBlob(int32_t columnIndex,Blob& blob)=0;
virtual void updateBlob(SQLString& columnLabel,Blob& blob)=0;
virtual void updateBlob(int32_t columnIndex,std::istream* inputStream)=0;
virtual void updateBlob(SQLString& columnLabel,std::istream* inputStream)=0;
virtual void updateBlob(int32_t columnIndex,std::istream* inputStream,int64_t length)=0;
virtual void updateBlob(SQLString& columnLabel,std::istream* inputStream,int64_t length)=0;
virtual void updateClob(int32_t columnIndex,Clob& clob)=0;
virtual void updateClob(SQLString& columnLabel,Clob& clob)=0;
virtual void updateClob(int32_t columnIndex,std::istringstream& reader,int64_t length)=0;
virtual void updateClob(SQLString& columnLabel,std::istringstream& reader,int64_t length)=0;
virtual void updateClob(int32_t columnIndex,std::istringstream& reader)=0;
virtual void updateClob(SQLString& columnLabel,std::istringstream& reader)=0;
virtual void updateArray(int32_t columnIndex,sql::Array& array)=0;
virtual void updateArray(SQLString& columnLabel,sql::Array& array)=0;
virtual void updateRowId(int32_t columnIndex,RowId rowId)=0;
virtual void updateRowId(SQLString& columnLabel,RowId rowId)=0;
virtual void updateNString(int32_t columnIndex, SQLString& nstring)=0;
virtual void updateNString(SQLString& columnLabel, SQLString& nstring)=0;
virtual void updateNClob(int32_t columnIndex,NClob& nclob)=0;
virtual void updateNClob(SQLString& columnLabel,NClob& nclob)=0;
virtual void updateNClob(int32_t columnIndex,std::istringstream& reader)=0;
virtual void updateNClob(SQLString& columnLabel,std::istringstream& reader)=0;
virtual void updateNClob(int32_t columnIndex,std::istringstream& reader,int64_t length)=0;
virtual void updateNClob(SQLString& columnLabel,std::istringstream& reader,int64_t length)=0;
virtual void updateSQLXML(int32_t columnIndex,SQLXML& xmlObject)=0;
virtual void updateSQLXML(SQLString& columnLabel,SQLXML& xmlObject)=0;
virtual void updateNCharacterStream(int32_t columnIndex,std::istringstream& value,int64_t length)=0;
virtual void updateNCharacterStream(SQLString& columnLabel,std::istringstream& reader,int64_t length)=0;
virtual void updateNCharacterStream(int32_t columnIndex,std::istringstream& reader)=0;
virtual void updateNCharacterStream(SQLString& columnLabel,std::istringstream& reader)=0;
#endif
};
}
#endif