~ubuntu-branches/ubuntu/natty/psqlodbc/natty

« back to all changes in this revision

Viewing changes to qresult.h

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2004-05-13 10:47:36 UTC
  • Revision ID: james.westby@ubuntu.com-20040513104736-a530gmn0p3knep89
Tags: upstream-07.03.0200
ImportĀ upstreamĀ versionĀ 07.03.0200

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* File:                        qresult.h
 
2
 *
 
3
 * Description:         See "qresult.c"
 
4
 *
 
5
 * Comments:            See "notice.txt" for copyright and license information.
 
6
 *
 
7
 */
 
8
 
 
9
#ifndef __QRESULT_H__
 
10
#define __QRESULT_H__
 
11
 
 
12
#include "psqlodbc.h"
 
13
 
 
14
#include "connection.h"
 
15
#include "socket.h"
 
16
#include "columninfo.h"
 
17
#include "tuplelist.h"
 
18
#include "tuple.h"
 
19
 
 
20
enum QueryResultCode_
 
21
{
 
22
        PGRES_EMPTY_QUERY = 0,
 
23
        PGRES_COMMAND_OK,                       /* a query command that doesn't return */
 
24
        /* anything was executed properly by the backend */
 
25
        PGRES_TUPLES_OK,                        /* a query command that returns tuples */
 
26
        /* was executed properly by the backend, PGresult */
 
27
        /* contains the resulttuples */
 
28
        PGRES_COPY_OUT,
 
29
        PGRES_COPY_IN,
 
30
        PGRES_BAD_RESPONSE,                     /* an unexpected response was recv'd from
 
31
                                                                 * the backend */
 
32
        PGRES_NONFATAL_ERROR,
 
33
        PGRES_FATAL_ERROR,
 
34
        PGRES_FIELDS_OK,                        /* field information from a query was
 
35
                                                                 * successful */
 
36
        PGRES_END_TUPLES,
 
37
        PGRES_INTERNAL_ERROR
 
38
};
 
39
typedef enum QueryResultCode_ QueryResultCode;
 
40
 
 
41
 
 
42
struct QResultClass_
 
43
{
 
44
        ColumnInfoClass *fields;        /* the Column information */
 
45
        TupleListClass *manual_tuples;          /* manual result tuple list */
 
46
        ConnectionClass *conn;          /* the connection this result is using
 
47
                                                                 * (backend) */
 
48
        QResultClass    *next;          /* the following result class */
 
49
 
 
50
        /* Stuff for declare/fetch tuples */
 
51
        int                     num_total_rows; /* total count of rows read in */
 
52
        int                     count_backend_allocated;/* m(re)alloced count */
 
53
        int                     count_keyset_allocated; /* m(re)alloced count */
 
54
        int                     num_backend_rows;       /* count of tuples kept in backend_tuples member */
 
55
        int                     fetch_count;    /* logical rows read so far */
 
56
        int                     currTuple;
 
57
        int                     base;
 
58
 
 
59
        int                     num_fields;             /* number of fields in the result */
 
60
        int                     cache_size;
 
61
        int                     rowset_size;
 
62
        Int4                    recent_processed_row_count;
 
63
 
 
64
        QueryResultCode status;
 
65
 
 
66
        char       *message;
 
67
        char       *cursor;                     /* The name of the cursor for select
 
68
                                                                 * statements */
 
69
        char       *command;
 
70
        char       *notice;
 
71
 
 
72
        TupleField *backend_tuples; /* data from the backend (the tuple cache) */
 
73
        TupleField *tupleField;         /* current backend tuple being retrieved */
 
74
 
 
75
        char            inTuples;               /* is a fetch of rows from the backend in
 
76
                                                                 * progress? */
 
77
        char            aborted;                /* was aborted? */
 
78
        char            haskeyset;              /* this result contains keyset ? */
 
79
        KeySet          *keyset;
 
80
        UInt2           rb_alloc;       /* count of allocated rollback info */  
 
81
        UInt2           rb_count;       /* count of rollback info */    
 
82
        Rollback        *rollback;      
 
83
        UInt2           dl_alloc;       /* count of allocated deleted info */   
 
84
        UInt2           dl_count;       /* count of deleted info */     
 
85
        UInt4           *deleted;       
 
86
};
 
87
 
 
88
#define QR_get_fields(self)                                     (self->fields)
 
89
 
 
90
 
 
91
/*      These functions are for retrieving data from the qresult */
 
92
#define QR_get_value_manual(self, tupleno, fieldno) (TL_get_fieldval(self->manual_tuples, tupleno, fieldno))
 
93
#define QR_get_value_backend(self, fieldno)                     (self->tupleField[fieldno].value)
 
94
#define QR_get_value_backend_row(self, tupleno, fieldno) ((self->backend_tuples + (tupleno * self->num_fields))[fieldno].value)
 
95
 
 
96
/*      These functions are used by both manual and backend results */
 
97
#define QR_NumResultCols(self)          (CI_get_num_fields(self->fields))
 
98
#define QR_NumPublicResultCols(self)    (self->haskeyset ? CI_get_num_fields(self->fields) - 2 : CI_get_num_fields(self->fields))
 
99
#define QR_get_fieldname(self, fieldno_)        (CI_get_fieldname(self->fields, fieldno_))
 
100
#define QR_get_fieldsize(self, fieldno_)        (CI_get_fieldsize(self->fields, fieldno_))
 
101
#define QR_get_display_size(self, fieldno_) (CI_get_display_size(self->fields, fieldno_))
 
102
#define QR_get_atttypmod(self, fieldno_)        (CI_get_atttypmod(self->fields, fieldno_))
 
103
#define QR_get_field_type(self, fieldno_)       (CI_get_oid(self->fields, fieldno_))
 
104
 
 
105
/*      These functions are used only for manual result sets */
 
106
#define QR_get_num_total_tuples(self)           (self->manual_tuples ? TL_get_num_tuples(self->manual_tuples) : self->num_total_rows)
 
107
#define QR_get_num_backend_tuples(self)         (self->manual_tuples ? TL_get_num_tuples(self->manual_tuples) : self->num_backend_rows)
 
108
#define QR_add_tuple(self, new_tuple)           (TL_add_tuple(self->manual_tuples, new_tuple))
 
109
#define QR_set_field_info(self, field_num, name, adtid, adtsize)  (CI_set_field_info(self->fields, field_num, name, adtid, adtsize, -1))
 
110
 
 
111
/* status macros */
 
112
#define QR_command_successful(self)                     ( !(self->status == PGRES_BAD_RESPONSE || self->status == PGRES_NONFATAL_ERROR || self->status == PGRES_FATAL_ERROR))
 
113
#define QR_command_maybe_successful(self) ( !(self->status == PGRES_BAD_RESPONSE || self->status == PGRES_FATAL_ERROR))
 
114
#define QR_command_nonfatal(self)                       ( self->status == PGRES_NONFATAL_ERROR)
 
115
#define QR_end_tuples(self)                                     ( self->status == PGRES_END_TUPLES)
 
116
#define QR_set_status(self, condition)          ( self->status = condition )
 
117
#define QR_set_aborted(self, aborted_)          ( self->aborted = aborted_)
 
118
#define QR_set_haskeyset(self)          (self->haskeyset = TRUE)
 
119
 
 
120
#define QR_get_message(self)                            (self->message)
 
121
#define QR_get_command(self)                            (self->command)
 
122
#define QR_get_notice(self)                                     (self->notice)
 
123
#define QR_get_status(self)                                     (self->status)
 
124
#define QR_get_aborted(self)                            (self->aborted)
 
125
 
 
126
#define QR_aborted(self)                                        (!self || self->aborted)
 
127
 
 
128
/*      Core Functions */
 
129
QResultClass *QR_Constructor(void);
 
130
void            QR_Destructor(QResultClass *self);
 
131
char            QR_read_tuple(QResultClass *self, char binary);
 
132
int                     QR_next_tuple(QResultClass *self);
 
133
int                     QR_close(QResultClass *self);
 
134
char            QR_fetch_tuples(QResultClass *self, ConnectionClass *conn, char *cursor);
 
135
void            QR_free_memory(QResultClass *self);
 
136
void            QR_set_command(QResultClass *self, const char *msg);
 
137
void            QR_set_message(QResultClass *self, const char *msg);
 
138
void            QR_set_notice(QResultClass *self, const char *msg);
 
139
 
 
140
void            QR_set_num_fields(QResultClass *self, int new_num_fields);      /* manual result only */
 
141
 
 
142
void            QR_inc_base(QResultClass *self, int base_inc);
 
143
void            QR_set_cache_size(QResultClass *self, int cache_size);
 
144
void            QR_set_rowset_size(QResultClass *self, int rowset_size);
 
145
void            QR_set_position(QResultClass *self, int pos);
 
146
 
 
147
#endif