Hello
2012/3/5 Alvaro Herrera <[email protected]>:
>
> Excerpts from Pavel Stehule's message of dom mar 04 16:33:08 -0300 2012:
>>
>> Hello
>>
>> 2012/3/4 Alvaro Herrera <[email protected]>:
>
>> > CHECK FUNCTION
>> > ---------------------------------------------------------
>> > In function: 'f()'
>> > error:42P01:2:sentencia SQL:no existe la relación «foo»
>> > query:select +
>> > var +
>> > from +
>> > foo
>> > ^
>> > (4 filas)
>> >
>>
>> this should be fixed. I checked expressions, that works (I expect)
>> correctly. Caret helps - (really). Sometimes man is blind :).
>
> Agreed.
>
I don't have your last version, so I am sending just part of
CheckFunctionById function - this fragment ensures a output
or please, send me your last patch and I'll do merge
now result is better
postgres=> create function f() returns int language plpgsql as $$
postgres$> begin select
postgres$> var
postgres$> from
postgres$> foo; end; $$;
CREATE FUNCTION
postgres=> check function f();
CHECK FUNCTION
-----------------------------------------------------------
In function: f()
error:42P01:2:SQL statement:relation "foo" does not exist
query:select
var
from
foo
^
(7 rows)
and some utf8 fce
postgres=> check function fx(int);
CHECK FUNCTION
--------------------------------------------------
In function: fx(integer)
error:42703:3:RETURN:column "ýšý" does not exist
query:SELECT (select žlutý
from jj
/* ýšý */
where /*ýšýšý8*/ ýšý = 10)
^
(7 rows)
postgres=> check function fx(int);
CHECK FUNCTION
-------------------------------------------------
In function: fx(integer)
error:42703:3:RETURN:column "xx" does not exist
query:SELECT (select t.a
from t
/* ýšý */
where /*ýšýšý8*/ xx = 10)
^
(7 rows)
caret is ok
regards
Pavel
> --
> Álvaro Herrera <[email protected]>
> The PostgreSQL Company - Command Prompt, Inc.
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
else
{
resetStringInfo(&sinfo);
appendStringInfo(&sinfo, "In function: %s", funcname);
do_text_output_oneline(tstate, sinfo.data);
for (i = 0; i < SPI_processed; i++)
{
char *query;
resetStringInfo(&sinfo);
appendStringInfo(&sinfo, "%s:%s:%s:%s:%s",
SPI_getvalue(SPI_tuptable->vals[i], SPI_tuptable->tupdesc, 8),
SPI_getvalue(SPI_tuptable->vals[i], SPI_tuptable->tupdesc, 4),
SPI_getvalue(SPI_tuptable->vals[i], SPI_tuptable->tupdesc, 2),
SPI_getvalue(SPI_tuptable->vals[i], SPI_tuptable->tupdesc, 3),
SPI_getvalue(SPI_tuptable->vals[i], SPI_tuptable->tupdesc, 5));
do_text_output_oneline(tstate, sinfo.data);
resetStringInfo(&sinfo);
query = SPI_getvalue(SPI_tuptable->vals[i], SPI_tuptable->tupdesc, 10);
if (query != NULL)
{
bool isnull;
char *query_line; /* pointer to begin of processed line */
int query_line_caret;
int caret;
bool is_first_line = true;
/*
* put any query line to separate output line. And append
* a curet, when is defined and related to processed rows.
*/
caret = SPI_getbinval(SPI_tuptable->vals[i], SPI_tuptable->tupdesc, 9, &isnull);
if (isnull)
caret = -1;
query_line = query;
query_line_caret = caret;
while (*query != '\0')
{
int len;
if (*query == '\n')
{
/* now we found end of line */
*query = '\0';
if (is_first_line)
{
appendStringInfo(&sinfo, "query:%s", query_line);
is_first_line = false;
}
else
appendStringInfo(&sinfo, " %s", query_line);
do_text_output_oneline(tstate, sinfo.data);
resetStringInfo(&sinfo);
if (query_line_caret > 0 && caret == 0)
{
appendStringInfo(&sinfo, " %*s",
query_line_caret, "^");
do_text_output_oneline(tstate, sinfo.data);
resetStringInfo(&sinfo);
query_line_caret = 0;
}
/* store caret offset for next line */
if (caret > 0)
query_line_caret = caret - 1;
/* go to next line */
query_line = query + 1;
}
len = pg_mblen(query);
query += len;
if (caret > 0)
caret--;
}
/* last line output */
if (query_line != NULL)
{
if (is_first_line)
{
appendStringInfo(&sinfo, "query:%s", query_line);
}
else
appendStringInfo(&sinfo, " %s", query_line);
do_text_output_oneline(tstate, sinfo.data);
resetStringInfo(&sinfo);
if (query_line_caret > 0 && caret == 0)
{
appendStringInfo(&sinfo, " %*s",
query_line_caret, "^");
do_text_output_oneline(tstate, sinfo.data);
resetStringInfo(&sinfo);
}
}
}
}
}
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers