|
3 | 3 | * procedural language
|
4 | 4 | *
|
5 | 5 | * IDENTIFICATION
|
6 |
| - * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.114 2004/08/02 17:03:45 tgl Exp $ |
| 6 | + * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.115 2004/08/13 18:47:56 tgl Exp $ |
7 | 7 | *
|
8 | 8 | * This software is copyrighted by Jan Wieck - Hamburg.
|
9 | 9 | *
|
@@ -2090,8 +2090,29 @@ exec_prepare_plan(PLpgSQL_execstate * estate,
|
2090 | 2090 | */
|
2091 | 2091 | plan=SPI_prepare(expr->query,expr->nparams,argtypes);
|
2092 | 2092 | if (plan==NULL)
|
2093 |
| -elog(ERROR,"SPI_prepare failed for \"%s\": %s", |
2094 |
| -expr->query,SPI_result_code_string(SPI_result)); |
| 2093 | +{ |
| 2094 | +/* Some SPI errors deserve specific error messages */ |
| 2095 | +switch (SPI_result) |
| 2096 | +{ |
| 2097 | +caseSPI_ERROR_COPY: |
| 2098 | +ereport(ERROR, |
| 2099 | +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 2100 | +errmsg("cannot COPY to/from client in PL/pgSQL"))); |
| 2101 | +caseSPI_ERROR_CURSOR: |
| 2102 | +ereport(ERROR, |
| 2103 | +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 2104 | +errmsg("cannot manipulate cursors directly in PL/pgSQL"), |
| 2105 | +errhint("Use PL/pgSQL's cursor features instead."))); |
| 2106 | +caseSPI_ERROR_TRANSACTION: |
| 2107 | +ereport(ERROR, |
| 2108 | +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 2109 | +errmsg("cannot begin/end transactions in PL/pgSQL"), |
| 2110 | +errhint("Use a BEGIN block with an EXCEPTION clause instead."))); |
| 2111 | +default: |
| 2112 | +elog(ERROR,"SPI_prepare failed for \"%s\": %s", |
| 2113 | +expr->query,SPI_result_code_string(SPI_result)); |
| 2114 | +} |
| 2115 | +} |
2095 | 2116 | expr->plan=SPI_saveplan(plan);
|
2096 | 2117 | spi_plan= (_SPI_plan*)expr->plan;
|
2097 | 2118 | expr->plan_argtypes=spi_plan->argtypes;
|
@@ -2272,6 +2293,22 @@ exec_stmt_dynexecute(PLpgSQL_execstate * estate,
|
2272 | 2293 | break;
|
2273 | 2294 | }
|
2274 | 2295 |
|
| 2296 | +/* Some SPI errors deserve specific error messages */ |
| 2297 | +caseSPI_ERROR_COPY: |
| 2298 | +ereport(ERROR, |
| 2299 | +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 2300 | +errmsg("cannot COPY to/from client in PL/pgSQL"))); |
| 2301 | +caseSPI_ERROR_CURSOR: |
| 2302 | +ereport(ERROR, |
| 2303 | +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 2304 | +errmsg("cannot manipulate cursors directly in PL/pgSQL"), |
| 2305 | +errhint("Use PL/pgSQL's cursor features instead."))); |
| 2306 | +caseSPI_ERROR_TRANSACTION: |
| 2307 | +ereport(ERROR, |
| 2308 | +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 2309 | +errmsg("cannot begin/end transactions in PL/pgSQL"), |
| 2310 | +errhint("Use a BEGIN block with an EXCEPTION clause instead."))); |
| 2311 | + |
2275 | 2312 | default:
|
2276 | 2313 | elog(ERROR,"SPI_exec failed executing query \"%s\": %s",
|
2277 | 2314 | querystr,SPI_result_code_string(exec_res));
|
|