-
-
Notifications
You must be signed in to change notification settings - Fork 394
/
resultset.h
105 lines (84 loc) · 3.39 KB
/
resultset.h
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
/*
# PostgreSQL Database Modeler (pgModeler)
# Sub-project: libdbconnect library
# Class: ResultSet
# Description: This class encapsulates some functions implemented by libpq
# for manipulation of resultsets returned by PostgreSQL SQL commands
# Creation date: 14/07/2009
#
# Copyright 2006-2012 - Raphael Araújo e Silva <rkhaotix@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation version 3.
#
# 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 General Public License for more details.
#
# The complete text of GPLv3 is at LICENSE file on source code root directory.
# Also, you can get the complete GNU General Public License at <http://www.gnu.org/licenses/>
*/
#ifndef RESULTSET_H
#define RESULTSET_H
#include "exception.h"
#include <libpq-fe.h>
#include <cstdlib>
class ResultSet {
private:
/* Indicates whether the result was copied, this flag is used
to avoid segmentation faults when calling the destructor.
As the pointer 'sql_result' is copied
to other elements if it is destroyed can cause
reference fails. Thus, such a pointer is only deleted
when this flag is marked as false */
bool is_res_copied;
void destroyResultSet(void);
protected:
//Stores the current tuple index, just for navigation
int current_tuple;
/* Indicates that the result was generated from a command
which generates no tuples. Example: INSERT, DELETE, CREATE .. */
bool empty_result;
//Stores the result object of a SQL command
PGresult *sql_result;
/* This class may be constructed from a
result of SQL command generated in DBConnection class */
ResultSet(PGresult *sql_result);
public:
//Constants used to navigate through the resultset
static const unsigned FIRST_TUPLE=0,
LAST_TUPLE=1,
PREVIOUS_TUPLE=2,
NEXT_TUPLE=3;
ResultSet(void);
~ResultSet(void);
//Returns the value of a column (searching by name or index)
char *getColumnValue(const QString &column_name);
char *getColumnValue(int column_idx);
//Returns the data allocated size of a column (searching by name or index)
int getColumnSize(const QString &column_name);
int getColumnSize(int column_idx);
/* Returns the number of rows affected by the command that generated
the result if it is an INSERT, DELETE, UPDATE or the number of
tuples returned if the command was a SELECT */
int getTupleCount(void);
//Returns the column count present in one tuple
int getColumnCount(void);
//Returns the name of the column specified by it's index
QString getColumnName(int column_idx);
//Returns the index of the column specified by it's name
int getColumnIndex(const QString &column_name);
//Returns the current tuple where the navigation is
int getCurrentTuple(void);
//Informs if the column is in binary format
bool isColumnBinaryFormat(const QString &column_name);
bool isColumnBinaryFormat(int column_idx);
//Access on tuple on result set via navigation constants
bool accessTuple(unsigned tuple_type);
//Make a copy between two resultsets
void operator = (ResultSet &res);
friend class DBConnection;
};
#endif