diff options
Diffstat (limited to 'kexi/kexidb/drivers/pqxx/pqxxcursor.h')
-rw-r--r-- | kexi/kexidb/drivers/pqxx/pqxxcursor.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/kexi/kexidb/drivers/pqxx/pqxxcursor.h b/kexi/kexidb/drivers/pqxx/pqxxcursor.h new file mode 100644 index 00000000..d596acca --- /dev/null +++ b/kexi/kexidb/drivers/pqxx/pqxxcursor.h @@ -0,0 +1,110 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Adam Pigg <[email protected]> + + This program 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 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KEXIDB_CURSOR_PQXX_H +#define KEXIDB_CURSOR_PQXX_H + +#include <kexidb/cursor.h> +#include <kexidb/connection.h> +#include <kexidb/utils.h> + +#if 0 +#include <pqxx/all.h> +#else +#include <pqxx/pqxx> +#endif + +#include <pqxx/binarystring> +#include <migration/pqxx/pg_type.h> + +namespace KexiDB { + +class pqxxSqlCursor: public Cursor { +public: + virtual ~pqxxSqlCursor(); + + virtual QVariant value(uint i); + virtual const char** rowData() const; + virtual void storeCurrentRow(RowData &data) const; + +//TODO virtual const char *** bufferData() + +//TODO virtual int serverResult() const; + +//TODO virtual QString serverResultName() const; + +//TODO virtual QString serverErrorMsg() const; + +protected: + pqxxSqlCursor(Connection* conn, const QString& statement = QString::null, uint options = NoOptions ); + pqxxSqlCursor(Connection* conn, QuerySchema& query, uint options = NoOptions ); + virtual void drv_clearServerResult(); + virtual void drv_appendCurrentRecordToBuffer(); + virtual void drv_bufferMovePointerNext(); + virtual void drv_bufferMovePointerPrev(); + virtual void drv_bufferMovePointerTo(Q_LLONG to); + virtual bool drv_open(); + virtual bool drv_close(); + virtual void drv_getNextRecord(); + virtual void drv_getPrevRecord(); + +private: + pqxx::result* m_res; +// pqxx::nontransaction* m_tran; + pqxx::connection* my_conn; + QVariant pValue(uint pos)const; + bool m_implicityStarted : 1; + //QByteArray processBinaryData(pqxx::binarystring*) const; + friend class pqxxSqlConnection; +}; + +inline QVariant pgsqlCStrToVariant(const pqxx::result::field& r) +{ + switch(r.type()) + { + case BOOLOID: + return QString::fromLatin1(r.c_str(), r.size())=="true"; //TODO check formatting + case INT2OID: + case INT4OID: + case INT8OID: + return r.as(int()); + case FLOAT4OID: + case FLOAT8OID: + case NUMERICOID: + return r.as(double()); + case DATEOID: + return QString::fromUtf8(r.c_str(), r.size()); //TODO check formatting + case TIMEOID: + return QString::fromUtf8(r.c_str(), r.size()); //TODO check formatting + case TIMESTAMPOID: + return QString::fromUtf8(r.c_str(), r.size()); //TODO check formatting + case BYTEAOID: + return KexiDB::pgsqlByteaToByteArray(r.c_str(), r.size()); + case BPCHAROID: + case VARCHAROID: + case TEXTOID: + return QString::fromUtf8(r.c_str(), r.size()); //utf8? + default: + return QString::fromUtf8(r.c_str(), r.size()); //utf8? + } +} + +} + +#endif |