ALTER DATABASE name [ [ WITH ] option [ ... ] ]
-where option can be:
CONNECTION LIMIT connlimit
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
SET SCHEMA new_schema
-where action is one of:
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
IMMUTABLE | STABLE | VOLATILE
ALTER ROLE name [ [ WITH ] option [ ... ] ]
-where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
ALTER TABLE name
SET SCHEMA new_schema
-where action is one of:
ADD [ COLUMN ] column type [ column_constraint [ ... ] ]
DROP [ COLUMN ] [ IF EXISTS ] column [ RESTRICT | CASCADE ]
ALTER USER name [ [ WITH ] option [ ... ] ]
-where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]
-where transaction_mode is one of:
+
where transaction_mode is one of:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
CREATE DOMAIN name [ AS ] data_type
- [ DEFAULT expression> ]
+ [ DEFAULT expressionreplaceable> ]
[ constraint [ ... ] ]
-where constraint is:
[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL | CHECK (expression) }
CREATE GROUP name [ [ WITH ] option [ ... ] ]
-where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
CREATE ROLE name [ [ WITH ] option [ ... ] ]
-where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( [
- { column_name data_type [ DEFAULT default_expr> ] [ column_constraint [ ... ] ]
+ { column_name data_type [ DEFAULT default_exprreplaceable> ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE parent_table [ { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES } ] ... }
[, ... ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]
-where column_constraint is:
+
where column_constraint is:
[ CONSTRAINT constraint_name ]
{ NOT NULL |
[ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
-and table_constraint is:
+
and table_constraint is:
[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] ) index_parameters |
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
-<replaceable class="PARAMETER">index_parameters in UNIQUE> and PRIMARY KEY> constraints are:
+<phrase>index_parameters in UNIQUE and PRIMARY KEY constraints are:
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace ]
CREATE USER name [ [ WITH ] option [ ... ] ]
-where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
FETCH [ direction { FROM | IN } ] cursorname
-where direction can be empty or one of:
+
where direction can be empty or one of:
NEXT
PRIOR
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
- ON FOREIGN DATA WRAPPER fdwname> [, ...]
+ ON FOREIGN DATA WRAPPER fdwnamereplaceable> [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
- ON FOREIGN SERVER servername> [, ...]
+ ON FOREIGN SERVER servernamereplaceable> [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [ PRIVILEGES ] }
- ON TABLESPACE tablespacename> [, ...]
+ ON TABLESPACE tablespacenamereplaceable> [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT role [, ...] TO rolename [, ...] [ WITH ADMIN OPTION ]
LOCK [ TABLE ] [ ONLY ] name [, ...] [ IN lockmode MODE ] [ NOWAIT ]
-where lockmode is one of:
+
where lockmode is one of:
ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
| SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
-where from_item can be one of:
+
where from_item can be one of:
[ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
-and with_query is:
with_query_name [ ( column_name [, ...] ) ] AS ( select )
-
+
SET TRANSACTION
SET TRANSACTION transaction_mode [, ...]
SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]
-where transaction_mode is one of:
+
where transaction_mode is one of:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
START TRANSACTION [ transaction_mode [, ...] ]
-where transaction_mode is one of:
+
where transaction_mode is one of:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
# Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
-# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.65 2009/08/28 20:26:19 petere Exp $
+# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.66 2009/09/18 05:00:42 petere Exp $
#
#-------------------------------------------------------------------------
OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \
startup.o prompt.o variables.o large_obj.o print.o describe.o \
psqlscan.o tab-complete.o mbprint.o dumputils.o keywords.o kwlookup.o \
+ sql_help.o \
$(WIN32RES)
FLEXFLAGS = -Cfe
kwlookup.c: % : $(top_srcdir)/src/backend/parser/%
rm -f $@ && $(LN_S) $< .
+sql_help.c: sql_help.h ;
sql_help.h: create_help.pl $(wildcard $(REFDOCDIR)/*.sgml)
- $(PERL) $< $(REFDOCDIR) $@
+ $(PERL) $< $(REFDOCDIR) $*
psqlscan.c: psqlscan.l
ifdef FLEX
rm -f psql$(X) $(OBJS) dumputils.c keywords.c kwlookup.c
maintainer-clean: distclean
- rm -f sql_help.h psqlscan.c
+ rm -f sql_help.h sql_help.c psqlscan.c
#
# Copyright (c) 2000-2009, PostgreSQL Global Development Group
#
-# $PostgreSQL: pgsql/src/bin/psql/create_help.pl,v 1.19 2009/01/01 17:23:54 momjian Exp $
+# $PostgreSQL: pgsql/src/bin/psql/create_help.pl,v 1.20 2009/09/18 05:00:42 petere Exp $
#################################################################
#
# enough that this worked, but this here is by no means an SGML
# parser.
#
-# Call: perl create_help.pl docdir sql_help.h
+# Call: perl create_help.pl docdir sql_help
# The name of the header file doesn't matter to this script, but it
# sure does matter to the rest of the source.
#
use strict;
my $docdir = $ARGV[0] or die "$0: missing required argument: docdir\n";
-my $outputfile = $ARGV[1] or die "$0: missing required argument: output file\n";
+my $hfile = $ARGV[1] . '.h' or die "$0: missing required argument: output file\n";
+my $cfile = $ARGV[1] . '.c';
-my $outputfilebasename;
-if ($outputfile =~ m!.*/([^/]+)$!) {
- $outputfilebasename = $1;
+my $hfilebasename;
+if ($hfile =~ m!.*/([^/]+)$!) {
+ $hfilebasename = $1;
}
else {
- $outputfilebasename = $outputfile;
+ $hfilebasename = $hfile;
}
-my $define = $outputfilebasename;
+my $define = $hfilebasename;
$define =~ tr/a-z/A-Z/;
$define =~ s/\W/_/g;
opendir(DIR, $docdir)
or die "$0: could not open documentation source dir '$docdir': $!\n";
-open(OUT, ">$outputfile")
- or die "$0: could not open output file '$outputfile': $!\n";
+open(HFILE, ">$hfile")
+ or die "$0: could not open output file '$hfile': $!\n";
+open(CFILE, ">$cfile")
+ or die "$0: could not open output file '$cfile': $!\n";
-print OUT
+print HFILE
"/*
* *** Do not change this file by hand. It is automatically
* *** generated from the DocBook documentation.
#define N_(x) (x) /* gettext noop */
+#include \"postgres_fe.h\"
+#include \"pqexpbuffer.h\"
+
struct _helpStruct
{
const char *cmd; /* the command name */
const char *help; /* the help associated with it */
- const char *syntax; /* the syntax associated with it */
+ void (*syntaxfunc)(PQExpBuffer); /* function that prints the syntax associated with it */
+ int nl_count; /* number of newlines in syntax (for pager) */
};
+";
+
+print CFILE
+"/*
+ * *** Do not change this file by hand. It is automatically
+ * *** generated from the DocBook documentation.
+ *
+ * generated by
+ * $^X $0 @ARGV
+ *
+ */
+
+#include \"$hfile\"
-static const struct _helpStruct QL_HELP[] = {
";
my $maxlen = 0;
$cmddesc =~ s/\s+/ /g;
$cmddesc =~ s/\"/\\"/g;
- $cmdsynopsis =~ s/<[^>]+>//g;
+ my @params = ();
+
+ my $nl_count = () = $cmdsynopsis =~ /\n/g;
+
+ $cmdsynopsis =~ m!>! and die "$0:$file: null end tag not supported in synopsis\n";
+ $cmdsynopsis =~ s/%/%%/g;
+
+ while ($cmdsynopsis =~ m!<(\w+)[^>]*>(.+?)\1[^>]*>!) {
+ my $match = $2;
+ $match =~ s/<[^>]+>//g;
+ $match =~ s/%%/%/g;
+ push @params, $match;
+ $cmdsynopsis =~ s!<(\w+)[^>]*>.+?\1[^>]*>!%s!;
+ }
$cmdsynopsis =~ s/\r?\n/\\n/g;
$cmdsynopsis =~ s/\"/\\"/g;
foreach my $cmdname (@cmdnames) {
- $entries{$cmdname} = { cmddesc => $cmddesc, cmdsynopsis => $cmdsynopsis };
+ $entries{$cmdname} = { cmddesc => $cmddesc, cmdsynopsis => $cmdsynopsis, params => \@params, nl_count => $nl_count };
$maxlen = ($maxlen >= length $cmdname) ? $maxlen : length $cmdname;
}
}
}
}
-print OUT " { \"$_\",\n N_(\"".$entries{$_}{cmddesc}."\"),\n N_(\"".$entries{$_}{cmdsynopsis}."\") },\n\n" foreach (sort keys %entries);
+foreach (sort keys %entries) {
+ my $prefix = "\t"x5 . ' ';
+ my $id = $_;
+ $id =~ s/ /_/g;
+ my $synopsis = "\"$entries{$_}{cmdsynopsis}\"";
+ $synopsis =~ s/\\n/\\n"\n$prefix"/g;
+ my @args = ("buf",
+ $synopsis,
+ map("_(\"$_\")", @{$entries{$_}{params}}));
+ print HFILE "extern void sql_help_$id(PQExpBuffer buf);\n";
+ print CFILE "void
+sql_help_$id(PQExpBuffer buf)
+{
+\tappendPQExpBuffer(".join(",\n$prefix", @args).");
+}
+
+";
+}
+
+print HFILE "
+
+static const struct _helpStruct QL_HELP[] = {
+";
+foreach (sort keys %entries) {
+ my $id = $_;
+ $id =~ s/ /_/g;
+ print HFILE " { \"$_\",
+ N_(\"$entries{$_}{cmddesc}\"),
+ sql_help_$id,
+ $entries{$_}{nl_count} },
+
+";
+}
-print OUT "
+print HFILE "
{ NULL, NULL, NULL } /* End of list marker */
};
#endif /* $define */
";
-close OUT;
+close CFILE;
+close HFILE;
closedir DIR;
*
* Copyright (c) 2000-2009, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.151 2009/07/24 19:35:44 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.152 2009/09/18 05:00:42 petere Exp $
*/
#include "postgres_fe.h"
size_t len,
wordlen;
int nl_count = 0;
- const char *ch;
/* User gets two chances: exact match, then the first word */
if (pg_strncasecmp(topic, QL_HELP[i].cmd, len) == 0 ||
strcmp(topic, "*") == 0)
{
- nl_count += 5;
- for (ch = QL_HELP[i].syntax; *ch != '\0'; ch++)
- if (*ch == '\n')
- nl_count++;
+ nl_count += 5 + QL_HELP[i].nl_count;
+
/* If we have an exact match, exit. Fixes \h SELECT */
if (pg_strcasecmp(topic, QL_HELP[i].cmd) == 0)
break;
if (pg_strncasecmp(topic, QL_HELP[i].cmd, len) == 0 ||
strcmp(topic, "*") == 0)
{
+ PQExpBufferData buffer;
+
+ initPQExpBuffer(&buffer);
+ QL_HELP[i].syntaxfunc(&buffer);
help_found = true;
fprintf(output, _("Command: %s\n"
"Description: %s\n"
"Syntax:\n%s\n\n"),
QL_HELP[i].cmd,
_(QL_HELP[i].help),
- _(QL_HELP[i].syntax));
+ buffer.data);
/* If we have an exact match, exit. Fixes \h SELECT */
if (pg_strcasecmp(topic, QL_HELP[i].cmd) == 0)
break;
-# $PostgreSQL: pgsql/src/bin/psql/nls.mk,v 1.23 2009/06/26 19:33:50 petere Exp $
+# $PostgreSQL: pgsql/src/bin/psql/nls.mk,v 1.24 2009/09/18 05:00:42 petere Exp $
CATALOG_NAME := psql
AVAIL_LANGUAGES := cs de es fr ja pt_BR sv tr
GETTEXT_FILES := command.c common.c copy.c help.c input.c large_obj.c \
- mainloop.c print.c startup.c describe.c sql_help.h \
+ mainloop.c print.c startup.c describe.c sql_help.h sql_help.c \
../../port/exec.c
GETTEXT_TRIGGERS:= _ N_ psql_error simple_prompt