Thread: make createlang match docs
* make createlang match docs: "createlang dbname" did not work. -- marko Index: src/bin/scripts/createlang.sh =================================================================== RCS file: /opt/cvs2/pgsql/pgsql/src/bin/scripts/createlang.sh,v retrieving revision 1.31 diff -u -c -r1.31 createlang.sh *** src/bin/scripts/createlang.sh 30 Sep 2001 22:17:51 -0000 1.31 --- src/bin/scripts/createlang.sh 12 Dec 2001 09:16:20 -0000 *************** *** 108,118 **** ;; *) if [ "$list" != "t" ] ! then langname="$1" if [ "$2" ] then shift - dbname="$1" fi else dbname="$1" fi --- 108,119 ---- ;; *) if [ "$list" != "t" ] ! then dbname="$1" if [ "$2" ] then + langname="$1" + dbname="$2" shift fi else dbname="$1" fi
Marko Kreen <marko@l-t.ee> writes: > * make createlang match docs: "createlang dbname" did not work. Unless you can demonstrate that createlang changed behavior recently, this is the wrong fix. Breaking existing scripts that use createlang is not the way to go; fixing the documentation to match the code is the way to go. regards, tom lane
Marko Kreen writes: > * make createlang match docs: "createlang dbname" did not work. What is the meaning of that command? -- Peter Eisentraut peter_e@gmx.net
On Wed, Dec 12, 2001 at 03:40:30PM -0500, Tom Lane wrote: > Marko Kreen <marko@l-t.ee> writes: > > * make createlang match docs: "createlang dbname" did not work. > > Unless you can demonstrate that createlang changed behavior recently, > this is the wrong fix. Breaking existing scripts that use createlang > is not the way to go; fixing the documentation to match the code is > the way to go. in app-createlang.html: Synopsis createlang [connection-options...] [langname] dbname createlang [connection-options...] --list | -l dbname --- $ createlang --help ... Usage: createlang [options] [langname] dbname .... $ createlang foo createlang: missing required argument database name Try 'createlang -?' for help. $ With my patch: $ createlang foo Language to install in database foo: I would say 'createlang foo' has been error-message-only command all the 7.x.x, so it should not break anything. What way the docs should be changed? -- marko
On Wed, Dec 12, 2001 at 11:27:37PM +0100, Peter Eisentraut wrote: > Marko Kreen writes: > > > * make createlang match docs: "createlang dbname" did not work. > > What is the meaning of that command? You give a database to act on, like to other scripts, then it asks what language to install. -- marko
> > > * make createlang match docs: "createlang dbname" did not work. > > What is the meaning of that command? > You give a database to act on, like to other scripts, then it > asks what language to install. But since it respects PGHOST and should use a database name the same as your user name, that usage is degenerate with "createlang newlanguage". Isn't it? Or shouldn't it be? - Thomas
On Thu, Dec 13, 2001 at 05:47:37AM +0000, Thomas Lockhart wrote: > > > > * make createlang match docs: "createlang dbname" did not work. > > > What is the meaning of that command? > > You give a database to act on, like to other scripts, then it > > asks what language to install. > > But since it respects PGHOST and should use a database name the same as > your user name, that usage is degenerate with "createlang newlanguage". > Isn't it? Or shouldn't it be? Well, it does not respect PGDATABASE nor uses username as default - and making it do so changes the current behaviour... Although I think too 'createlang langname' would be saner. -- marko
Marko Kreen wrote: > On Thu, Dec 13, 2001 at 05:47:37AM +0000, Thomas Lockhart wrote: > > > > > * make createlang match docs: "createlang dbname" did not work. > > > > What is the meaning of that command? > > > You give a database to act on, like to other scripts, then it > > > asks what language to install. > > > > But since it respects PGHOST and should use a database name the same as > > your user name, that usage is degenerate with "createlang newlanguage". > > Isn't it? Or shouldn't it be? > > Well, it does not respect PGDATABASE nor uses username as > default - and making it do so changes the current behaviour... > > Although I think too 'createlang langname' would be saner. I was going to add this to TODO: Change 'createlang [langname] dbname' to 'createlang langname [dbname]' However, when I started to look at the createlang script, I saw: if [ "$list" != "t" ] then langname="$1" if [ "$2" ] then shift dbname="$1" fi else dbname="$1" fi which said that dbname was already behaving as optional, even though there was code to handle a missing langname. Rather than change the script to make langname optional, I have fixed the script to work the way everyone wants it to work, namely dbname is now optional. I grabbed the dbname default code from createdb. Applied to CVS with doc updates. Patch attached. Also, can someone explain why we have a createlang.sh? Makefile shows: createlang: createlang.sh cp $< $@ chmod a+x $@ Not much doing there. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 Index: doc/src/sgml/ref/createlang.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/ref/createlang.sgml,v retrieving revision 1.21 diff -c -r1.21 createlang.sgml *** doc/src/sgml/ref/createlang.sgml 2001/12/08 03:24:35 1.21 --- doc/src/sgml/ref/createlang.sgml 2002/01/03 05:27:34 *************** *** 23,30 **** <cmdsynopsis> <command>createlang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> ! <arg><replaceable>langname</replaceable></arg> ! <arg choice="plain"><replaceable>dbname</replaceable></arg> <sbr> <command>createlang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> --- 23,30 ---- <cmdsynopsis> <command>createlang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> ! <arg choice="plain"><replaceable>langname</replaceable></arg> ! <arg><replaceable>dbname</replaceable></arg> <sbr> <command>createlang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> *************** *** 46,54 **** <para> Specifies the name of the procedural programming language to be defined. - <application>createlang</application> will prompt for - <replaceable class="parameter">langname</replaceable> - if it is not specified on the command line. </para> </listitem> </varlistentry> --- 46,51 ---- *************** *** 58,63 **** --- 55,62 ---- <listitem> <para> Specifies to which database the language should be added. + The default is to create a database with the same name as the + current system user. </para> </listitem> </varlistentry> Index: src/bin/scripts/createlang.sh =================================================================== RCS file: /cvsroot/pgsql/src/bin/scripts/createlang.sh,v retrieving revision 1.31 diff -c -r1.31 createlang.sh *** src/bin/scripts/createlang.sh 2001/09/30 22:17:51 1.31 --- src/bin/scripts/createlang.sh 2002/01/03 05:27:35 *************** *** 125,131 **** echo "$CMDNAME installs a procedural language into a PostgreSQL database." echo echo "Usage:" ! echo " $CMDNAME [options] [langname] dbname" echo echo "Options:" echo " -h, --host=HOSTNAME Database server host" --- 125,131 ---- echo "$CMDNAME installs a procedural language into a PostgreSQL database." echo echo "Usage:" ! echo " $CMDNAME [options] langname [dbname]" echo echo "Options:" echo " -h, --host=HOSTNAME Database server host" *************** *** 136,161 **** echo " -L, --pglib=DIRECTORY Find language interpreter file in DIRECTORY" echo " -l, --list Show a list of currently installed languages" echo - echo "If 'langname' is not specified, you will be prompted interactively." - echo "A database name must be specified." - echo echo "Report bugs to <pgsql-bugs@postgresql.org>." exit 0 fi - # ---------- - # Check that we have a database - # ---------- if [ -z "$dbname" ]; then ! echo "$CMDNAME: missing required argument database name" 1>&2 ! echo "Try '$CMDNAME --help' for help." 1>&2 ! exit 1 fi # ---------- ! # List option # ---------- if [ "$list" ]; then sqlcmd="SELECT lanname as \"Name\", lanpltrusted as \"Trusted?\" FROM pg_language WHERE lanispl = TRUE;" --- 136,158 ---- echo " -L, --pglib=DIRECTORY Find language interpreter file in DIRECTORY" echo " -l, --list Show a list of currently installed languages" echo echo "Report bugs to <pgsql-bugs@postgresql.org>." exit 0 fi if [ -z "$dbname" ]; then ! if [ "$PGUSER" ]; then ! dbname="$PGUSER" ! else ! dbname=`${PATHNAME}pg_id -u -n` ! fi ! [ "$?" -ne 0 ] && exit 1 fi # ---------- ! # List option, doesn't need langname # ---------- if [ "$list" ]; then sqlcmd="SELECT lanname as \"Name\", lanpltrusted as \"Trusted?\" FROM pg_language WHERE lanispl = TRUE;" *************** *** 168,185 **** # ---------- ! # Check that we have PGLIB # ---------- ! if [ -z "$PGLIB" ]; then ! PGLIB='$libdir' fi # ---------- ! # If not given on the command line, ask for the language # ---------- ! if [ -z "$langname" ]; then ! $ECHO_N "Language to install in database $dbname: "$ECHO_C ! read langname fi # ---------- --- 165,183 ---- # ---------- ! # We can't go any farther without a langname # ---------- ! if [ -z "$langname" ]; then ! echo "$CMDNAME: missing required argument language name" 1>&2 ! echo "Try '$CMDNAME --help' for help." 1>&2 ! exit 1 fi # ---------- ! # Check that we have PGLIB # ---------- ! if [ -z "$PGLIB" ]; then ! PGLIB='$libdir' fi # ----------
Tom Lane wrote: > Marko Kreen <marko@l-t.ee> writes: > > * make createlang match docs: "createlang dbname" did not work. > > Unless you can demonstrate that createlang changed behavior recently, > this is the wrong fix. Breaking existing scripts that use createlang > is not the way to go; fixing the documentation to match the code is > the way to go. Actually, the existing code didn't work. The options part had dbname as optional, but the later code only tested for an optional langname; clearly a mess. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Bruce Momjian <pgman@candle.pha.pa.us> writes: > Rather than change the script to make langname optional, I have fixed > the script to work the way everyone wants it to work, namely dbname is > now optional. I grabbed the dbname default code from createdb. I reserve the right to object later, but too tired to think about it now. > Also, can someone explain why we have a createlang.sh? The transformation used to be nontrivial. Perhaps it will be again someday; so I'm not eager to remove this build step. regards, tom lane
Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > Rather than change the script to make langname optional, I have fixed > > the script to work the way everyone wants it to work, namely dbname is > > now optional. I grabbed the dbname default code from createdb. > > I reserve the right to object later, but too tired to think about it > now. I understand. I was too tired to fix it to work the wrong way, only to fix it right for 7.3. > > Also, can someone explain why we have a createlang.sh? > > The transformation used to be nontrivial. Perhaps it will be again > someday; so I'm not eager to remove this build step. Just seems strange. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
> I was going to add this to TODO: > > Change 'createlang [langname] dbname' to 'createlang langname [dbname]' > > However, when I started to look at the createlang script, I saw: > > if [ "$list" != "t" ] > then langname="$1" > if [ "$2" ] > then > shift > dbname="$1" > fi > else dbname="$1" > fi > > which said that dbname was already behaving as optional, even though > there was code to handle a missing langname. > > Rather than change the script to make langname optional, I have fixed > the script to work the way everyone wants it to work, namely dbname is > now optional. I grabbed the dbname default code from createdb. OK, turns out droplang has the same problem; default are documented but do not work. Fixed to have dbname optional, just like createlang. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 Index: doc/src/sgml/ref/droplang.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/ref/droplang.sgml,v retrieving revision 1.15 diff -c -r1.15 droplang.sgml *** doc/src/sgml/ref/droplang.sgml 2001/12/08 03:24:36 1.15 --- doc/src/sgml/ref/droplang.sgml 2002/01/03 06:06:59 *************** *** 23,30 **** <cmdsynopsis> <command>droplang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> ! <arg><replaceable>langname</replaceable></arg> ! <arg choice="plain"><replaceable>dbname</replaceable></arg> <sbr> <command>droplang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> --- 23,30 ---- <cmdsynopsis> <command>droplang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> ! <arg choice="plain"><replaceable>langname</replaceable></arg> ! <arg><replaceable>dbname</replaceable></arg> <sbr> <command>droplang</command> <arg rep="repeat"><replaceable>connection-options</replaceable></arg> *************** *** 45,53 **** <listitem> <para> Specifies the name of the backend programming language to be removed. - <application>droplang</application> will prompt for - <replaceable class="parameter">langname</replaceable> - if it is not specified on the command line. </para> </listitem> </varlistentry> --- 45,50 ---- *************** *** 57,62 **** --- 54,61 ---- <listitem> <para> Specifies from which database the language should be removed. + The default is to create a database with the same name as the + current system user. </para> </listitem> </varlistentry> Index: src/bin/scripts/droplang =================================================================== RCS file: /cvsroot/pgsql/src/bin/scripts/droplang,v retrieving revision 1.18 diff -c -r1.18 droplang *** src/bin/scripts/droplang 2001/09/30 22:17:51 1.18 --- src/bin/scripts/droplang 2002/01/03 06:07:00 *************** *** 111,117 **** echo "$CMDNAME removes a procedural language from a database." echo echo "Usage:" ! echo " $CMDNAME [options] [langname [dbname]]" echo echo "Options:" echo " -h, --host=HOSTNAME Database server host" --- 111,117 ---- echo "$CMDNAME removes a procedural language from a database." echo echo "Usage:" ! echo " $CMDNAME [options] langname [dbname]" echo echo "Options:" echo " -h, --host=HOSTNAME Database server host" *************** *** 121,134 **** echo " -d, --dbname=DBNAME Database to remove language from" echo " -l, --list Show a list of currently installed languages" echo - echo "If 'langname' is not specified, you will be prompted interactively." - echo "A database name must be specified." - echo echo "Report bugs to <pgsql-bugs@postgresql.org>." exit 0 fi if [ "$list" ]; then sqlcmd="SELECT lanname as \"Name\", lanpltrusted as \"Trusted?\" FROM pg_language WHERE lanispl = TRUE" if [ "$showsql" = yes ]; then --- 121,144 ---- echo " -d, --dbname=DBNAME Database to remove language from" echo " -l, --list Show a list of currently installed languages" echo echo "Report bugs to <pgsql-bugs@postgresql.org>." exit 0 fi + if [ -z "$dbname" ]; then + if [ "$PGUSER" ]; then + dbname="$PGUSER" + else + dbname=`${PATHNAME}pg_id -u -n` + fi + [ "$?" -ne 0 ] && exit 1 + fi + + + # ---------- + # List option, doesn't need langname + # ---------- if [ "$list" ]; then sqlcmd="SELECT lanname as \"Name\", lanpltrusted as \"Trusted?\" FROM pg_language WHERE lanispl = TRUE" if [ "$showsql" = yes ]; then *************** *** 140,160 **** # ---------- ! # Check that we have a database # ---------- ! if [ -z "$dbname" ]; then ! echo "$CMDNAME: missing required argument database name" 1>&2 echo "Try '$CMDNAME --help' for help." 1>&2 exit 1 - fi - - - # ---------- - # If not given on the commandline, ask for the language - # ---------- - if [ -z "$langname" ]; then - $ECHO_N "Language to remove from database $dbname: "$ECHO_C - read langname fi PSQL="${PATHNAME}psql -A -t -q $PSQLOPT -d $dbname -c" --- 150,161 ---- # ---------- ! # We can't go any farther without a langname # ---------- ! if [ -z "$langname" ]; then ! echo "$CMDNAME: missing required argument language name" 1>&2 echo "Try '$CMDNAME --help' for help." 1>&2 exit 1 fi PSQL="${PATHNAME}psql -A -t -q $PSQLOPT -d $dbname -c"