diff options
author | Michael Meskes | 2008-02-14 14:54:48 +0000 |
---|---|---|
committer | Michael Meskes | 2008-02-14 14:54:48 +0000 |
commit | 423abf4d6aef113501c880edd3e41975860f2a31 (patch) | |
tree | b50b481e21bec31f3d8ffb37449f11c62f2ba9f3 | |
parent | a3a648ecc9ce3967635a969ddf0d21f0c6241261 (diff) |
- EXECUTE can return NOT FOUND so it should be checked here too.
- Changed regression test accordingly.
-rw-r--r-- | src/interfaces/ecpg/ChangeLog | 2 | ||||
-rw-r--r-- | src/interfaces/ecpg/preproc/preproc.y | 4 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/expected/sql-execute.c | 65 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/expected/sql-execute.stderr | 28 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/expected/sql-execute.stdout | 1 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/expected/thread-prep.c | 3 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/sql/execute.pgc | 19 |
7 files changed, 110 insertions, 12 deletions
diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index 9dc77647ae..663e044184 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -2310,4 +2310,6 @@ Wed, 06 Feb 2008 09:04:48 +0100 Thu, 14 Feb 2008 13:11:34 +0100 - Added SQLSTATE macro closing bug #3961. + - EXECUTE can return NOT FOUND so it should be checked here too. + - Changed regression test accordingly. diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index 9bcf994480..6dd32b930b 100644 --- a/src/interfaces/ecpg/preproc/preproc.y +++ b/src/interfaces/ecpg/preproc/preproc.y @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.359 2008/01/15 10:31:47 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.360 2008/02/14 14:54:48 meskes Exp $ */ /* Copyright comment */ %{ @@ -807,7 +807,7 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, ECPGst_normal); } | DropUserStmt { output_statement($1, 0, ECPGst_normal); } | DropdbStmt { output_statement($1, 0, ECPGst_normal); } | ExplainStmt { output_statement($1, 0, ECPGst_normal); } - | ExecuteStmt { output_statement($1, 0, ECPGst_execute); } + | ExecuteStmt { output_statement($1, 1, ECPGst_execute); } | FetchStmt { output_statement($1, 1, ECPGst_normal); } | GrantStmt { output_statement($1, 0, ECPGst_normal); } | GrantRoleStmt { output_statement($1, 0, ECPGst_normal); } diff --git a/src/interfaces/ecpg/test/expected/sql-execute.c b/src/interfaces/ecpg/test/expected/sql-execute.c index 7aa926ffa6..eecdf6e56e 100644 --- a/src/interfaces/ecpg/test/expected/sql-execute.c +++ b/src/interfaces/ecpg/test/expected/sql-execute.c @@ -254,23 +254,78 @@ if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();} #line 88 "execute.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test ", ECPGt_EOIT, ECPGt_EORT); + { ECPGdeallocate(__LINE__, 0, NULL, "f"); #line 89 "execute.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 89 "execute.pgc" + + sprintf (command, "select * from test where amount = $1"); + + { ECPGprepare(__LINE__, NULL, 0, "f", command); +#line 93 "execute.pgc" + +if (sqlca.sqlcode < 0) sqlprint();} +#line 93 "execute.pgc" + + { ECPGdo(__LINE__, 0, 1, NULL, 0, 1, "f", + ECPGt_const,"2",(long)1,(long)1,strlen("2"), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_char,(name),(long)8,(long)8,(8)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,(amount),(long)1,(long)8,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(letter),(long)1,(long)8,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); +#line 94 "execute.pgc" + +if (sqlca.sqlcode < 0) sqlprint();} +#line 94 "execute.pgc" + + + for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) + { + /* exec sql begin declare section */ + + + +#line 99 "execute.pgc" + char n [ 8 ] , l = letter [ i ] [ 0 ] ; + +#line 100 "execute.pgc" + int a = amount [ i ] ; +/* exec sql end declare section */ +#line 101 "execute.pgc" + + + strncpy(n, name[i], 8); + printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l); + } + + { ECPGdeallocate(__LINE__, 0, NULL, "f"); +#line 107 "execute.pgc" + +if (sqlca.sqlcode < 0) sqlprint();} +#line 107 "execute.pgc" + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test ", ECPGt_EOIT, ECPGt_EORT); +#line 108 "execute.pgc" + +if (sqlca.sqlcode < 0) sqlprint();} +#line 108 "execute.pgc" + { ECPGtrans(__LINE__, NULL, "commit"); -#line 90 "execute.pgc" +#line 109 "execute.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 90 "execute.pgc" +#line 109 "execute.pgc" { ECPGdisconnect(__LINE__, "CURRENT"); -#line 91 "execute.pgc" +#line 110 "execute.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 91 "execute.pgc" +#line 110 "execute.pgc" return (0); diff --git a/src/interfaces/ecpg/test/expected/sql-execute.stderr b/src/interfaces/ecpg/test/expected/sql-execute.stderr index d0e7c6a0c9..e1ec26f0c8 100644 --- a/src/interfaces/ecpg/test/expected/sql-execute.stderr +++ b/src/interfaces/ecpg/test/expected/sql-execute.stderr @@ -138,15 +138,33 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute line 88 Ok: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute line 89: QUERY: drop table test with 0 parameter on connection main +[NO_PID]: ECPGdeallocate line 89: NAME: f [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute line 89: using PQexec +[NO_PID]: ECPGprepare line 93: NAME: f QUERY: select * from test where amount = $1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute line 89 Ok: DROP TABLE +[NO_PID]: ecpg_execute line 94: QUERY: select * from test where amount = $1 with 1 parameter on connection main [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans line 90 action = commit connection = main +[NO_PID]: ecpg_execute line 94: using PQexecPrepared for select * from test where amount = $1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGdeallocate line 0: NAME: f +[NO_PID]: free_params line 94: parameter 1 = 2 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute line 94: Correctly got 1 tuples with 3 fields +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data line 94: RESULT: db: 'r1' offset: -1 array: Yes +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data line 94: RESULT: 2 offset: -1 array: Yes +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data line 94: RESULT: t offset: -1 array: Yes +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ECPGdeallocate line 107: NAME: f +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute line 108: QUERY: drop table test with 0 parameter on connection main +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute line 108: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute line 108 Ok: DROP TABLE +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ECPGtrans line 109 action = commit connection = main [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGdeallocate line 0: NAME: i [NO_PID]: sqlca: code: 0, state: 00000 diff --git a/src/interfaces/ecpg/test/expected/sql-execute.stdout b/src/interfaces/ecpg/test/expected/sql-execute.stdout index 1f4d4f25d0..5f9295ae4c 100644 --- a/src/interfaces/ecpg/test/expected/sql-execute.stdout +++ b/src/interfaces/ecpg/test/expected/sql-execute.stdout @@ -9,3 +9,4 @@ name[5]=db: 'r1' amount[5]=102 letter[5]=t name[6]=db: 'r1' amount[6]=111 letter[6]=f name[7]=db: 'r1' amount[7]=112 letter[7]=t name[0]=db: 'r1' amount[0]=1 letter[0]=f +name[0]=db: 'r1' amount[0]=2 letter[0]=t diff --git a/src/interfaces/ecpg/test/expected/thread-prep.c b/src/interfaces/ecpg/test/expected/thread-prep.c index 1afea9a349..850ae7571d 100644 --- a/src/interfaces/ecpg/test/expected/thread-prep.c +++ b/src/interfaces/ecpg/test/expected/thread-prep.c @@ -173,6 +173,9 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); #line 52 "prep.pgc" +if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); +#line 52 "prep.pgc" + if (sqlca.sqlcode < 0) sqlprint();} #line 52 "prep.pgc" diff --git a/src/interfaces/ecpg/test/sql/execute.pgc b/src/interfaces/ecpg/test/sql/execute.pgc index 486a70db08..b8364c78bb 100644 --- a/src/interfaces/ecpg/test/sql/execute.pgc +++ b/src/interfaces/ecpg/test/sql/execute.pgc @@ -86,6 +86,25 @@ exec sql end declare section; } exec sql close CUR2; + exec sql deallocate f; + + sprintf (command, "select * from test where amount = $1"); + + exec sql prepare f from :command; + exec sql execute f using 2 into :name, :amount, :letter; + + for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) + { + exec sql begin declare section; + char n[8], l = letter[i][0]; + int a = amount[i]; + exec sql end declare section; + + strncpy(n, name[i], 8); + printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l); + } + + exec sql deallocate f; exec sql drop table test; exec sql commit; exec sql disconnect; |