~vcs-imports/mammoth-replicator/trunk

« back to all changes in this revision

Viewing changes to src/interfaces/ecpg/ecpglib/error.c

  • Committer: alvherre
  • Date: 2005-12-16 21:24:52 UTC
  • Revision ID: svn-v4:db760fc0-0f08-0410-9d63-cc6633f64896:trunk:1
Initial import of the REL8_0_3 sources from the Pgsql CVS repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.10 2003-11-29 19:52:08 pgsql Exp $ */
 
2
 
 
3
#define POSTGRES_ECPG_INTERNAL
 
4
#include "postgres_fe.h"
 
5
 
 
6
#include <stdio.h>
 
7
 
 
8
#include "ecpgerrno.h"
 
9
#include "ecpgtype.h"
 
10
#include "ecpglib.h"
 
11
#include "extern.h"
 
12
#include "sqlca.h"
 
13
 
 
14
 
 
15
void
 
16
ECPGraise(int line, int code, const char *sqlstate, const char *str)
 
17
{
 
18
        struct sqlca_t *sqlca = ECPGget_sqlca();
 
19
 
 
20
        sqlca->sqlcode = code;
 
21
        strncpy(sqlca->sqlstate, sqlstate, sizeof(sqlca->sqlstate));
 
22
 
 
23
        switch (code)
 
24
        {
 
25
                case ECPG_NOT_FOUND:
 
26
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
27
                                         "No data found in line %d.", line);
 
28
                        break;
 
29
 
 
30
                case ECPG_OUT_OF_MEMORY:
 
31
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
32
                                         "Out of memory in line %d.", line);
 
33
                        break;
 
34
 
 
35
                case ECPG_UNSUPPORTED:
 
36
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
37
                                         "Unsupported type %s in line %d.", str, line);
 
38
                        break;
 
39
 
 
40
                case ECPG_TOO_MANY_ARGUMENTS:
 
41
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
42
                                         "Too many arguments in line %d.", line);
 
43
                        break;
 
44
 
 
45
                case ECPG_TOO_FEW_ARGUMENTS:
 
46
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
47
                                         "Too few arguments in line %d.", line);
 
48
                        break;
 
49
 
 
50
                case ECPG_INT_FORMAT:
 
51
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
52
                         "Not correctly formatted int type: %s line %d.", str, line);
 
53
                        break;
 
54
 
 
55
                case ECPG_UINT_FORMAT:
 
56
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
57
                                         "Not correctly formatted unsigned type: %s in line %d.", str, line);
 
58
                        break;
 
59
 
 
60
                case ECPG_FLOAT_FORMAT:
 
61
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
62
                                         "Not correctly formatted floating-point type: %s in line %d.", str, line);
 
63
                        break;
 
64
 
 
65
                case ECPG_CONVERT_BOOL:
 
66
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
67
                                  "Unable to convert %s to bool on line %d.", str, line);
 
68
                        break;
 
69
 
 
70
                case ECPG_EMPTY:
 
71
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
72
                                         "Empty query in line %d.", line);
 
73
                        break;
 
74
 
 
75
                case ECPG_MISSING_INDICATOR:
 
76
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
77
                                         "NULL value without indicator in line %d.", line);
 
78
                        break;
 
79
 
 
80
                case ECPG_NO_ARRAY:
 
81
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
82
                                         "Variable is not an array in line %d.", line);
 
83
                        break;
 
84
 
 
85
                case ECPG_DATA_NOT_ARRAY:
 
86
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
87
                         "Data read from backend is not an array in line %d.", line);
 
88
                        break;
 
89
 
 
90
                case ECPG_ARRAY_INSERT:
 
91
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
92
                         "Trying to insert an array of variables in line %d.", line);
 
93
                        break;
 
94
 
 
95
                case ECPG_NO_CONN:
 
96
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
97
                                         "No such connection %s in line %d.", str, line);
 
98
                        break;
 
99
 
 
100
                case ECPG_NOT_CONN:
 
101
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
102
                                         "Not connected to '%s' in line %d.", str, line);
 
103
                        break;
 
104
 
 
105
                case ECPG_INVALID_STMT:
 
106
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
107
                                         "Invalid statement name %s in line %d.", str, line);
 
108
                        break;
 
109
 
 
110
                case ECPG_UNKNOWN_DESCRIPTOR:
 
111
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
112
                                         "Descriptor %s not found in line %d.", str, line);
 
113
                        break;
 
114
 
 
115
                case ECPG_INVALID_DESCRIPTOR_INDEX:
 
116
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
117
                                         "Descriptor index out of range in line %d.", line);
 
118
                        break;
 
119
 
 
120
                case ECPG_UNKNOWN_DESCRIPTOR_ITEM:
 
121
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
122
                                         "Unknown descriptor item %s in line %d.", str, line);
 
123
                        break;
 
124
 
 
125
                case ECPG_VAR_NOT_NUMERIC:
 
126
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
127
                                         "Variable is not a numeric type in line %d.", line);
 
128
                        break;
 
129
 
 
130
                case ECPG_VAR_NOT_CHAR:
 
131
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
132
                                   "Variable is not a character type in line %d.", line);
 
133
                        break;
 
134
 
 
135
                case ECPG_TRANS:
 
136
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
137
                                         "Error in transaction processing in line %d.", line);
 
138
                        break;
 
139
 
 
140
                case ECPG_CONNECT:
 
141
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
142
                          "Could not connect to database %s in line %d.", str, line);
 
143
                        break;
 
144
 
 
145
                default:
 
146
                        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
147
                                         "SQL error #%d in line %d.", code, line);
 
148
                        break;
 
149
        }
 
150
 
 
151
        sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc);
 
152
        ECPGlog("raising sqlcode %d in line %d, '%s'.\n", code, line, sqlca->sqlerrm.sqlerrmc);
 
153
 
 
154
        /* free all memory we have allocated for the user */
 
155
        ECPGfree_auto_mem();
 
156
}
 
157
 
 
158
void
 
159
ECPGraise_backend(int line, PGresult *result, PGconn *conn, int compat)
 
160
{
 
161
        struct sqlca_t *sqlca = ECPGget_sqlca();
 
162
        char       *sqlstate;
 
163
        char       *message;
 
164
 
 
165
        if (result)
 
166
        {
 
167
                sqlstate = PQresultErrorField(result, PG_DIAG_SQLSTATE);
 
168
                if (sqlstate == NULL)
 
169
                        sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR;
 
170
                message = PQresultErrorField(result, PG_DIAG_MESSAGE_PRIMARY);
 
171
        }
 
172
        else
 
173
        {
 
174
                sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR;
 
175
                message = PQerrorMessage(conn);
 
176
        }
 
177
 
 
178
        /* copy error message */
 
179
        snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
 
180
                         "'%s' in line %d.", message, line);
 
181
        sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc);
 
182
 
 
183
        /* copy SQLSTATE */
 
184
        strncpy(sqlca->sqlstate, sqlstate, sizeof(sqlca->sqlstate));
 
185
 
 
186
        /* assign SQLCODE for backward compatibility */
 
187
        if (strncmp(sqlca->sqlstate, "23505", sizeof(sqlca->sqlstate)) == 0)
 
188
                sqlca->sqlcode = INFORMIX_MODE(compat) ? ECPG_INFORMIX_DUPLICATE_KEY : ECPG_DUPLICATE_KEY;
 
189
        if (strncmp(sqlca->sqlstate, "21000", sizeof(sqlca->sqlstate)) == 0)
 
190
                sqlca->sqlcode = INFORMIX_MODE(compat) ? ECPG_INFORMIX_SUBSELECT_NOT_ONE : ECPG_SUBSELECT_NOT_ONE;
 
191
        else
 
192
                sqlca->sqlcode = ECPG_PGSQL;
 
193
 
 
194
        ECPGlog("raising sqlstate %.*s in line %d, '%s'.\n",
 
195
                        sizeof(sqlca->sqlstate), sqlca->sqlstate, line, sqlca->sqlerrm.sqlerrmc);
 
196
 
 
197
        /* free all memory we have allocated for the user */
 
198
        ECPGfree_auto_mem();
 
199
}
 
200
 
 
201
/* print out an error message */
 
202
void
 
203
sqlprint(void)
 
204
{
 
205
        struct sqlca_t *sqlca = ECPGget_sqlca();
 
206
 
 
207
        sqlca->sqlerrm.sqlerrmc[sqlca->sqlerrm.sqlerrml] = '\0';
 
208
        fprintf(stderr, "sql error %s\n", sqlca->sqlerrm.sqlerrmc);
 
209
}