aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorItagaki Takahiro <itagaki.takahiro@gmail.com>2010-01-21 06:11:46 +0000
committerItagaki Takahiro <itagaki.takahiro@gmail.com>2010-01-21 06:11:46 +0000
commit3b992cf5904c6149d5b8d3b4a86a590f3d057a41 (patch)
tree4b478a047917a4911e2b45a0c1a63efc7399be49
parent58565d78db67cfb4752ef3d3e315aa9ce3c9d946 (diff)
downloadpostgresql-3b992cf5904c6149d5b8d3b4a86a590f3d057a41.tar.gz
postgresql-3b992cf5904c6149d5b8d3b4a86a590f3d057a41.zip
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.
-rw-r--r--src/backend/utils/adt/ruleutils.c27
-rw-r--r--src/bin/psql/describe.c5
-rw-r--r--src/test/regress/expected/triggers.out29
-rw-r--r--src/test/regress/sql/triggers.sql1
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;