Below is the list of changes that have just been committed into a local
mysqldoc repository of paul. When paul does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://www.mysql.com/doc/I/n/Installing_source_tree.html
ChangeSet
1.2632 05/05/06 16:41:36 paul@stripped +1 -0
manual.texi:
Some minor clarifications.
Miscellaneous crud cleanup.
Docs/manual.texi
1.2810 05/05/06 16:41:05 paul@stripped +109 -99
Some minor clarifications.
Miscellaneous crud cleanup.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: paul
# Host: frost.snake.net
# Root: /Volumes/frost2/MySQL/bk/mysqldoc
--- 1.2809/Docs/manual.texi 2005-05-06 04:44:00 -05:00
+++ 1.2810/Docs/manual.texi 2005-05-06 16:41:05 -05:00
@@ -1381,9 +1381,9 @@
@code{UNIQUE} index.
@xref{INSERT, , @code{INSERT}}.
@item
-A new aggregate function, @code{GROUP_CONCAT()}
-adds the extremely useful capability of concatenating column values from
-grouped rows into a single result string.
+A new aggregate function, @code{GROUP_CONCAT()}, adds the extremely useful
+capability of concatenating column values from grouped rows into a single
+result string.
@xref{Group by functions and modifiers}.
@end itemize
@@ -4921,7 +4921,7 @@
* Windows using installer:: Installing MySQL with the Automated Installer
* Windows install wizard:: Using the MySQL Installation Wizard
* Windows config wizard:: Using the Configuration Wizard
-* Windows install archive:: Installing MySQL from a noinstall Zip Archive
+* Windows install archive:: Installing MySQL from a Noinstall Zip Archive
* Windows extract archive:: Extracting the Install Archive
* Windows create option file:: Creating an Option File
* Windows select server:: Selecting a MySQL Server type
@@ -4995,10 +4995,10 @@
@itemize @bullet
@item
@strong{The Essentials Package}: This package has a filename similar to
-@file{mysql-essential-4.1.9-win32.msi} and contains the minimum files needed
-to install MySQL on Windows, including the Configuration Wizard. This package
-does not include optional components such as the embedded server and benchmark
-suite.
+@file{mysql-essential-4.1.9-win32.msi} and contains the minimum set of files
+needed to install MySQL on Windows, including the Configuration Wizard. This
+package does not include optional components such as the embedded server and
+benchmark suite.
@item
@strong{The Complete Package}: This package has a filename similar to
@@ -5840,7 +5840,7 @@
@file{c:\Windows} directory.
@node Windows install archive, Windows extract archive, Windows config wizard, Windows
installation
-@subsection Installing MySQL from a noinstall Zip Archive
+@subsection Installing MySQL from a Noinstall Zip Archive
@c This is a new section, the next few sections will once again be subsections.
@@ -17892,15 +17892,15 @@
@multitable @columnfractions .30 .70
@item @strong{Filename} @tab @strong{Purpose}
-@item @code{@var{WINDIR}\my.ini} @tab Global options
-@item @code{C:\my.cnf} @tab Global options
-@item @code{@var{INSTALLDIR}\my.ini} @tab Global Options
+@item @file{@var{WINDIR}\my.ini} @tab Global options
+@item @file{C:\my.cnf} @tab Global options
+@item @file{@var{INSTALLDIR}\my.ini} @tab Global Options
@item @code{defaults-extra-file} @tab The file specified with
@code{--defaults-extra-file=@var{path}}, if any
@end multitable
@var{WINDIR} represents the location of your Windows directory. This is
commonly @file{C:\Windows} or @file{C:\WinNT}. You can determine its
-exact location from the value of the @code{WINDIR} environment variable
+exact location from the value of the @file{WINDIR} environment variable
using the following command:
@example
@@ -17916,21 +17916,21 @@
@tindex .my.cnf file
@multitable @columnfractions .30 .70
@item @strong{Filename} @tab @strong{Purpose}
-@item @code{/etc/my.cnf} @tab Global options
-@item @code{@var{$MYSQL_HOME}/my.cnf} @tab Server-specific options
+@item @file{/etc/my.cnf} @tab Global options
+@item @file{@code{$MYSQL_HOME}/my.cnf} @tab Server-specific options
@item @code{defaults-extra-file} @tab The file specified with
@code{--defaults-extra-file=@var{path}}, if any
-@item @code{~/.my.cnf} @tab User-specific options
+@item @file{~/.my.cnf} @tab User-specific options
@end multitable
-@var{MYSQL_HOME} is an environment variable containing the path to the
+@code{MYSQL_HOME} is an environment variable containing the path to the
directory in which the server-specific @code{my.cnf} file resides. This
used to be @var{DATADIR} prior to MySQL version 5.0.3.
-If @var{MYSQL_HOME} is not set and there is a @code{my.cnf} file in
+If @code{MYSQL_HOME} is not set and there is a @code{my.cnf} file in
@var{DATADIR} and there is no @code{my.cnf} file in @var{BASEDIR},
-@code{mysqld_safe} sets @var{MYSQL_HOME} to @var{DATADIR}. Otherwise, if
-@var{MYSQL_HOME} is not set and there is no @code{my.cnf} in @var{DATADIR},
-then @code{mysqld_safe} sets @var{MYSQL_HOME} to @var{BASEDIR}.
+@code{mysqld_safe} sets @code{MYSQL_HOME} to @var{DATADIR}. Otherwise, if
+@code{MYSQL_HOME} is not set and there is no @file{my.cnf} in @var{DATADIR},
+then @code{mysqld_safe} sets @code{MYSQL_HOME} to @var{BASEDIR}.
Typically this is @file{/usr/local/mysql/data} for a binary installation or
@file{/usr/local/var} for a source installation. Note that this is the data
@@ -20180,7 +20180,7 @@
@code{root}), @command{mysqld} uses only the first
@code{--user} option specified and produces a warning if there are multiple
@code{--user} options. Options in @file{/etc/my.cnf} and
-@file{$MYSQL_HOME/my.cnf} are processed before
+@file{@code{$MYSQL_HOME}/my.cnf} are processed before
command-line options, so it is recommended that you
put a @code{--user} option in @file{/etc/my.cnf} and specify a value other than
@code{root}. The option in @file{/etc/my.cnf} is found before any other
@@ -22897,7 +22897,7 @@
@item Qcache_not_cached
The number of non-cached queries
-(not cachable, or due to @code{query_cache_type}).
+(not cachable, or not cached due to the @code{query_cache_type} setting).
@item Qcache_queries_in_cache
The number of queries registered in the cache.
@@ -24079,7 +24079,7 @@
@code{REPLICATION CLIENT}, @code{REPLICATION SLAVE}, @code{SHOW DATABASES},
and @code{SUPER} privileges were added in MySQL 4.0.2. (@code{EXECUTE} is
not operational until MySQL 5.0.3.) @code{CREATE VIEW} and @code{SHOW VIEW}
-were added in MySQL 5.0.1. @code{CREATE USER}, @code{CREATE ROUTINE} and
+were added in MySQL 5.0.1. @code{CREATE USER}, @code{CREATE ROUTINE}, and
@code{ALTER ROUTINE} were added in MySQL 5.0.3. To use these privileges when
upgrading from an earlier version of MySQL that does not have them, you must
upgrade your grant tables. @xref{Upgrading-grant-tables}.
@@ -30565,10 +30565,10 @@
the results from the query cache rather than parsing and executing the
query again.
-The query cache is extremely useful in an environment where (some)
-tables don't change very often and you have a lot of identical queries.
-This is a typical situation for many Web servers that generate a lot of
-dynamic pages based on database content.
+The query cache is extremely useful in an environment where you have tables
+that don't change very often and for which the server receives a lot of
+identical queries. This is a typical situation for many Web servers that
+generate a lot of dynamic pages based on database content.
@strong{Note}: The query cache does not return stale data. When tables
are modified, any relevant entries in the query cache are flushed.
@@ -30631,6 +30631,10 @@
versions, or different default character sets are considered different
queries and are cached separately.
+Before a query is fetched from the query cache, MySQL checks that
+the user has @code{SELECT} privilege for all the involved databases and
+tables. If this is not the case, the cached result is not used.
+
If a query result is returned from query cache, the server increments the
@code{Qcache_hits} status variable, not @code{Com_select}.
@xref{Query Cache Status and Maintenance}.
@@ -30687,10 +30691,10 @@
@itemize @bullet
@item
-It contains user-defined functions (UDFs).
+It refers to user-defined functions (UDFs).
@item
-It contains user variables.
+It refers to user variables.
@item
It refers to the tables in the @code{mysql} system database.
@@ -30719,19 +30723,13 @@
@item
The user has a column-level privilege for any of the involved tables.
-@item
-Before a query is fetched from the query cache, MySQL checks that
-the user has @code{SELECT} privilege for all the involved databases and
-tables. If this is not the case, the cached result is not used.
-
@end itemize
@node Query Cache in SELECT, Query Cache Configuration, Query Cache How, Query Cache
@subsection Query Cache @code{SELECT} Options
-There are two query cache-related options that may be
-specified in a @code{SELECT} statement:
+Two query cache-related options may be specified in @code{SELECT} statements:
@findex SQL_CACHE
@findex SQL_NO_CACHE
@@ -30773,7 +30771,7 @@
Several other system variables control query cache operation.
These can be set in an option file or on the command line
when starting @command{mysqld}.
-The query cache-related system variables all have names that begin with
+The query cache system variables all have names that begin with
@code{query_cache_}. They are described briefly in @ref{Server system
variables}, with additional configuration information given here.
@@ -30781,8 +30779,9 @@
variable. Setting it to 0 disables the query cache. The default cache size
is 0; that is, the query cache is disabled.
-If the query cache is enabled, the @code{query_cache_type} variable
-influences how it works. This variable can be set to the following values:
+If the query cache size is greater than 0, the @code{query_cache_type}
+variable influences how it works. This variable can be set to the following
+values:
@itemize @bullet
@item
@@ -36584,9 +36583,9 @@
page, row, or column locking) for all storage engines except @code{InnoDB}
and @code{BDB}.
-For @code{InnoDB} and @code{BDB} tables, MySQL only uses table locking if
+For @code{InnoDB} and @code{BDB} tables, MySQL uses only table locking if
you explicitly lock the table with @code{LOCK TABLES}. For these table
-types, we recommend you to not use @code{LOCK TABLES} at all, because
+types, we recommend that you not use @code{LOCK TABLES} at all, because
@code{InnoDB} uses automatic row-level locking and @code{BDB} uses
page-level locking to ensure transaction isolation.
@@ -60145,8 +60144,8 @@
@item @code{SET AUTOCOMMIT=1} @tab @code{START TRANSACTION} @tab @code{TRUNCATE TABLE}
@end multitable
-@code{UNLOCK TABLES} also ends a transaction if any tables currently are
-locked. Prior to MySQL 4.0.13, @code{CREATE TABLE} ends a transaction if
+@code{UNLOCK TABLES} also commits a transaction if any tables currently are
+locked. Prior to MySQL 4.0.13, @code{CREATE TABLE} commits a transaction if
the binary update log is enabled.
Transactions cannot be nested. This is a consequence of the implicit
@@ -60230,17 +60229,17 @@
implicitly performs an @code{UNLOCK TABLES}.
@item
-The correct way to use @code{LOCK TABLES} with transactional
-tables, like InnoDB, is to set @code{AUTOCOMMIT = 0} and not to call
-@code{UNLOCK TABLES} until you commit the transaction explicitly.
-When you call @code{LOCK TABLES}, InnoDB internally takes its own table
-lock, and MySQL takes its own table lock. InnoDB releases its table lock at
-the next commit, but for MySQL to release its table lock, you have to call
+The correct way to use @code{LOCK TABLES} with transactional tables, like
+@code{InnoDB}, is to set @code{AUTOCOMMIT = 0} and not to call @code{UNLOCK
+TABLES} until you commit the transaction explicitly. When you call
+@code{LOCK TABLES}, @code{InnoDB} internally takes its own table lock, and
+MySQL takes its own table lock. @code{InnoDB} releases its table lock at the
+next commit, but for MySQL to release its table lock, you have to call
@code{UNLOCK TABLES}. You should not have @code{AUTOCOMMIT = 1}, because
-then InnoDB releases its table lock immediately after the call of
-@code{LOCK TABLES}, and deadlocks can very easily happen.
-Starting from 4.1.9, we do not acquire the InnoDB table lock at all
-if @code{AUTOCOMMIT=1}. That helps old applications to avoid unnecessary
+then @code{InnoDB} releases its table lock immediately after the call of
+@code{LOCK TABLES}, and deadlocks can very easily happen. Starting from
+4.1.9, we do not acquire the @code{InnoDB} table lock at all if
+@code{AUTOCOMMIT=1}. That helps old applications to avoid unnecessary
deadlocks.
@item
@@ -60258,27 +60257,27 @@
or to get more speed when updating tables. This is explained in more
detail later.
-If a thread obtains a @code{READ} lock on a table, that thread (and all other
-threads) can only read from the table. If a thread obtains a @code{WRITE}
-lock on a table, only the thread holding the lock can
-write to the table. Other threads are blocked from doing so until the
-lock has been released.
+If a thread obtains a @code{READ} lock on a table, that thread (and all
+other threads) can only read from the table. If a thread obtains a
+@code{WRITE} lock on a table, only the thread holding the lock can write to
+the table. Other threads are blocked from doing so until the lock has been
+released.
The difference between @code{READ LOCAL} and @code{READ} is that @code{READ
LOCAL} allows non-conflicting @code{INSERT} statements (concurrent inserts)
to execute while the lock is held. However, this can't be used if you are
going to manipulate the database files outside MySQL while you hold the
-lock. For InnoDB, @code{READ LOCAL} essentially does nothing: it does
-not lock the table at all. The use of @code{READ LOCAL} for InnoDB
-tables is deprecated, because for InnoDB, a plain consistent read
+lock. For @code{InnoDB} tables, @code{READ LOCAL} essentially does nothing:
+It does not lock the table at all. For @code{InnoDB} tables, the use of
+@code{READ LOCAL} is deprecated because a plain consistent-read
@code{SELECT} does the same thing, and no locks are needed.
-When you use @code{LOCK TABLES}, you must lock all tables that you are going to
-use in your queries. While the locks obtained with a @code{LOCK TABLES}
-statement are in effect, you cannot access any tables that were not locked by
-the statement. Also, you cannot use a locked table multiple times in one query
-- use aliases for that. Note that in that case you must get a lock for each
-alias separately.
+When you use @code{LOCK TABLES}, you must lock all tables that you are going
+to use in your queries. While the locks obtained with a @code{LOCK TABLES}
+statement are in effect, you cannot access any tables that were not locked
+by the statement. Also, you cannot use a locked table multiple times in one
+query --- use aliases for that. Note that in that case, you must get a lock
+for each alias separately.
@example
mysql> LOCK TABLE t WRITE, t AS t1 WRITE;
@@ -60313,9 +60312,9 @@
@code{WRITE} lock, subsequent @code{READ} lock requests wait until the
@code{WRITE} thread has gotten the lock and released it. You can use
@code{LOW_PRIORITY WRITE} locks to allow other threads to obtain @code{READ}
-locks while the thread is waiting for the @code{WRITE} lock. You should
-use @code{LOW_PRIORITY WRITE} locks only if you are sure that there is
-eventually a time when no threads have a @code{READ} lock.
+locks while the thread is waiting for the @code{WRITE} lock. You should use
+@code{LOW_PRIORITY WRITE} locks only if you are sure that eventually there
+will be a time when no threads have a @code{READ} lock.
@code{LOCK TABLES} works as follows:
@@ -60408,7 +60407,7 @@
Veritas that can take snapshots in time.
@strong{Note}: If you use @code{ALTER TABLE} on a locked table, it may become
-unlocked. @xref{ALTER TABLE problems}.
+unlocked. @xref{ALTER TABLE problems, , @code{ALTER TABLE} problems}.
@node SET TRANSACTION, , LOCK TABLES, Transactional Commands
@subsection @code{SET TRANSACTION} Syntax
@@ -60495,8 +60494,8 @@
@c description_for_help_topic CREATE USER
The @code{CREATE USER} statement creates new MySQL accounts. To use it, you
-must have the global @code{CREATE USER} privilege or @code{INSERT}
-privilege on @code{mysql} database.
+must have the global @code{CREATE USER} privilege or the @code{INSERT}
+privilege for the @code{mysql} database.
For each account, @code{CREATE USER} creates a new record in the
@code{mysql.user} table that has no privileges. An error occurs if the
account already exists.
@@ -60532,8 +60531,8 @@
The @code{DROP USER} statement deletes one or more MySQL accounts.
To use it, you
-must have the global @code{CREATE USER} privilege or @code{DELETE}
-privilege on @code{mysql} database.
+must have the global @code{CREATE USER} privilege or the @code{DELETE}
+privilege for the @code{mysql} database.
Each account is named using the same format as for @code{GRANT}
or @code{REVOKE}; for example, @code{'jeffrey'@@'localhost'}. The user and
host parts of the account name correspond to the @code{User} and @code{Host}
@@ -60635,6 +60634,7 @@
@end example
@c description_for_help_topic GRANT ALL BY ALTER IDENTIFIED REQUIRE PASSWORD GRANT
REVOKE ISSUER CIPHER WITH SUBJECT OPTION MAX_QUERIES_PER_HOUR MAX_UPDATES_PER_HOUR
MAX_CONNECTIONS_PER_HOUR MAX_USER_CONNECTIONS CLIENT EXECUTE FILE SSL X509 SECURITY USAGE
SUPER NONE PROCESS PRIVILEGES REFERENCES RELOAD REPLICATION SHUTDOWN
+
The @code{GRANT} and @code{REVOKE} statements allow system administrators to
create MySQL user accounts and to grant rights to and revoke them from
accounts. @code{GRANT} and @code{REVOKE} are implemented in MySQL 3.22.11
@@ -60688,6 +60688,10 @@
@end table
@c end_description_for_help_topic
+To use @code{GRANT} or @code{REVOKE}, you must have the @code{GRANT OPTION}
+privilege, and you must have the privileges that you are granting or
+revoking.
+
To make it easy to revoke all privileges, MySQL 4.1.2 has added the
following syntax, which drops all global, database-, table-, and column-level
privileges for the named users:
@@ -60696,8 +60700,8 @@
REVOKE ALL PRIVILEGES, GRANT OPTION FROM @var{user} [, @var{user}] ...
@end example
-To use it, you must have the global @code{CREATE USER} privilege or
-@code{UPDATE} privilege on @code{mysql} database.
+To use this @code{REVOKE} syntax, you must have the global @code{CREATE
+USER} privilege or the @code{UPDATE} privilege for the @code{mysql} database.
Before MySQL 4.1.2, all privileges cannot be dropped at once.
Two statements are necessary:
@@ -60751,10 +60755,11 @@
@code{REPLICATION CLIENT}, @code{REPLICATION SLAVE}, @code{SHOW DATABASES},
and @code{SUPER} privileges were added in MySQL 4.0.2. (@code{EXECUTE} is
not operational until MySQL 5.0.3.) @code{CREATE VIEW} and @code{SHOW VIEW}
-were added in MySQL 5.0.1. @code{CREATE ROUTINE} and @code{ALTER ROUTINE}
-were added in MySQL 5.0.3. To use these privileges when upgrading from an
-earlier version of MySQL that does not have them, , you must upgrade your
-grant tables. @xref{Upgrading-grant-tables}.
+were added in MySQL 5.0.1. @code{CREATE USER}, @code{CREATE ROUTINE}, and
+@code{ALTER ROUTINE} were added in MySQL 5.0.3. To use these privileges
+when upgrading from an earlier version of MySQL that does not have them, ,
+you must upgrade your grant tables.
+@xref{Upgrading-grant-tables}.
The @code{REFERENCES} privilege currently is unused.
@@ -60932,7 +60937,8 @@
the hashed value preceded by the keyword @code{PASSWORD}:
@example
-GRANT ... IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
+GRANT ...
+IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
@end example
In a C program, you can get the hashed value by using the
@@ -61184,7 +61190,7 @@
@c description_for_help_topic RENAME USER
The @code{RENAME USER} statement renames existing MySQL accounts.
To use it, you must have the global @code{CREATE USER} privilege or
-@code{UPDATE} privilege on @code{mysql} database.
+the @code{UPDATE} privilege for the @code{mysql} database.
An error occurs if any old account does not exist or any new
account exists. The @var{old_user} and @var{new_user} values are given the
same way as for the @code{GRANT} statement.
@@ -61533,17 +61539,9 @@
tables.
For the moment, @code{OPTIMIZE TABLE} works only on @code{MyISAM},
-@code{BDB} and @code{InnoDB} tables. For @code{BDB} tables, @code{OPTIMIZE
-TABLE} is currently mapped to @code{ANALYZE TABLE}. It was also the case for
-@code{InnoDB} tables before MySQL 4.1.3; starting from this version it is
-mapped to @code{ALTER TABLE}.
-@xref{ANALYZE TABLE, , @code{ANALYZE TABLE}}.
-
-You can get @code{OPTIMIZE TABLE} to work on other table types by starting
-@command{mysqld} with the @code{--skip-new} or @code{--safe-mode} option;
-in this case, @code{OPTIMIZE TABLE} is just mapped to @code{ALTER TABLE}.
+@code{BDB} and @code{InnoDB} tables.
-@code{OPTIMIZE TABLE} works as follows:
+For @code{MyISAM} tables, @code{OPTIMIZE TABLE} works as follows:
@enumerate
@item
If the table has deleted or split rows, repair the table.
@@ -61554,6 +61552,17 @@
by sorting the index), update them.
@end enumerate
+For @code{BDB} tables, @code{OPTIMIZE TABLE} currently is mapped to
+@code{ANALYZE TABLE}. That was also the case for @code{InnoDB} tables before
+MySQL 4.1.3; starting from this version it is mapped to @code{ALTER TABLE},
+which rebuilds the table. Rebuilding updates index statistics and frees
+unused space in the clustered index.
+@xref{ANALYZE TABLE, , @code{ANALYZE TABLE}}.
+
+You can get @code{OPTIMIZE TABLE} to work on other table types by starting
+@command{mysqld} with the @code{--skip-new} or @code{--safe-mode} option;
+in this case, @code{OPTIMIZE TABLE} is just mapped to @code{ALTER TABLE}.
+
Note that MySQL locks the table during the time @code{OPTIMIZE TABLE} is
running.
@@ -63589,7 +63598,7 @@
and @code{OPTIMIZE TABLE}
can be killed as of MySQL 4.1.0, as can @code{CHECK TABLE} as of MySQL 4.1.3.
However, killing a @code{REPAIR TABLE} or @code{OPTIMIZE TABLE} operation
-on a @code{MyISAM} table results in a table that IS corrupted and is
+on a @code{MyISAM} table results in a table that @emph{is} corrupted and is
unusable (reads and writes to it fail) until you optimize or repair it
again.
@end itemize
@@ -67429,7 +67438,7 @@
Global options.
-@item @file{@var{$MYSQL_HOME}/my.cnf}
+@item @file{@code{$MYSQL_HOME}/my.cnf}
Server-specific options.
@@ -67443,7 +67452,7 @@
@end itemize
-@var{MYSQL_HOME} represents an environment variable, which contains
+@code{MYSQL_HOME} represents an environment variable, which contains
a path to the directory containing the server-specific @code{my.cnf} file.
If you want to make sure that @command{mysqld} reads options only from a
@@ -69134,7 +69143,7 @@
@menu
-* InnoDB Lock Modes:: @code{InnoDB} Lock Modes
+* InnoDB Lock Modes:: @code{InnoDB} Lock Modes
* InnoDB and AUTOCOMMIT:: @code{InnoDB} and @code{AUTOCOMMIT}
* InnoDB transaction isolation:: @code{InnoDB} and @code{TRANSACTION ISOLATION LEVEL}
* InnoDB consistent read:: Consistent Non-Locking Read
@@ -101113,7 +101122,8 @@
@xref{Binary log}.
@item
@code{OPTIMIZE TABLE} for @code{InnoDB} tables is now mapped to @code{ALTER
-TABLE} instead of @code{ANALYZE TABLE}.
+TABLE} instead of @code{ANALYZE TABLE}. This rebuilds the table, which updates
+index statistics and frees space in the clustered index.
@item
@code{sync_frm} is now a settable global variable (not only a startup option).
@item
| Thread |
|---|
| • bk commit - mysqldoc@docsrva tree (paul:1.2632) | paul | 7 May |