Tom Lane wrote:
> Bruce Momjian <[EMAIL PROTECTED]> writes:
> > psql \d always double-quotes table names:
> >           Table "public.xx"
> 
> Yeah, that has bugged me for a while, because it is in fact *wrong* ...
> the above representation of a qualified name is incorrect.

> > This patch uses pg_dump fmtId() to double-quote only when necessary.
> 
> Seems good, but I think your Makefile patch is a brick or two shy of
> a load.  Don't you need something to make sure that parser/keywords.o
> is up to date?

OK, got it.  I didn't notice the submake-backend rule before.  Attached.

> More generally, maybe we ought to think about moving fmtId() and perhaps
> other parts of dumputils out of pg_dump and into some
> more-easily-accessible library.

I will return to that.  Right now we have been putting code shared by
the backend and /bin into pgport, but I don't think that is going to be
clean for things shared by just /bin, and we have the keywords.c
dependency, making this even more complex.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/bin/psql/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/Makefile,v
retrieving revision 1.38
diff -c -c -r1.38 Makefile
*** src/bin/psql/Makefile       29 Nov 2003 19:52:06 -0000      1.38
--- src/bin/psql/Makefile       23 Dec 2003 14:55:38 -0000
***************
*** 15,33 ****
  
  REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref
  
! override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -DFRONTEND
  
  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 \
!       tab-complete.o mbprint.o
  
! all: submake-libpq submake-libpgport psql
  
  psql: $(OBJS) $(libpq_builddir)/libpq.a
!       $(CC) $(CFLAGS) $(OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@
  
  help.o: $(srcdir)/sql_help.h
  
  ifdef PERL
  $(srcdir)/sql_help.h: create_help.pl $(wildcard $(REFDOCDIR)/*.sgml)
        $(PERL) $< $(REFDOCDIR) $@
--- 15,43 ----
  
  REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref
  
! override CPPFLAGS := -I$(top_srcdir)/src/bin/pg_dump -I$(libpq_srcdir) $(CPPFLAGS) 
-DFRONTEND
  
  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 \
!       tab-complete.o mbprint.o \
!       dumputils.o
  
! EXTRA_OBJS = $(top_builddir)/src/backend/parser/keywords.o
! 
! all: submake-libpq submake-libpgport submake-backend psql
  
  psql: $(OBJS) $(libpq_builddir)/libpq.a
!       $(CC) $(CFLAGS) $(OBJS) $(EXTRA_OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@
  
  help.o: $(srcdir)/sql_help.h
  
+ dumputils.c: % : $(top_srcdir)/src/bin/pg_dump/%
+       rm -f $@ && $(LN_S) $< .
+ 
+ .PHONY: submake-backend
+ submake-backend:
+       $(MAKE) -C $(top_builddir)/src/backend/parser keywords.o
+ 
  ifdef PERL
  $(srcdir)/sql_help.h: create_help.pl $(wildcard $(REFDOCDIR)/*.sgml)
        $(PERL) $< $(REFDOCDIR) $@
***************
*** 35,40 ****
--- 45,51 ----
  $(srcdir)/sql_help.h:
        @echo "*** Perl is needed to build psql help."
  endif
+ 
  
  distprep: $(srcdir)/sql_help.h
  
Index: src/bin/psql/describe.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/describe.c,v
retrieving revision 1.90
diff -c -c -r1.90 describe.c
*** src/bin/psql/describe.c     1 Dec 2003 22:21:54 -0000       1.90
--- src/bin/psql/describe.c     23 Dec 2003 14:55:39 -0000
***************
*** 16,21 ****
--- 16,23 ----
  #include "print.h"
  #include "variables.h"
  
+ #include "dumputils.h"
+ 
  #include <ctype.h>
  
  #ifdef WIN32
***************
*** 658,663 ****
--- 660,667 ----
        PQExpBufferData tmpbuf;
        int                     cols = 0;
        int                     numrows = 0;
+       char schema_rel_str[NAMEDATALEN * 2 + 6];
+ 
        struct
        {
                bool            hasindex;
***************
*** 812,851 ****
  #endif
        }
  
        /* Make title */
        switch (tableinfo.relkind)
        {
                case 'r':
!                       printfPQExpBuffer(&title, _("Table \"%s.%s\""),
!                                                         schemaname, relationname);
                        break;
                case 'v':
!                       printfPQExpBuffer(&title, _("View \"%s.%s\""),
!                                                         schemaname, relationname);
                        break;
                case 'S':
!                       printfPQExpBuffer(&title, _("Sequence \"%s.%s\""),
!                                                         schemaname, relationname);
                        break;
                case 'i':
!                       printfPQExpBuffer(&title, _("Index \"%s.%s\""),
!                                                         schemaname, relationname);
                        break;
                case 's':
!                       printfPQExpBuffer(&title, _("Special relation \"%s.%s\""),
!                                                         schemaname, relationname);
                        break;
                case 't':
!                       printfPQExpBuffer(&title, _("TOAST table \"%s.%s\""),
!                                                         schemaname, relationname);
                        break;
                case 'c':
!                       printfPQExpBuffer(&title, _("Composite type \"%s.%s\""),
!                                                         schemaname, relationname);
                        break;
                default:
!                       printfPQExpBuffer(&title, _("?%c? \"%s.%s\""),
!                                                       tableinfo.relkind, schemaname, 
relationname);
                        break;
        }
  
--- 816,852 ----
  #endif
        }
  
+ 
+       strcpy(schema_rel_str, fmtId(schemaname));
+       strcat(schema_rel_str, ".");    
+       strcat(schema_rel_str, fmtId(relationname));
+               
        /* Make title */
        switch (tableinfo.relkind)
        {
                case 'r':
!                       printfPQExpBuffer(&title, _("Table %s"), schema_rel_str);
                        break;
                case 'v':
!                       printfPQExpBuffer(&title, _("View %s"), schema_rel_str);
                        break;
                case 'S':
!                       printfPQExpBuffer(&title, _("Sequence %s"), schema_rel_str);
                        break;
                case 'i':
!                       printfPQExpBuffer(&title, _("Index %s"), schema_rel_str);
                        break;
                case 's':
!                       printfPQExpBuffer(&title, _("Special relation %s"), 
schema_rel_str);
                        break;
                case 't':
!                       printfPQExpBuffer(&title, _("TOAST table %s"), schema_rel_str);
                        break;
                case 'c':
!                       printfPQExpBuffer(&title, _("Composite type %s"), 
schema_rel_str);
                        break;
                default:
!                       printfPQExpBuffer(&title, _("?%c? %s"), tableinfo.relkind, 
schema_rel_str);
                        break;
        }
  
***************
*** 887,895 ****
                                resetPQExpBuffer(&tmpbuf);
                        appendPQExpBuffer(&tmpbuf, "%s, ", indamname);
  
                        /* we assume here that index and table are in same schema */
!                       appendPQExpBuffer(&tmpbuf, _("for table \"%s.%s\""),
!                                                         schemaname, indtable);
  
                        if (strlen(indpred))
                                appendPQExpBuffer(&tmpbuf, ", predicate (%s)", 
indpred);
--- 888,899 ----
                                resetPQExpBuffer(&tmpbuf);
                        appendPQExpBuffer(&tmpbuf, "%s, ", indamname);
  
+                       strcpy(schema_rel_str, fmtId(schemaname));
+                       strcat(schema_rel_str, ".");    
+                       strcat(schema_rel_str, fmtId(indtable));
+                               
                        /* we assume here that index and table are in same schema */
!                       appendPQExpBuffer(&tmpbuf, _("for table %s"), schema_rel_str);
  
                        if (strlen(indpred))
                                appendPQExpBuffer(&tmpbuf, ", predicate (%s)", 
indpred);
***************
*** 1095,1102 ****
                                const char *usingpos;
  
                                /* Output index name */
!                               printfPQExpBuffer(&buf, _("    \"%s\""),
!                                                                 PQgetvalue(result1, 
i, 0));
  
                                /* Label as primary key or unique (but not both) */
                                appendPQExpBuffer(&buf,
--- 1099,1106 ----
                                const char *usingpos;
  
                                /* Output index name */
!                               printfPQExpBuffer(&buf, _("    %s"),
!                                                                 
fmtId(PQgetvalue(result1, i, 0)));
  
                                /* Label as primary key or unique (but not both) */
                                appendPQExpBuffer(&buf,
***************
*** 1125,1132 ****
                        footers[count_footers++] = xstrdup(buf.data);
                        for (i = 0; i < check_count; i++)
                        {
!                               printfPQExpBuffer(&buf, _("    \"%s\" %s"),
!                                                                 PQgetvalue(result2, 
i, 1),
                                                                  PQgetvalue(result2, 
i, 0));
  
                                footers[count_footers++] = xstrdup(buf.data);
--- 1129,1136 ----
                        footers[count_footers++] = xstrdup(buf.data);
                        for (i = 0; i < check_count; i++)
                        {
!                               printfPQExpBuffer(&buf, _("    %s %s"),
!                                                                 
fmtId(PQgetvalue(result2, i, 1)),
                                                                  PQgetvalue(result2, 
i, 0));
  
                                footers[count_footers++] = xstrdup(buf.data);
***************
*** 1140,1147 ****
                        footers[count_footers++] = xstrdup(buf.data);
                        for (i = 0; i < foreignkey_count; i++)
                        {
!                               printfPQExpBuffer(&buf, _("    \"%s\" %s"),
!                                                                 PQgetvalue(result5, 
i, 0),
                                                                  PQgetvalue(result5, 
i, 1));
  
                                footers[count_footers++] = xstrdup(buf.data);
--- 1144,1151 ----
                        footers[count_footers++] = xstrdup(buf.data);
                        for (i = 0; i < foreignkey_count; i++)
                        {
!                               printfPQExpBuffer(&buf, _("    %s %s"),
!                                                                 
fmtId(PQgetvalue(result5, i, 0)),
                                                                  PQgetvalue(result5, 
i, 1));
  
                                footers[count_footers++] = xstrdup(buf.data);
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to