mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
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.
This commit is contained in:
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
* 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,
|
|||||||
{
|
{
|
||||||
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");
|
||||||
|
@ -375,13 +375,9 @@ SELECT * FROM main_table ORDER BY a, b;
|
|||||||
(8 rows)
|
(8 rows)
|
||||||
|
|
||||||
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';
|
||||||
@ -391,13 +387,9 @@ SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user