|
1 | | -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.6 2003/08/04 00:43:32 momjian Exp $ */ |
| 1 | +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.7 2003/08/08 13:16:20 petere Exp $ */ |
2 | 2 |
|
3 | 3 | #definePOSTGRES_ECPG_INTERNAL |
4 | 4 | #include"postgres_fe.h" |
@@ -159,18 +159,29 @@ void |
159 | 159 | ECPGraise_backend(intline,PGresult*result,PGconn*conn,intcompat) |
160 | 160 | { |
161 | 161 | structsqlca_t*sqlca=ECPGget_sqlca(); |
| 162 | +char*sqlstate; |
| 163 | +char*message; |
| 164 | + |
| 165 | +if (result) |
| 166 | +{ |
| 167 | +sqlstate=PQresultErrorField(result,'C'); |
| 168 | +if (sqlstate==NULL) |
| 169 | +sqlstate=ECPG_SQLSTATE_ECPG_INTERNAL_ERROR; |
| 170 | +message=PQresultErrorField(result,'M'); |
| 171 | +} |
| 172 | +else |
| 173 | +{ |
| 174 | +sqlstate=ECPG_SQLSTATE_ECPG_INTERNAL_ERROR; |
| 175 | +message=PQerrorMessage(conn); |
| 176 | +} |
162 | 177 |
|
163 | 178 | /* copy error message */ |
164 | 179 | snprintf(sqlca->sqlerrm.sqlerrmc,sizeof(sqlca->sqlerrm.sqlerrmc), |
165 | | -"'%s' in line %d.", |
166 | | -result ?PQresultErrorField(result,'M') :PQerrorMessage(conn), |
167 | | -line); |
| 180 | +"'%s' in line %d.",message,line); |
168 | 181 | sqlca->sqlerrm.sqlerrml=strlen(sqlca->sqlerrm.sqlerrmc); |
169 | 182 |
|
170 | 183 | /* copy SQLSTATE */ |
171 | | -strncpy(sqlca->sqlstate, |
172 | | -result ?PQresultErrorField(result,'C') :ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, |
173 | | -sizeof(sqlca->sqlstate)); |
| 184 | +strncpy(sqlca->sqlstate,sqlstate,sizeof(sqlca->sqlstate)); |
174 | 185 |
|
175 | 186 | /* assign SQLCODE for backward compatibility */ |
176 | 187 | if (strncmp(sqlca->sqlstate,"23505",sizeof(sqlca->sqlstate))==0) |
|