提交 3b992cf5 编写于 作者: I Itagaki Takahiro

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.
上级 58565d78
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -518,10 +518,9 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
initStringInfo(&buf); initStringInfo(&buf);
tgname = NameStr(trigrec->tgname); tgname = NameStr(trigrec->tgname);
appendStringInfo(&buf, "CREATE %sTRIGGER %s", appendStringInfo(&buf, "CREATE %sTRIGGER %s ",
OidIsValid(trigrec->tgconstraint) ? "CONSTRAINT " : "", OidIsValid(trigrec->tgconstraint) ? "CONSTRAINT " : "",
quote_identifier(tgname)); quote_identifier(tgname));
appendStringInfoString(&buf, pretty ? "\n " : " ");
if (TRIGGER_FOR_BEFORE(trigrec->tgtype)) if (TRIGGER_FOR_BEFORE(trigrec->tgtype))
appendStringInfo(&buf, "BEFORE"); appendStringInfo(&buf, "BEFORE");
...@@ -573,33 +572,27 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty) ...@@ -573,33 +572,27 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
appendStringInfo(&buf, " TRUNCATE"); appendStringInfo(&buf, " TRUNCATE");
findx++; findx++;
} }
appendStringInfo(&buf, " ON %s", appendStringInfo(&buf, " ON %s ",
generate_relation_name(trigrec->tgrelid, NIL)); generate_relation_name(trigrec->tgrelid, NIL));
appendStringInfoString(&buf, pretty ? "\n " : " ");
if (OidIsValid(trigrec->tgconstraint)) if (OidIsValid(trigrec->tgconstraint))
{ {
if (OidIsValid(trigrec->tgconstrrelid)) if (OidIsValid(trigrec->tgconstrrelid))
{ appendStringInfo(&buf, "FROM %s ",
appendStringInfo(&buf, "FROM %s",
generate_relation_name(trigrec->tgconstrrelid, NIL)); generate_relation_name(trigrec->tgconstrrelid, NIL));
appendStringInfoString(&buf, pretty ? "\n " : " ");
}
if (!trigrec->tgdeferrable) if (!trigrec->tgdeferrable)
appendStringInfo(&buf, "NOT "); appendStringInfo(&buf, "NOT ");
appendStringInfo(&buf, "DEFERRABLE INITIALLY "); appendStringInfo(&buf, "DEFERRABLE INITIALLY ");
if (trigrec->tginitdeferred) if (trigrec->tginitdeferred)
appendStringInfo(&buf, "DEFERRED"); appendStringInfo(&buf, "DEFERRED ");
else else
appendStringInfo(&buf, "IMMEDIATE"); appendStringInfo(&buf, "IMMEDIATE ");
appendStringInfoString(&buf, pretty ? "\n " : " ");
} }
if (TRIGGER_FOR_ROW(trigrec->tgtype)) if (TRIGGER_FOR_ROW(trigrec->tgtype))
appendStringInfo(&buf, "FOR EACH ROW"); appendStringInfo(&buf, "FOR EACH ROW ");
else else
appendStringInfo(&buf, "FOR EACH STATEMENT"); appendStringInfo(&buf, "FOR EACH STATEMENT ");
appendStringInfoString(&buf, pretty ? "\n " : " ");
/* If the trigger has a WHEN qualification, add that */ /* If the trigger has a WHEN qualification, add that */
value = fastgetattr(ht_trig, Anum_pg_trigger_tgqual, value = fastgetattr(ht_trig, Anum_pg_trigger_tgqual,
...@@ -643,12 +636,12 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty) ...@@ -643,12 +636,12 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
context.windowClause = NIL; context.windowClause = NIL;
context.windowTList = NIL; context.windowTList = NIL;
context.varprefix = true; context.varprefix = true;
context.prettyFlags = pretty ? PRETTYFLAG_PAREN | PRETTYFLAG_INDENT : 0; context.prettyFlags = pretty ? PRETTYFLAG_PAREN : 0;
context.indentLevel = PRETTYINDENT_STD; context.indentLevel = PRETTYINDENT_STD;
get_rule_expr(qual, &context, false); get_rule_expr(qual, &context, false);
appendStringInfo(&buf, ")%s", pretty ? "\n " : " "); appendStringInfo(&buf, ") ");
} }
appendStringInfo(&buf, "EXECUTE PROCEDURE %s(", appendStringInfo(&buf, "EXECUTE PROCEDURE %s(",
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* Copyright (c) 2000-2010, PostgreSQL Global Development Group * 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" #include "postgres_fe.h"
...@@ -1854,10 +1854,11 @@ describeOneTableDetails(const char *schemaname, ...@@ -1854,10 +1854,11 @@ describeOneTableDetails(const char *schemaname,
{ {
printfPQExpBuffer(&buf, printfPQExpBuffer(&buf,
"SELECT t.tgname, " "SELECT t.tgname, "
"pg_catalog.pg_get_triggerdef(t.oid), " "pg_catalog.pg_get_triggerdef(t.oid%s), "
"t.tgenabled\n" "t.tgenabled\n"
"FROM pg_catalog.pg_trigger t\n" "FROM pg_catalog.pg_trigger t\n"
"WHERE t.tgrelid = '%s' AND ", "WHERE t.tgrelid = '%s' AND ",
(pset.sversion >= 80500 ? ", true" : ""),
oid); oid);
if (pset.sversion >= 80500) if (pset.sversion >= 80500)
appendPQExpBuffer(&buf, "NOT t.tgisinternal"); appendPQExpBuffer(&buf, "NOT t.tgisinternal");
......
...@@ -376,12 +376,8 @@ SELECT * FROM main_table ORDER BY a, b; ...@@ -376,12 +376,8 @@ SELECT * FROM main_table ORDER BY a, b;
SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a'; SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
pg_get_triggerdef pg_get_triggerdef
-------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER modified_a + 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')
BEFORE UPDATE OF a ON main_table +
FOR EACH ROW +
WHEN (old.a <> new.a) +
EXECUTE PROCEDURE trigger_func('modified_a')
(1 row) (1 row)
SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a'; SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
...@@ -392,12 +388,8 @@ SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table ...@@ -392,12 +388,8 @@ SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table
SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_any'; SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_any';
pg_get_triggerdef pg_get_triggerdef
---------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER modified_any + 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')
BEFORE UPDATE OF a ON main_table +
FOR EACH ROW +
WHEN (old.* IS DISTINCT FROM new.*) +
EXECUTE PROCEDURE trigger_func('modified_any')
(1 row) (1 row)
DROP TRIGGER modified_a ON main_table; DROP TRIGGER modified_a ON main_table;
...@@ -424,15 +416,6 @@ SELECT pg_get_triggerdef(oid) FROM pg_trigger WHERE tgrelid = 'main_table'::regc ...@@ -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') 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) (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; 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_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW
......
...@@ -304,7 +304,6 @@ CREATE TRIGGER after_upd_b_stmt_trig AFTER UPDATE OF b ON main_table ...@@ -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'); 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) 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 a = 50;
UPDATE main_table SET b = 10; UPDATE main_table SET b = 10;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册