From 41b810fe325663d84188220f5af911972d4e4c6e Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Sat, 14 Aug 2010 14:20:35 +0000 Subject: [PATCH] Fix \ef and \sf to not fail on functions with nonnull probin. Update comment about them in pg_get_functiondef. --- src/backend/utils/adt/ruleutils.c | 7 ++++--- src/bin/psql/command.c | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 655d3f890c6..df5b08480a7 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.331 2010/08/12 00:40:59 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.332 2010/08/14 14:20:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1622,8 +1622,9 @@ pg_get_serial_sequence(PG_FUNCTION_ARGS) * the specified function. * * Note: if you change the output format of this function, be careful not - * to break psql's rules (in \ef) for identifying the start of the function - * body. + * to break psql's rules (in \ef and \sf) for identifying the start of the + * function body. To wit: the function body starts on a line that begins + * with "AS ", and no preceding line will look like that. */ Datum pg_get_functiondef(PG_FUNCTION_ARGS) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index e902f5e95c0..a482010157b 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2010, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.227 2010/08/14 13:59:49 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.228 2010/08/14 14:20:35 tgl Exp $ */ #include "postgres_fe.h" #include "command.h" @@ -611,17 +611,17 @@ exec_command(const char *cmd, /* * lineno "1" should correspond to the first line of the * function body. We expect that pg_get_functiondef() will - * emit that on a line beginning with "AS $function", and that - * there can be no such line before the real start of the - * function body. Increment lineno by the number of lines - * before that line, so that it becomes relative to the first - * line of the function definition. + * emit that on a line beginning with "AS ", and that there + * can be no such line before the real start of the function + * body. Increment lineno by the number of lines before that + * line, so that it becomes relative to the first line of the + * function definition. */ const char *lines = query_buf->data; while (*lines != '\0') { - if (strncmp(lines, "AS $function", 12) == 0) + if (strncmp(lines, "AS ", 3) == 0) break; lineno++; /* find start of next line */ @@ -1150,9 +1150,9 @@ exec_command(const char *cmd, /* * lineno "1" should correspond to the first line of the * function body. We expect that pg_get_functiondef() will - * emit that on a line beginning with "AS $function", and that - * there can be no such line before the real start of the - * function body. + * emit that on a line beginning with "AS ", and that there + * can be no such line before the real start of the function + * body. * * Note that this loop scribbles on func_buf. */ @@ -1160,7 +1160,7 @@ exec_command(const char *cmd, { char *eol; - if (in_header && strncmp(lines, "AS $function", 12) == 0) + if (in_header && strncmp(lines, "AS ", 3) == 0) in_header = false; /* increment lineno only for body's lines */ if (!in_header) -- GitLab