Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8eb8194

Browse files
author
Michael Meskes
committed
In case the connection magically disappears libecpg only returns an internal
error sqlstate. This change makes it return a correct value..
1 parent3bdede3 commit8eb8194

File tree

4 files changed

+32
-21
lines changed

4 files changed

+32
-21
lines changed

‎src/interfaces/ecpg/ecpglib/error.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.23 2009/06/11 14:49:13 momjian Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.24 2010/03/05 13:57:08 meskes Exp $ */
22

33
#definePOSTGRES_ECPG_INTERNAL
44
#include"postgres_fe.h"
@@ -306,6 +306,17 @@ ecpg_raise_backend(int line, PGresult *result, PGconn *conn, int compat)
306306
message=PQerrorMessage(conn);
307307
}
308308

309+
if (sqlstate==ECPG_SQLSTATE_ECPG_INTERNAL_ERROR)
310+
{
311+
/* we might get here if the connection breaks down, so let's
312+
* check for this instead of giving just the generic internal error */
313+
if (PQstatus(conn)==CONNECTION_BAD)
314+
{
315+
sqlstate="57P02";
316+
message=ecpg_gettext("the connection to the server was lost");
317+
}
318+
}
319+
309320
/* copy error message */
310321
snprintf(sqlca->sqlerrm.sqlerrmc,sizeof(sqlca->sqlerrm.sqlerrmc),"%s on line %d",message,line);
311322
sqlca->sqlerrm.sqlerrml=strlen(sqlca->sqlerrm.sqlerrmc);
@@ -321,8 +332,8 @@ ecpg_raise_backend(int line, PGresult *result, PGconn *conn, int compat)
321332
else
322333
sqlca->sqlcode=ECPG_PGSQL;
323334

324-
ecpg_log("raising sqlstate %.*s (sqlcode %d) on line %d: %s\n",
325-
sizeof(sqlca->sqlstate),sqlca->sqlstate,sqlca->sqlcode,line,sqlca->sqlerrm.sqlerrmc);
335+
ecpg_log("raising sqlstate %.*s (sqlcode %d): %s\n",
336+
sizeof(sqlca->sqlstate),sqlca->sqlstate,sqlca->sqlcode,sqlca->sqlerrm.sqlerrmc);
326337

327338
/* free all memory we have allocated for the user */
328339
ECPGfree_auto_mem();
@@ -334,7 +345,7 @@ ecpg_check_PQresult(PGresult *results, int lineno, PGconn *connection, enum COMP
334345
{
335346
if (results==NULL)
336347
{
337-
ecpg_log("ecpg_check_PQresult on line %d: %s",lineno,PQerrorMessage(connection));
348+
ecpg_log("ecpg_check_PQresult on line %d:no result -%s",lineno,PQerrorMessage(connection));
338349
ecpg_raise_backend(lineno,NULL,connection,compat);
339350
return (false);
340351
}
@@ -357,7 +368,7 @@ ecpg_check_PQresult(PGresult *results, int lineno, PGconn *connection, enum COMP
357368
casePGRES_NONFATAL_ERROR:
358369
casePGRES_FATAL_ERROR:
359370
casePGRES_BAD_RESPONSE:
360-
ecpg_log("ecpg_check_PQresult on line %d: %s",lineno,PQresultErrorMessage(results));
371+
ecpg_log("ecpg_check_PQresult on line %d:bad response -%s",lineno,PQresultErrorMessage(results));
361372
ecpg_raise_backend(lineno,results,connection,compat);
362373
PQclear(results);
363374
return (false);

‎src/interfaces/ecpg/test/expected/compat_informix-test_informix.stderr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
[NO_PID]: sqlca: code: 0, state: 00000
2323
[NO_PID]: ecpg_execute on line 32: using PQexec
2424
[NO_PID]: sqlca: code: 0, state: 00000
25-
[NO_PID]: ecpg_check_PQresult on line 32: ERROR: duplicate key value violates unique constraint "test_pkey"
25+
[NO_PID]: ecpg_check_PQresult on line 32:bad response -ERROR: duplicate key value violates unique constraint "test_pkey"
2626
DETAIL: Key (i)=(7) already exists.
2727
[NO_PID]: sqlca: code: 0, state: 00000
28-
[NO_PID]: raising sqlstate 23505 (sqlcode -239) on line 32: duplicate key value violates unique constraint "test_pkey" on line 32
28+
[NO_PID]: raising sqlstate 23505 (sqlcode -239): duplicate key value violates unique constraint "test_pkey" on line 32
2929
[NO_PID]: sqlca: code: -239, state: 23505
3030
[NO_PID]: ECPGtrans on line 34: action "rollback"; connection "regress1"
3131
[NO_PID]: sqlca: code: 0, state: 00000
@@ -43,9 +43,9 @@ DETAIL: Key (i)=(7) already exists.
4343
[NO_PID]: sqlca: code: 0, state: 00000
4444
[NO_PID]: ecpg_execute on line 40: using PQexec
4545
[NO_PID]: sqlca: code: 0, state: 00000
46-
[NO_PID]: ecpg_check_PQresult on line 40: ERROR: more than one row returned by a subquery used as an expression
46+
[NO_PID]: ecpg_check_PQresult on line 40:bad response -ERROR: more than one row returned by a subquery used as an expression
4747
[NO_PID]: sqlca: code: 0, state: 00000
48-
[NO_PID]: raising sqlstate 21000 (sqlcode -284) on line 40: more than one row returned by a subquery used as an expression on line 40
48+
[NO_PID]: raising sqlstate 21000 (sqlcode -284): more than one row returned by a subquery used as an expression on line 40
4949
[NO_PID]: sqlca: code: -284, state: 21000
5050
[NO_PID]: ECPGtrans on line 41: action "rollback"; connection "regress1"
5151
[NO_PID]: sqlca: code: 0, state: 00000

‎src/interfaces/ecpg/test/expected/preproc-whenever.stderr

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ Warning: At least one column was truncated
3131
[NO_PID]: sqlca: code: 0, state: 00000
3232
[NO_PID]: ecpg_execute on line 39: using PQexec
3333
[NO_PID]: sqlca: code: 0, state: 00000
34-
[NO_PID]: ecpg_check_PQresult on line 39: ERROR: relation "nonexistant" does not exist
34+
[NO_PID]: ecpg_check_PQresult on line 39:bad response -ERROR: relation "nonexistant" does not exist
3535
LINE 1: select * from nonexistant
3636
^
3737
[NO_PID]: sqlca: code: 0, state: 00000
38-
[NO_PID]: raising sqlstate 42P01 (sqlcode -400) on line 39: relation "nonexistant" does not exist on line 39
38+
[NO_PID]: raising sqlstate 42P01 (sqlcode -400): relation "nonexistant" does not exist on line 39
3939
[NO_PID]: sqlca: code: -400, state: 42P01
4040
SQL error: relation "nonexistant" does not exist on line 39
4141
[NO_PID]: ECPGtrans on line 40: action "rollback"; connection "regress1"
@@ -44,11 +44,11 @@ SQL error: relation "nonexistant" does not exist on line 39
4444
[NO_PID]: sqlca: code: 0, state: 00000
4545
[NO_PID]: ecpg_execute on line 43: using PQexec
4646
[NO_PID]: sqlca: code: 0, state: 00000
47-
[NO_PID]: ecpg_check_PQresult on line 43: ERROR: relation "nonexistant" does not exist
47+
[NO_PID]: ecpg_check_PQresult on line 43:bad response -ERROR: relation "nonexistant" does not exist
4848
LINE 1: select * from nonexistant
4949
^
5050
[NO_PID]: sqlca: code: 0, state: 00000
51-
[NO_PID]: raising sqlstate 42P01 (sqlcode -400) on line 43: relation "nonexistant" does not exist on line 43
51+
[NO_PID]: raising sqlstate 42P01 (sqlcode -400): relation "nonexistant" does not exist on line 43
5252
[NO_PID]: sqlca: code: -400, state: 42P01
5353
Error in statement 'select':
5454
SQL error: relation "nonexistant" does not exist on line 43
@@ -58,11 +58,11 @@ SQL error: relation "nonexistant" does not exist on line 43
5858
[NO_PID]: sqlca: code: 0, state: 00000
5959
[NO_PID]: ecpg_execute on line 47: using PQexec
6060
[NO_PID]: sqlca: code: 0, state: 00000
61-
[NO_PID]: ecpg_check_PQresult on line 47: ERROR: relation "nonexistant" does not exist
61+
[NO_PID]: ecpg_check_PQresult on line 47:bad response -ERROR: relation "nonexistant" does not exist
6262
LINE 1: select * from nonexistant
6363
^
6464
[NO_PID]: sqlca: code: 0, state: 00000
65-
[NO_PID]: raising sqlstate 42P01 (sqlcode -400) on line 47: relation "nonexistant" does not exist on line 47
65+
[NO_PID]: raising sqlstate 42P01 (sqlcode -400): relation "nonexistant" does not exist on line 47
6666
[NO_PID]: sqlca: code: -400, state: 42P01
6767
Found another error
6868
SQL error: relation "nonexistant" does not exist on line 47
@@ -72,23 +72,23 @@ SQL error: relation "nonexistant" does not exist on line 47
7272
[NO_PID]: sqlca: code: 0, state: 00000
7373
[NO_PID]: ecpg_execute on line 51: using PQexec
7474
[NO_PID]: sqlca: code: 0, state: 00000
75-
[NO_PID]: ecpg_check_PQresult on line 51: ERROR: relation "nonexistant" does not exist
75+
[NO_PID]: ecpg_check_PQresult on line 51:bad response -ERROR: relation "nonexistant" does not exist
7676
LINE 1: select * from nonexistant
7777
^
7878
[NO_PID]: sqlca: code: 0, state: 00000
79-
[NO_PID]: raising sqlstate 42P01 (sqlcode -400) on line 51: relation "nonexistant" does not exist on line 51
79+
[NO_PID]: raising sqlstate 42P01 (sqlcode -400): relation "nonexistant" does not exist on line 51
8080
[NO_PID]: sqlca: code: -400, state: 42P01
8181
[NO_PID]: ECPGtrans on line 52: action "rollback"; connection "regress1"
8282
[NO_PID]: sqlca: code: 0, state: 00000
8383
[NO_PID]: ecpg_execute on line 55: query: select * from nonexistant; with 0 parameter(s) on connection regress1
8484
[NO_PID]: sqlca: code: 0, state: 00000
8585
[NO_PID]: ecpg_execute on line 55: using PQexec
8686
[NO_PID]: sqlca: code: 0, state: 00000
87-
[NO_PID]: ecpg_check_PQresult on line 55: ERROR: relation "nonexistant" does not exist
87+
[NO_PID]: ecpg_check_PQresult on line 55:bad response -ERROR: relation "nonexistant" does not exist
8888
LINE 1: select * from nonexistant
8989
^
9090
[NO_PID]: sqlca: code: 0, state: 00000
91-
[NO_PID]: raising sqlstate 42P01 (sqlcode -400) on line 55: relation "nonexistant" does not exist on line 55
91+
[NO_PID]: raising sqlstate 42P01 (sqlcode -400): relation "nonexistant" does not exist on line 55
9292
[NO_PID]: sqlca: code: -400, state: 42P01
9393
[NO_PID]: ECPGtrans on line 59: action "rollback"; connection "regress1"
9494
[NO_PID]: sqlca: code: 0, state: 00000

‎src/interfaces/ecpg/test/expected/sql-fetch.stderr

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,9 @@
138138
[NO_PID]: sqlca: code: 0, state: 00000
139139
[NO_PID]: ecpg_execute on line 53: using PQexec
140140
[NO_PID]: sqlca: code: 0, state: 00000
141-
[NO_PID]: ecpg_check_PQresult on line 53: ERROR: cannot drop "my_table" because it is being used by active queries in this session
141+
[NO_PID]: ecpg_check_PQresult on line 53:bad response -ERROR: cannot drop "my_table" because it is being used by active queries in this session
142142
[NO_PID]: sqlca: code: 0, state: 00000
143-
[NO_PID]: raising sqlstate 55006 (sqlcode -400) on line 53: cannot drop "my_table" because it is being used by active queries in this session on line 53
143+
[NO_PID]: raising sqlstate 55006 (sqlcode -400): cannot drop "my_table" because it is being used by active queries in this session on line 53
144144
[NO_PID]: sqlca: code: -400, state: 55006
145145
SQL error: cannot drop "my_table" because it is being used by active queries in this session on line 53
146146
[NO_PID]: ecpg_finish: connection regress1 closed

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp