pretty-printed-trigger_20100119.patch
application/octet-stream
Filename: pretty-printed-trigger_20100119.patch
Type: application/octet-stream
Part: 0
Message:
Re: Pretty printed trigger in psql
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| src/backend/utils/adt/ruleutils.c | 9 | 16 |
| src/bin/psql/describe.c | 2 | 1 |
| src/test/regress/expected/triggers.out | 6 | 23 |
| src/test/regress/sql/triggers.sql | 0 | 1 |
diff -cprN head/src/backend/utils/adt/ruleutils.c work/src/backend/utils/adt/ruleutils.c
*** head/src/backend/utils/adt/ruleutils.c 2010-01-18 09:26:23.915594000 +0900
--- work/src/backend/utils/adt/ruleutils.c 2010-01-19 09:35:29.995725872 +0900
*************** pg_get_triggerdef_worker(Oid trigid, boo
*** 518,527 ****
initStringInfo(&buf);
tgname = NameStr(trigrec->tgname);
! 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");
--- 518,526 ----
initStringInfo(&buf);
tgname = NameStr(trigrec->tgname);
! appendStringInfo(&buf, "CREATE %sTRIGGER %s ",
OidIsValid(trigrec->tgconstraint) ? "CONSTRAINT " : "",
quote_identifier(tgname));
if (TRIGGER_FOR_BEFORE(trigrec->tgtype))
appendStringInfo(&buf, "BEFORE");
*************** pg_get_triggerdef_worker(Oid trigid, boo
*** 573,605 ****
appendStringInfo(&buf, " TRUNCATE");
findx++;
}
! 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",
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");
else
! appendStringInfo(&buf, "IMMEDIATE");
! appendStringInfoString(&buf, pretty ? "\n " : " ");
}
if (TRIGGER_FOR_ROW(trigrec->tgtype))
! appendStringInfo(&buf, "FOR EACH ROW");
else
! appendStringInfo(&buf, "FOR EACH STATEMENT");
! appendStringInfoString(&buf, pretty ? "\n " : " ");
/* If the trigger has a WHEN qualification, add that */
value = fastgetattr(ht_trig, Anum_pg_trigger_tgqual,
--- 572,598 ----
appendStringInfo(&buf, " TRUNCATE");
findx++;
}
! appendStringInfo(&buf, " ON %s ",
generate_relation_name(trigrec->tgrelid, NIL));
if (OidIsValid(trigrec->tgconstraint))
{
if (OidIsValid(trigrec->tgconstrrelid))
! appendStringInfo(&buf, "FROM %s ",
generate_relation_name(trigrec->tgconstrrelid, NIL));
if (!trigrec->tgdeferrable)
appendStringInfo(&buf, "NOT ");
appendStringInfo(&buf, "DEFERRABLE INITIALLY ");
if (trigrec->tginitdeferred)
! appendStringInfo(&buf, "DEFERRED ");
else
! appendStringInfo(&buf, "IMMEDIATE ");
}
if (TRIGGER_FOR_ROW(trigrec->tgtype))
! appendStringInfo(&buf, "FOR EACH ROW ");
else
! appendStringInfo(&buf, "FOR EACH STATEMENT ");
/* If the trigger has a WHEN qualification, add that */
value = fastgetattr(ht_trig, Anum_pg_trigger_tgqual,
*************** pg_get_triggerdef_worker(Oid trigid, boo
*** 643,654 ****
context.windowClause = NIL;
context.windowTList = NIL;
context.varprefix = true;
! context.prettyFlags = pretty ? PRETTYFLAG_PAREN | PRETTYFLAG_INDENT : 0;
context.indentLevel = PRETTYINDENT_STD;
get_rule_expr(qual, &context, false);
! appendStringInfo(&buf, ")%s", pretty ? "\n " : " ");
}
appendStringInfo(&buf, "EXECUTE PROCEDURE %s(",
--- 636,647 ----
context.windowClause = NIL;
context.windowTList = NIL;
context.varprefix = true;
! context.prettyFlags = pretty ? PRETTYFLAG_PAREN : 0;
context.indentLevel = PRETTYINDENT_STD;
get_rule_expr(qual, &context, false);
! appendStringInfo(&buf, ") ");
}
appendStringInfo(&buf, "EXECUTE PROCEDURE %s(",
diff -cprN head/src/bin/psql/describe.c work/src/bin/psql/describe.c
*** head/src/bin/psql/describe.c 2010-01-18 09:26:23.915594000 +0900
--- work/src/bin/psql/describe.c 2010-01-19 09:29:55.432814944 +0900
*************** describeOneTableDetails(const char *sche
*** 1854,1863 ****
{
printfPQExpBuffer(&buf,
"SELECT t.tgname, "
! "pg_catalog.pg_get_triggerdef(t.oid), "
"t.tgenabled\n"
"FROM pg_catalog.pg_trigger t\n"
"WHERE t.tgrelid = '%s' AND ",
oid);
if (pset.sversion >= 80500)
appendPQExpBuffer(&buf, "NOT t.tgisinternal");
--- 1854,1864 ----
{
printfPQExpBuffer(&buf,
"SELECT t.tgname, "
! "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 -cprN head/src/test/regress/expected/triggers.out work/src/test/regress/expected/triggers.out
*** head/src/test/regress/expected/triggers.out 2009-11-24 10:04:57.883822000 +0900
--- work/src/test/regress/expected/triggers.out 2010-01-19 09:29:55.433814774 +0900
*************** SELECT * FROM main_table ORDER BY a, b;
*** 375,387 ****
(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')
(1 row)
SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
--- 375,383 ----
(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')
(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) FRO
*** 391,403 ****
(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')
(1 row)
DROP TRIGGER modified_a ON main_table;
--- 387,395 ----
(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')
(1 row)
DROP TRIGGER modified_a ON main_table;
*************** SELECT pg_get_triggerdef(oid) FROM pg_tr
*** 424,438 ****
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
--- 416,421 ----
diff -cprN head/src/test/regress/sql/triggers.sql work/src/test/regress/sql/triggers.sql
*** head/src/test/regress/sql/triggers.sql 2009-11-24 10:04:57.883822000 +0900
--- work/src/test/regress/sql/triggers.sql 2010-01-19 09:29:55.433814774 +0900
*************** CREATE TRIGGER after_upd_b_stmt_trig AFT
*** 304,310 ****
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;
--- 304,309 ----