Adjust psql to use pg_get_triggerdef(pretty=true) to remove extra ()'s
authorItagaki Takahiro <itagaki.takahiro@gmail.com>
Thu, 21 Jan 2010 06:11:46 +0000 (06:11 +0000)
committerItagaki Takahiro <itagaki.takahiro@gmail.com>
Thu, 21 Jan 2010 06:11:46 +0000 (06:11 +0000)
from description of triggers with WHEN clause.

Thanks to Brad T. Sliger for the review.

src/backend/utils/adt/ruleutils.c
src/bin/psql/describe.c
src/test/regress/expected/triggers.out
src/test/regress/sql/triggers.sql

index 2eeb0bc5152392cff473adca12bd57c7dd82cb09..6e81a88b3048cf3954c0a7319b6044e4dad38a8c 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.319 2010/01/17 22:56:22 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.320 2010/01/21 06:11:45 itagaki Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -518,10 +518,9 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
    initStringInfo(&buf);
 
    tgname = NameStr(trigrec->tgname);
-   appendStringInfo(&buf, "CREATE %sTRIGGER %s",
+   appendStringInfo(&buf, "CREATE %sTRIGGER %s ",
                     OidIsValid(trigrec->tgconstraint) ? "CONSTRAINT " : "",
                     quote_identifier(tgname));
-   appendStringInfoString(&buf, pretty ? "\n    " : " ");
 
    if (TRIGGER_FOR_BEFORE(trigrec->tgtype))
        appendStringInfo(&buf, "BEFORE");
@@ -573,33 +572,27 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
            appendStringInfo(&buf, " TRUNCATE");
        findx++;
    }
-   appendStringInfo(&buf, " ON %s",
+   appendStringInfo(&buf, " ON %s ",
                     generate_relation_name(trigrec->tgrelid, NIL));
-   appendStringInfoString(&buf, pretty ? "\n    " : " ");
 
    if (OidIsValid(trigrec->tgconstraint))
    {
        if (OidIsValid(trigrec->tgconstrrelid))
-       {
-           appendStringInfo(&buf, "FROM %s",
+           appendStringInfo(&buf, "FROM %s ",
                             generate_relation_name(trigrec->tgconstrrelid, NIL));
-           appendStringInfoString(&buf, pretty ? "\n    " : " ");
-       }
        if (!trigrec->tgdeferrable)
            appendStringInfo(&buf, "NOT ");
        appendStringInfo(&buf, "DEFERRABLE INITIALLY ");
        if (trigrec->tginitdeferred)
-           appendStringInfo(&buf, "DEFERRED");
+           appendStringInfo(&buf, "DEFERRED ");
        else
-           appendStringInfo(&buf, "IMMEDIATE");
-       appendStringInfoString(&buf, pretty ? "\n    " : " ");
+           appendStringInfo(&buf, "IMMEDIATE ");
    }
 
    if (TRIGGER_FOR_ROW(trigrec->tgtype))
-       appendStringInfo(&buf, "FOR EACH ROW");
+       appendStringInfo(&buf, "FOR EACH ROW ");
    else
-       appendStringInfo(&buf, "FOR EACH STATEMENT");
-   appendStringInfoString(&buf, pretty ? "\n    " : " ");
+       appendStringInfo(&buf, "FOR EACH STATEMENT ");
 
    /* If the trigger has a WHEN qualification, add that */
    value = fastgetattr(ht_trig, Anum_pg_trigger_tgqual,
@@ -643,12 +636,12 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
        context.windowClause = NIL;
        context.windowTList = NIL;
        context.varprefix = true;
-       context.prettyFlags = pretty ? PRETTYFLAG_PAREN | PRETTYFLAG_INDENT : 0;
+       context.prettyFlags = pretty ? PRETTYFLAG_PAREN : 0;
        context.indentLevel = PRETTYINDENT_STD;
 
        get_rule_expr(qual, &context, false);
 
-       appendStringInfo(&buf, ")%s", pretty ? "\n    " : " ");
+       appendStringInfo(&buf, ") ");
    }
 
    appendStringInfo(&buf, "EXECUTE PROCEDURE %s(",
index dca1f577c03fd6a2ff2052b4d644203a27a8a351..5b80a885a8196cffc92750c1a5df7f2a3f899878 100644 (file)
@@ -8,7 +8,7 @@
  *
  * Copyright (c) 2000-2010, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.234 2010/01/17 22:56:23 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.235 2010/01/21 06:11:46 itagaki Exp $
  */
 #include "postgres_fe.h"
 
@@ -1854,10 +1854,11 @@ describeOneTableDetails(const char *schemaname,
        {
            printfPQExpBuffer(&buf,
                              "SELECT t.tgname, "
-                             "pg_catalog.pg_get_triggerdef(t.oid), "
+                             "pg_catalog.pg_get_triggerdef(t.oid%s), "
                              "t.tgenabled\n"
                              "FROM pg_catalog.pg_trigger t\n"
                              "WHERE t.tgrelid = '%s' AND ",
+                             (pset.sversion >= 80500 ? ", true" : ""),
                              oid);
            if (pset.sversion >= 80500)
                appendPQExpBuffer(&buf, "NOT t.tgisinternal");
index 2e305e699c6a13c73cb9afb06b5a52a9837f68cb..fe98079542007d683261f3895785d89cf0a23a25 100644 (file)
@@ -375,13 +375,9 @@ SELECT * FROM main_table ORDER BY a, b;
 (8 rows)
 
 SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
-                pg_get_triggerdef                 
---------------------------------------------------
- CREATE TRIGGER modified_a                       +
-     BEFORE UPDATE OF a ON main_table            +
-     FOR EACH ROW                                +
-     WHEN (old.a <> new.a)                       +
-     EXECUTE PROCEDURE trigger_func('modified_a')
+                                                             pg_get_triggerdef                                                              
+--------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE TRIGGER modified_a BEFORE UPDATE OF a ON main_table FOR EACH ROW WHEN (old.a <> new.a) EXECUTE PROCEDURE trigger_func('modified_a')
 (1 row)
 
 SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
@@ -391,13 +387,9 @@ SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table
 (1 row)
 
 SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_any';
-                 pg_get_triggerdef                  
-----------------------------------------------------
- CREATE TRIGGER modified_any                       +
-     BEFORE UPDATE OF a ON main_table              +
-     FOR EACH ROW                                  +
-     WHEN (old.* IS DISTINCT FROM new.*)           +
-     EXECUTE PROCEDURE trigger_func('modified_any')
+                                                                      pg_get_triggerdef                                                                       
+--------------------------------------------------------------------------------------------------------------------------------------------------------------
+ CREATE TRIGGER modified_any BEFORE UPDATE OF a ON main_table FOR EACH ROW WHEN (old.* IS DISTINCT FROM new.*) EXECUTE PROCEDURE trigger_func('modified_any')
 (1 row)
 
 DROP TRIGGER modified_a ON main_table;
@@ -424,15 +416,6 @@ SELECT pg_get_triggerdef(oid) FROM pg_trigger WHERE tgrelid = 'main_table'::regc
  CREATE TRIGGER after_upd_a_b_row_trig AFTER UPDATE OF a, b ON main_table FOR EACH ROW EXECUTE PROCEDURE trigger_func('after_upd_a_b_row')
 (1 row)
 
-SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'after_upd_a_b_row_trig';
-                    pg_get_triggerdef                    
----------------------------------------------------------
- CREATE TRIGGER after_upd_a_b_row_trig                  +
-     AFTER UPDATE OF a, b ON main_table                 +
-     FOR EACH ROW                                       +
-     EXECUTE PROCEDURE trigger_func('after_upd_a_b_row')
-(1 row)
-
 UPDATE main_table SET a = 50;
 NOTICE:  trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
 NOTICE:  trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW
index 6940689c23a617eb195ef884fe297e96fbbfc374..4decbfb68f8939413b74f53a4a57b32d6856bbdc 100644 (file)
@@ -304,7 +304,6 @@ CREATE TRIGGER after_upd_b_stmt_trig AFTER UPDATE OF b ON main_table
 FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func('after_upd_b_stmt');
 
 SELECT pg_get_triggerdef(oid) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'after_upd_a_b_row_trig';
-SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'after_upd_a_b_row_trig';
 
 UPDATE main_table SET a = 50;
 UPDATE main_table SET b = 10;