Thread: make createlang match docs

make createlang match docs

From
Marko Kreen
Date:
* 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

Re: make createlang match docs

From
Tom Lane
Date:
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

Re: make createlang match docs

From
Peter Eisentraut
Date:
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


Re: make createlang match docs

From
Marko Kreen
Date:
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


Re: make createlang match docs

From
Marko Kreen
Date:
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


Re: make createlang match docs

From
Thomas Lockhart
Date:
> > > * 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

Re: make createlang match docs

From
Marko Kreen
Date:
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


Re: make createlang match docs

From
Bruce Momjian
Date:
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

  # ----------

Re: make createlang match docs

From
Bruce Momjian
Date:
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

Re: make createlang match docs

From
Tom Lane
Date:
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

Re: make createlang match docs

From
Bruce Momjian
Date:
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

Re: make createlang match docs

From
Bruce Momjian
Date:
> 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"