diff --git a/src/bin/psql/create_help.pl b/src/bin/psql/create_help.pl index 96cf3d37ef0..d8e6671e689 100644 --- a/src/bin/psql/create_help.pl +++ b/src/bin/psql/create_help.pl @@ -64,6 +64,7 @@ struct _helpStruct { const char *cmd; /* the command name */ const char *help; /* the help associated with it */ + const char *docbook_id; /* DocBook XML id (for generating URL) */ void (*syntaxfunc)(PQExpBuffer); /* function that prints the syntax associated with it */ int nl_count; /* number of newlines in syntax (for pager) */ }; @@ -92,7 +93,7 @@ my %entries; foreach my $file (sort readdir DIR) { - my (@cmdnames, $cmddesc, $cmdsynopsis); + my ($cmdid, @cmdnames, $cmddesc, $cmdsynopsis); $file =~ /\.sgml$/ or next; open(my $fh, '<', "$docdir/$file") or next; @@ -104,6 +105,9 @@ foreach my $file (sort readdir DIR) m!\s*SQL - Language Statements\s*!i or next; + $filecontent =~ m!! + and $cmdid = $1; + # Collect multiple refnames LOOP: { @@ -116,7 +120,7 @@ foreach my $file (sort readdir DIR) $filecontent =~ m!\s*(.+?)\s*!is and $cmdsynopsis = $1; - if (@cmdnames && $cmddesc && $cmdsynopsis) + if (@cmdnames && $cmddesc && $cmdid && $cmdsynopsis) { s/\"/\\"/g foreach @cmdnames; @@ -144,6 +148,7 @@ foreach my $file (sort readdir DIR) foreach my $cmdname (@cmdnames) { $entries{$cmdname} = { + cmdid => $cmdid, cmddesc => $cmddesc, cmdsynopsis => $cmdsynopsis, params => \@params, @@ -186,6 +191,7 @@ foreach (sort keys %entries) $id =~ s/ /_/g; print $cfile_handle " { \"$_\", N_(\"$entries{$_}{cmddesc}\"), + \"$entries{$_}{cmdid}\", sql_help_$id, $entries{$_}{nl_count} }, diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 6bac9e47fd7..6fc4ebab1e8 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -623,16 +623,23 @@ helpSQL(const char *topic, unsigned short int pager) strcmp(topic, "*") == 0) { PQExpBufferData buffer; + char *url; initPQExpBuffer(&buffer); QL_HELP[i].syntaxfunc(&buffer); help_found = true; + url = psprintf("https://www.postgresql.org/docs/%s/%s.html", + strstr(PG_VERSION, "devel") ? "devel" : PG_MAJORVERSION, + QL_HELP[i].docbook_id); fprintf(output, _("Command: %s\n" "Description: %s\n" - "Syntax:\n%s\n\n"), + "Syntax:\n%s\n\n" + "URL: %s\n\n"), QL_HELP[i].cmd, _(QL_HELP[i].help), - buffer.data); + buffer.data, + url); + free(url); /* If we have an exact match, exit. Fixes \h SELECT */ if (pg_strcasecmp(topic, QL_HELP[i].cmd) == 0) break;