Quick hack solution so that pg_dump of views works. Needs repair after
authorTom Lane
Mon, 21 Feb 2000 20:18:11 +0000 (20:18 +0000)
committerTom Lane
Mon, 21 Feb 2000 20:18:11 +0000 (20:18 +0000)
Thomas gets back, but better this than nonfunctional pg_dump in the beta.

src/backend/utils/adt/ruleutils.c
src/test/regress/expected/rules.out

index 0267fc2c576f804a50c1eb09ee24d7ccc18e3ac6..985c0c030930fe56a7ef50a96631b767cfadd5fd 100644 (file)
@@ -3,7 +3,7 @@
  *           out of its tuple
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.42 2000/02/20 21:32:12 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.43 2000/02/21 20:18:10 tgl Exp $
  *
  *   This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -991,22 +991,39 @@ get_select_query_def(Query *query, deparse_context *context)
                appendStringInfo(buf, "%s%s",
                                 quote_identifier(rte->relname),
                                 inherit_marker(rte));
+               /*
+                * NOTE: SQL92 says you can't write column aliases unless
+                * you write a table alias --- but the table alias could
+                * be spelled the same as the table's real name.  This
+                * logic is therefore all wet: it should go something like
+                * IF we-need-to-dump-column-aliases OR relname != refname
+                * THEN print refname;
+                * IF we-need-to-dump-column-aliases
+                * THEN print column alias list.
+                * But currently we can't tell whether we need to dump
+                * column aliases or not... without that, this clearly
+                * backwards logic seems the best short-term approach.
+                * Since we don't really support SQL joins yet, dropping
+                * the list of column aliases doesn't hurt anything...
+                */
                if (strcmp(rte->relname, rte->ref->relname) != 0)
+               {
                    appendStringInfo(buf, " %s",
                                     quote_identifier(rte->ref->relname));
-               if (rte->ref->attrs != NIL)
-               {
-                   List *col;
-
-                   appendStringInfo(buf, " (");
-                   foreach(col, rte->ref->attrs)
+                   if (rte->ref->attrs != NIL)
                    {
-                       if (col != rte->ref->attrs)
-                           appendStringInfo(buf, ", ");
-                       appendStringInfo(buf, "%s",
-                                        quote_identifier(strVal(lfirst(col))));
+                       List *col;
+
+                       appendStringInfo(buf, " (");
+                       foreach(col, rte->ref->attrs)
+                       {
+                           if (col != rte->ref->attrs)
+                               appendStringInfo(buf, ", ");
+                           appendStringInfo(buf, "%s",
+                                            quote_identifier(strVal(lfirst(col))));
+                       }
+                       appendStringInfoChar(buf, ')');
                    }
-                   appendStringInfoChar(buf, ')');
                }
            }
        }
index cc7dfa3b901b1db0197987779603fec9fd384c32..ac20f3ee777766487a8b62fdd9d9eba3d1f94348 100644 (file)
@@ -1152,23 +1152,23 @@ SELECT viewname, definition FROM pg_views ORDER BY viewname;
  iexit              | SELECT ih.name, ih.thepath, interpt_pp(ih.thepath, r.thepath) AS exit FROM ihighway ih (name, thepath), ramp r (name, thepath) WHERE (ih.thepath ## r.thepath);
  pg_indexes         | SELECT c.relname AS tablename, i.relname AS indexname, pg_get_indexdef(x.indexrelid) AS indexdef FROM pg_index x (indexrelid, indrelid, indproc, indkey, indclass, indisclustered, indislossy, indhaskeytype, indisunique, indisprimary, indreference, indpred), pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl), pg_class i (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE ((c.oid = x.indrelid) AND (i.oid = x.indexrelid));
  pg_rules           | SELECT c.relname AS tablename, r.rulename, pg_get_ruledef(r.rulename) AS definition FROM pg_rewrite r (rulename, ev_type, ev_class, ev_attr, is_instead, ev_qual, ev_action), pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE ((r.rulename !~ '^_RET'::text) AND (c.oid = r.ev_class));
- pg_tables          | SELECT c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE (((c.relkind = 'r'::"char") OR (c.relkind = 's'::"char")) AND (NOT (EXISTS (SELECT pg_rewrite.rulename FROM pg_rewrite (rulename, ev_type, ev_class, ev_attr, is_instead, ev_qual, ev_action) WHERE ((pg_rewrite.ev_class = c.oid) AND (pg_rewrite.ev_type = '1'::"char"))))));
- pg_user            | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usetrace, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil FROM pg_shadow (usename, usesysid, usecreatedb, usetrace, usesuper, usecatupd, passwd, valuntil);
+ pg_tables          | SELECT c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE (((c.relkind = 'r'::"char") OR (c.relkind = 's'::"char")) AND (NOT (EXISTS (SELECT pg_rewrite.rulename FROM pg_rewrite WHERE ((pg_rewrite.ev_class = c.oid) AND (pg_rewrite.ev_type = '1'::"char"))))));
+ pg_user            | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usetrace, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil FROM pg_shadow;
  pg_views           | SELECT c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.relname) AS definition FROM pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE (c.relhasrules AND (EXISTS (SELECT r.rulename FROM pg_rewrite r (rulename, ev_type, ev_class, ev_attr, is_instead, ev_qual, ev_action) WHERE ((r.ev_class = c.oid) AND (r.ev_type = '1'::"char")))));
- rtest_v1           | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1 (a, b);
+ rtest_v1           | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1;
  rtest_vcomp        | SELECT x.part, (x.size * y.factor) AS size_in_cm FROM rtest_comp x (part, unit, size), rtest_unitfact y (unit, factor) WHERE (x.unit = y.unit);
  rtest_vview1       | SELECT x.a, x.b FROM rtest_view1 x (a, b, v) WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y (a) WHERE (y.a = x.a)));
- rtest_vview2       | SELECT rtest_view1.a, rtest_view1.b FROM rtest_view1 (a, b, v) WHERE rtest_view1.v;
+ rtest_vview2       | SELECT rtest_view1.a, rtest_view1.b FROM rtest_view1 WHERE rtest_view1.v;
  rtest_vview3       | SELECT x.a, x.b FROM rtest_vview2 x (a, b) WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y (a) WHERE (y.a = x.a)));
  rtest_vview4       | SELECT x.a, x.b, count(y.a) AS refcount FROM rtest_view1 x (a, b, v), rtest_view2 y (a) WHERE (x.a = y.a) GROUP BY x.a, x.b;
- rtest_vview5       | SELECT rtest_view1.a, rtest_view1.b, rtest_viewfunc1(rtest_view1.a) AS refcount FROM rtest_view1 (a, b, v);
+ rtest_vview5       | SELECT rtest_view1.a, rtest_view1.b, rtest_viewfunc1(rtest_view1.a) AS refcount FROM rtest_view1;
  shoe               | SELECT sh.shoename, sh.sh_avail, sh.slcolor, sh.slminlen, (sh.slminlen * un.un_fact) AS slminlen_cm, sh.slmaxlen, (sh.slmaxlen * un.un_fact) AS slmaxlen_cm, sh.slunit FROM shoe_data sh (shoename, sh_avail, slcolor, slminlen, slmaxlen, slunit), unit un (un_name, un_fact) WHERE (sh.slunit = un.un_name);
  shoe_ready         | SELECT rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, int4smaller(rsh.sh_avail, rsl.sl_avail) AS total_avail FROM shoe rsh (shoename, sh_avail, slcolor, slminlen, slminlen_cm, slmaxlen, slmaxlen_cm, slunit), shoelace rsl (sl_name, sl_avail, sl_color, sl_len, sl_unit, sl_len_cm) WHERE (((rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)) AND (rsl.sl_len_cm <= rsh.slmaxlen_cm));
  shoelace           | SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, (s.sl_len * u.un_fact) AS sl_len_cm FROM shoelace_data s (sl_name, sl_avail, sl_color, sl_len, sl_unit), unit u (un_name, un_fact) WHERE (s.sl_unit = u.un_name);
- shoelace_candelete | SELECT shoelace_obsolete.sl_name, shoelace_obsolete.sl_avail, shoelace_obsolete.sl_color, shoelace_obsolete.sl_len, shoelace_obsolete.sl_unit, shoelace_obsolete.sl_len_cm FROM shoelace_obsolete (sl_name, sl_avail, sl_color, sl_len, sl_unit, sl_len_cm) WHERE (shoelace_obsolete.sl_avail = 0);
- shoelace_obsolete  | SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace (sl_name, sl_avail, sl_color, sl_len, sl_unit, sl_len_cm) WHERE (NOT (EXISTS (SELECT shoe.shoename FROM shoe (shoename, sh_avail, slcolor, slminlen, slminlen_cm, slmaxlen, slmaxlen_cm, slunit) WHERE (shoe.slcolor = shoelace.sl_color))));
+ shoelace_candelete | SELECT shoelace_obsolete.sl_name, shoelace_obsolete.sl_avail, shoelace_obsolete.sl_color, shoelace_obsolete.sl_len, shoelace_obsolete.sl_unit, shoelace_obsolete.sl_len_cm FROM shoelace_obsolete WHERE (shoelace_obsolete.sl_avail = 0);
+ shoelace_obsolete  | SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace WHERE (NOT (EXISTS (SELECT shoe.shoename FROM shoe WHERE (shoe.slcolor = shoelace.sl_color))));
  street             | SELECT r.name, r.thepath, c.cname FROM road r (name, thepath), real_city c (pop, cname, outline) WHERE (c.outline ## r.thepath);
- toyemp             | SELECT emp.name, emp.age, emp."location", (12 * emp.salary) AS annualsal FROM emp (name, age, "location", salary, manager);
+ toyemp             | SELECT emp.name, emp.age, emp."location", (12 * emp.salary) AS annualsal FROM emp;
 (20 rows)
 
 SELECT tablename, rulename, definition FROM pg_rules