1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
|
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgSet.h - PostgreSQL ResultSet class
//
//////////////////////////////////////////////////////////////////////////
#ifndef PGSET_H
#define PGSET_H
// wxWindows headers
#include <wx/wx.h>
#include <wx/datetime.h>
// PostgreSQL headers
#include <libpq-fe.h>
#include "utils/misc.h"
typedef enum
{
PGTYPCLASS_NUMERIC = 1,
PGTYPCLASS_BOOL,
PGTYPCLASS_STRING,
PGTYPCLASS_DATE,
PGTYPCLASS_OTHER
} pgTypClass;
class pgConn;
// Class declarations
class pgSet
{
public:
pgSet();
pgSet(PGresult *newRes, pgConn *newConn, wxMBConv &cnv, bool needColQt);
~pgSet();
long NumRows() const
{
return nRows;
}
long NumCols() const
{
return nCols;
}
void MoveNext()
{
if (pos <= nRows) pos++;
}
void MovePrevious()
{
if (pos > 0) pos--;
}
void MoveFirst()
{
if (nRows) pos = 1;
else pos = 0;
}
void MoveLast()
{
pos = nRows;
}
void Locate(long l)
{
pos = l;
}
long CurrentPos() const
{
return pos;
}
bool Bof() const
{
return (!nRows || pos < 1);
}
bool Eof() const
{
return (!nRows || pos > nRows);
}
wxString ColName(const int col) const;
OID ColTypeOid(const int col) const;
long ColTypeMod(const int col) const;
wxString ColType(const int col) const;
wxString ColFullType(const int col) const;
pgTypClass ColTypClass(const int col) const;
OID GetInsertedOid() const
{
return PQoidValue(res);
}
long GetInsertedCount() const;
int ColSize(const int col) const
{
return PQfsize(res, col);
}
bool IsNull(const int col) const
{
return (PQgetisnull(res, pos - 1, col) != 0);
}
int ColScale(const int col) const;
int ColNumber(const wxString &colName) const;
bool HasColumn(const wxString &colname) const;
wxString GetVal(const int col) const;
wxString GetVal(const wxString &col) const;
long GetLong(const int col) const;
long GetLong(const wxString &col) const;
bool GetBool(const int col) const;
bool GetBool(const wxString &col) const;
double GetDouble(const int col) const;
double GetDouble(const wxString &col) const;
wxDateTime GetDateTime(const int col) const;
wxDateTime GetDateTime(const wxString &col) const;
wxDateTime GetDate(const int col) const;
wxDateTime GetDate(const wxString &col) const;
wxULongLong GetLongLong(const int col) const;
wxULongLong GetLongLong(const wxString &col) const;
OID GetOid(const int col) const;
OID GetOid(const wxString &col) const;
char *GetCharPtr(const int col) const;
char *GetCharPtr(const wxString &col) const;
wxMBConv &GetConversion() const
{
return conv;
}
wxString GetCommandStatus() const
{
if (res)
{
return wxString(PQcmdStatus(res), conv);
}
return wxEmptyString;
}
protected:
pgConn *conn;
PGresult *res;
long pos, nRows, nCols;
wxString ExecuteScalar(const wxString &sql) const;
wxMBConv &conv;
bool needColQuoting;
mutable wxArrayString colTypes, colFullTypes;
wxArrayInt colClasses;
};
class pgSetIterator
{
public:
pgSetIterator(pgSet *s);
pgSetIterator(pgConn *conn, const wxString &sql);
~pgSetIterator();
bool RowsLeft();
bool MovePrev();
bool IsValid()
{
return set != 0;
}
pgSet *Set()
{
return set;
}
wxString GetVal(const int col) const
{
return set->GetVal(col);
}
wxString GetVal(const wxString &col) const
{
return set->GetVal(col);
}
long GetLong(const int col) const
{
return set->GetLong(col);
}
long GetLong(const wxString &col) const
{
return set->GetLong(col);
}
bool GetBool(const int col) const
{
return set->GetBool(col);
}
bool GetBool(const wxString &col) const
{
return set->GetBool(col);
}
double GetDouble(const int col) const
{
return set->GetDouble(col);
}
double GetDouble(const wxString &col) const
{
return set->GetDouble(col);
}
wxDateTime GetDateTime(const int col) const
{
return set->GetDateTime(col);
}
wxDateTime GetDateTime(const wxString &col) const
{
return set->GetDateTime(col);
}
wxDateTime GetDate(const int col) const
{
return set->GetDate(col);
}
wxDateTime GetDate(const wxString &col) const
{
return set->GetDate(col);
}
wxULongLong GetLongLong(const int col) const
{
return set->GetLongLong(col);
}
wxULongLong GetLongLong(const wxString &col) const
{
return set->GetLongLong(col);
}
OID GetOid(const int col) const
{
return set->GetOid(col);
}
OID GetOid(const wxString &col) const
{
return set->GetOid(col);
}
protected:
pgSet *set;
bool first;
};
#endif
|