1
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.10 2003-11-29 19:52:08 pgsql Exp $ */
3
#define POSTGRES_ECPG_INTERNAL
4
#include "postgres_fe.h"
16
ECPGraise(int line, int code, const char *sqlstate, const char *str)
18
struct sqlca_t *sqlca = ECPGget_sqlca();
20
sqlca->sqlcode = code;
21
strncpy(sqlca->sqlstate, sqlstate, sizeof(sqlca->sqlstate));
26
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
27
"No data found in line %d.", line);
30
case ECPG_OUT_OF_MEMORY:
31
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
32
"Out of memory in line %d.", line);
35
case ECPG_UNSUPPORTED:
36
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
37
"Unsupported type %s in line %d.", str, line);
40
case ECPG_TOO_MANY_ARGUMENTS:
41
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
42
"Too many arguments in line %d.", line);
45
case ECPG_TOO_FEW_ARGUMENTS:
46
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
47
"Too few arguments in line %d.", line);
51
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
52
"Not correctly formatted int type: %s line %d.", str, line);
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);
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);
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);
71
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
72
"Empty query in line %d.", line);
75
case ECPG_MISSING_INDICATOR:
76
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
77
"NULL value without indicator in line %d.", line);
81
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
82
"Variable is not an array in line %d.", line);
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);
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);
96
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
97
"No such connection %s in line %d.", str, line);
101
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
102
"Not connected to '%s' in line %d.", str, line);
105
case ECPG_INVALID_STMT:
106
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
107
"Invalid statement name %s in line %d.", str, line);
110
case ECPG_UNKNOWN_DESCRIPTOR:
111
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
112
"Descriptor %s not found in line %d.", str, line);
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);
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);
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);
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);
136
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
137
"Error in transaction processing in line %d.", line);
141
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
142
"Could not connect to database %s in line %d.", str, line);
146
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc),
147
"SQL error #%d in line %d.", code, line);
151
sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc);
152
ECPGlog("raising sqlcode %d in line %d, '%s'.\n", code, line, sqlca->sqlerrm.sqlerrmc);
154
/* free all memory we have allocated for the user */
159
ECPGraise_backend(int line, PGresult *result, PGconn *conn, int compat)
161
struct sqlca_t *sqlca = ECPGget_sqlca();
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);
174
sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR;
175
message = PQerrorMessage(conn);
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);
184
strncpy(sqlca->sqlstate, sqlstate, sizeof(sqlca->sqlstate));
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;
192
sqlca->sqlcode = ECPG_PGSQL;
194
ECPGlog("raising sqlstate %.*s in line %d, '%s'.\n",
195
sizeof(sqlca->sqlstate), sqlca->sqlstate, line, sqlca->sqlerrm.sqlerrmc);
197
/* free all memory we have allocated for the user */
201
/* print out an error message */
205
struct sqlca_t *sqlca = ECPGget_sqlca();
207
sqlca->sqlerrm.sqlerrmc[sqlca->sqlerrm.sqlerrml] = '\0';
208
fprintf(stderr, "sql error %s\n", sqlca->sqlerrm.sqlerrmc);