kexi
pqxxcursor.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef KEXIDB_CURSOR_PQXX_H
00021 #define KEXIDB_CURSOR_PQXX_H
00022
00023 #include <kexidb/cursor.h>
00024 #include <kexidb/connection.h>
00025 #include <kexidb/utils.h>
00026
00027 #if 0
00028 #include <pqxx/all.h>
00029 #else
00030 #include <pqxx/pqxx>
00031 #endif
00032
00033 #include <pqxx/binarystring>
00034 #include <migration/pqxx/pg_type.h>
00035
00036 namespace KexiDB {
00037
00038 class pqxxSqlCursor: public Cursor {
00039 public:
00040 virtual ~pqxxSqlCursor();
00041
00042 virtual QVariant value(uint i);
00043 virtual const char** rowData() const;
00044 virtual void storeCurrentRow(RowData &data) const;
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 protected:
00055 pqxxSqlCursor(Connection* conn, const QString& statement = QString::null, uint options = NoOptions );
00056 pqxxSqlCursor(Connection* conn, QuerySchema& query, uint options = NoOptions );
00057 virtual void drv_clearServerResult();
00058 virtual void drv_appendCurrentRecordToBuffer();
00059 virtual void drv_bufferMovePointerNext();
00060 virtual void drv_bufferMovePointerPrev();
00061 virtual void drv_bufferMovePointerTo(Q_LLONG to);
00062 virtual bool drv_open();
00063 virtual bool drv_close();
00064 virtual void drv_getNextRecord();
00065 virtual void drv_getPrevRecord();
00066
00067 private:
00068 pqxx::result* m_res;
00069
00070 pqxx::connection* my_conn;
00071 QVariant pValue(uint pos)const;
00072 bool m_implicityStarted : 1;
00073
00074 friend class pqxxSqlConnection;
00075 };
00076
00077 inline QVariant pgsqlCStrToVariant(const pqxx::result::field& r)
00078 {
00079 switch(r.type())
00080 {
00081 case BOOLOID:
00082 return QString::fromLatin1(r.c_str(), r.size())=="true";
00083 case INT2OID:
00084 case INT4OID:
00085 case INT8OID:
00086 return r.as(int());
00087 case FLOAT4OID:
00088 case FLOAT8OID:
00089 case NUMERICOID:
00090 return r.as(double());
00091 case DATEOID:
00092 return QString::fromUtf8(r.c_str(), r.size());
00093 case TIMEOID:
00094 return QString::fromUtf8(r.c_str(), r.size());
00095 case TIMESTAMPOID:
00096 return QString::fromUtf8(r.c_str(), r.size());
00097 case BYTEAOID:
00098 return KexiDB::pgsqlByteaToByteArray(r.c_str(), r.size());
00099 case BPCHAROID:
00100 case VARCHAROID:
00101 case TEXTOID:
00102 return QString::fromUtf8(r.c_str(), r.size());
00103 default:
00104 return QString::fromUtf8(r.c_str(), r.size());
00105 }
00106 }
00107
00108 }
00109
00110 #endif
|