From 3b992cf5904c6149d5b8d3b4a86a590f3d057a41 Mon Sep 17 00:00:00 2001 From: Itagaki Takahiro Date: Thu, 21 Jan 2010 06:11:46 +0000 Subject: [PATCH] Adjust psql to use pg_get_triggerdef(pretty=true) to remove extra ()'s from description of triggers with WHEN clause. Thanks to Brad T. Sliger for the review. --- src/backend/utils/adt/ruleutils.c | 27 +++++++++--------------- src/bin/psql/describe.c | 5 +++-- src/test/regress/expected/triggers.out | 29 ++++++-------------------- src/test/regress/sql/triggers.sql | 1 - 4 files changed, 19 insertions(+), 43 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 2eeb0bc5152..6e81a88b304 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -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(", diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index dca1f577c03..5b80a885a81 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -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"); diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index 2e305e699c6..fe980795420 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -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 diff --git a/src/test/regress/sql/triggers.sql b/src/test/regress/sql/triggers.sql index 6940689c23a..4decbfb68f8 100644 --- a/src/test/regress/sql/triggers.sql +++ b/src/test/regress/sql/triggers.sql @@ -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; -- 2.39.5