Skip to content

Commit 6b83e13

Browse files
craig[bot]OriSavir
andcommitted
Merge #147836
147836: sql: SHOW CREATE ALL TRIGGERS r=OriSavir a=OriSavir Adding SHOW CREATE ALL TRIGGERS. Includes parser syntax additions and generator logic changes. Additionally included adding the `crdb_interal.create_trigger_statements` table and implementing table_id as a virtual index (since trigger_id are unique only within tables). Release note (sql): SHOW CREATE ALL TRIGGERS is now a valid query with correct output. Epic: CRDB-49582 Resolves #144709 Co-authored-by: Oriel Savir <[email protected]>
2 parents 53814aa + 45340d6 commit 6b83e13

File tree

40 files changed

+801
-258
lines changed

40 files changed

+801
-258
lines changed

docs/generated/sql/bnf/show_create_stmt.bnf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ show_create_stmt ::=
22
'SHOW' 'CREATE' object_name opt_show_create_format_options
33
| 'SHOW' 'CREATE' 'ALL' 'SCHEMAS'
44
| 'SHOW' 'CREATE' 'ALL' 'TABLES'
5+
| 'SHOW' 'CREATE' 'ALL' 'TRIGGERS'
56
| 'SHOW' 'CREATE' 'ALL' 'TYPES'
67
| 'SHOW' 'CREATE' 'ALL' 'ROUTINES'

docs/generated/sql/bnf/stmt_block.bnf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,7 @@ show_create_stmt ::=
854854
'SHOW' 'CREATE' table_name opt_show_create_format_options
855855
| 'SHOW' 'CREATE' 'ALL' 'SCHEMAS'
856856
| 'SHOW' 'CREATE' 'ALL' 'TABLES'
857+
| 'SHOW' 'CREATE' 'ALL' 'TRIGGERS'
857858
| 'SHOW' 'CREATE' 'ALL' 'TYPES'
858859
| 'SHOW' 'CREATE' 'ALL' 'ROUTINES'
859860

pkg/ccl/logictestccl/tests/3node-tenant/generated_test.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/ccl/logictestccl/tests/local-read-committed/generated_test.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/ccl/logictestccl/tests/local-repeatable-read/generated_test.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/cli/testdata/zip/file-filters/testzip_file_filters

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ debug/crdb_internal.create_function_statements.txt
1414
debug/crdb_internal.create_procedure_statements.txt
1515
debug/crdb_internal.create_schema_statements.txt
1616
debug/crdb_internal.create_statements.txt
17+
debug/crdb_internal.create_trigger_statements.txt
1718
debug/crdb_internal.create_type_statements.txt
1819
debug/crdb_internal.default_privileges.txt
1920
debug/crdb_internal.index_usage_statistics.txt
@@ -156,6 +157,7 @@ debug/crdb_internal.create_function_statements.txt
156157
debug/crdb_internal.create_procedure_statements.txt
157158
debug/crdb_internal.create_schema_statements.txt
158159
debug/crdb_internal.create_statements.txt
160+
debug/crdb_internal.create_trigger_statements.txt
159161
debug/crdb_internal.create_type_statements.txt
160162
debug/crdb_internal.default_privileges.txt
161163
debug/crdb_internal.index_usage_statistics.txt
@@ -305,6 +307,7 @@ debug/crdb_internal.create_function_statements.txt
305307
debug/crdb_internal.create_procedure_statements.txt
306308
debug/crdb_internal.create_schema_statements.txt
307309
debug/crdb_internal.create_statements.txt
310+
debug/crdb_internal.create_trigger_statements.txt
308311
debug/crdb_internal.create_type_statements.txt
309312
debug/crdb_internal.default_privileges.txt
310313
debug/crdb_internal.index_usage_statistics.txt
@@ -448,6 +451,7 @@ debug/crdb_internal.create_function_statements.txt
448451
debug/crdb_internal.create_procedure_statements.txt
449452
debug/crdb_internal.create_schema_statements.txt
450453
debug/crdb_internal.create_statements.txt
454+
debug/crdb_internal.create_trigger_statements.txt
451455
debug/crdb_internal.create_type_statements.txt
452456
debug/crdb_internal.default_privileges.txt
453457
debug/crdb_internal.index_usage_statistics.txt
@@ -559,6 +563,7 @@ debug/crdb_internal.create_function_statements.txt
559563
debug/crdb_internal.create_procedure_statements.txt
560564
debug/crdb_internal.create_schema_statements.txt
561565
debug/crdb_internal.create_statements.txt
566+
debug/crdb_internal.create_trigger_statements.txt
562567
debug/crdb_internal.create_type_statements.txt
563568
debug/crdb_internal.default_privileges.txt
564569
debug/crdb_internal.index_usage_statistics.txt

pkg/cli/zip_table_registry.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,19 @@ var zipInternalTablesPerCluster = DebugZipTableRegistry{
272272
"crdb_internal.hide_sql_constants(create_statement) as create_statement",
273273
},
274274
},
275+
`"".crdb_internal.create_trigger_statements`: {
276+
nonSensitiveCols: NonSensitiveColumns{
277+
"database_id",
278+
"database_name",
279+
"schema_id",
280+
"schema_name",
281+
"table_id",
282+
"table_name",
283+
"trigger_id",
284+
"trigger_name",
285+
"crdb_internal.hide_sql_constants(create_statement) as create_statement",
286+
},
287+
},
275288
`"".crdb_internal.create_procedure_statements`: {
276289
nonSensitiveCols: NonSensitiveColumns{
277290
"database_id",

pkg/cli/zip_upload_table_dumps.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ var clusterWideTableDumps = map[string]columnParserMap{
9999
"crdb_internal.create_type_statements.txt": {},
100100
"crdb_internal.create_procedure_statements.txt": {},
101101
"crdb_internal.create_function_statements.txt": {},
102+
"crdb_internal.create_trigger_statements.txt": {},
102103
"crdb_internal.logical_replication_spans.txt": {},
103104
"crdb_internal.cluster_replication_spans.txt": {},
104105
"system.protected_ts_records.txt": {},

pkg/sql/crdb_internal.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ var crdbInternal = virtualSchema{
143143
catconstants.CrdbInternalClusterSettingsTableID: crdbInternalClusterSettingsTable,
144144
catconstants.CrdbInternalClusterStmtStatsTableID: crdbInternalClusterStmtStatsTable,
145145
catconstants.CrdbInternalCreateFunctionStmtsTableID: crdbInternalCreateFunctionStmtsTable,
146+
catconstants.CrdbInternalCreateTriggerStmtsTableID: crdbInternalCreateTriggerStmtsTable,
146147
catconstants.CrdbInternalCreateProcedureStmtsTableID: crdbInternalCreateProcedureStmtsTable,
147148
catconstants.CrdbInternalCreateSchemaStmtsTableID: crdbInternalCreateSchemaStmtsTable,
148149
catconstants.CrdbInternalCreateStmtsTableID: crdbInternalCreateStmtsTable,
@@ -3943,6 +3944,104 @@ CREATE TABLE crdb_internal.create_procedure_statements (
39433944
populate: createRoutinePopulate(true /* procedure */),
39443945
}
39453946

3947+
func createTriggerPopulate(
3948+
ctx context.Context, p *planner, db catalog.DatabaseDescriptor, addRow func(...tree.Datum) error,
3949+
) error {
3950+
// Skip virtual tables by setting virtualOpts to hideVirtual since they do not have triggers.
3951+
options := forEachTableDescOptions{virtualOpts: hideVirtual}
3952+
return forEachTableDesc(ctx, p, db, options, func(ctx context.Context, tblCtx tableDescContext) error {
3953+
tbl := tblCtx.table
3954+
curDB := tblCtx.database
3955+
sc := tblCtx.schema
3956+
3957+
for _, trig := range tbl.GetTriggers() {
3958+
sql, err := renderCreateTriggerStatement(ctx, p, &trig, tbl)
3959+
if err != nil {
3960+
return err
3961+
}
3962+
3963+
err = addRow(
3964+
tree.NewDInt(tree.DInt(curDB.GetID())), // database_id
3965+
tree.NewDString(curDB.GetName()), // database_name
3966+
tree.NewDInt(tree.DInt(sc.GetID())), // schema_id
3967+
tree.NewDString(sc.GetName()), // schema_name
3968+
tree.NewDInt(tree.DInt(tbl.GetID())), // table_id
3969+
tree.NewDString(tbl.GetName()), // table_name
3970+
tree.NewDInt(tree.DInt(trig.ID)), // trigger_id
3971+
tree.NewDString(trig.Name), // trigger_name
3972+
tree.NewDString(sql), // create_statement
3973+
)
3974+
if err != nil {
3975+
return err
3976+
}
3977+
}
3978+
return nil
3979+
},
3980+
)
3981+
}
3982+
3983+
var crdbInternalCreateTriggerStmtsTable = virtualSchemaTable{
3984+
comment: "CREATE statements for all user-defined triggers.",
3985+
schema: `
3986+
CREATE TABLE crdb_internal.create_trigger_statements (
3987+
database_id INT,
3988+
database_name STRING,
3989+
schema_id INT,
3990+
schema_name STRING,
3991+
table_id INT,
3992+
table_name STRING,
3993+
trigger_id INT,
3994+
trigger_name STRING,
3995+
create_statement STRING,
3996+
INDEX (table_id)
3997+
)`,
3998+
populate: createTriggerPopulate,
3999+
indexes: []virtualIndex{
4000+
{
4001+
populate: func(
4002+
ctx context.Context,
4003+
unwrappedConstraint tree.Datum,
4004+
p *planner,
4005+
db catalog.DatabaseDescriptor,
4006+
addRow func(...tree.Datum) error,
4007+
) (matched bool, err error) {
4008+
tableID := descpb.ID(tree.MustBeDInt(unwrappedConstraint))
4009+
tableDesc, err := p.LookupTableByID(ctx, tableID)
4010+
if err != nil || tableDesc == nil {
4011+
return false, err
4012+
}
4013+
triggers := tableDesc.GetTriggers()
4014+
schemaID := tableDesc.GetParentSchemaID()
4015+
sc, err := p.LookupSchemaByID(ctx, schemaID)
4016+
if err != nil {
4017+
return false, err
4018+
}
4019+
for _, trig := range triggers {
4020+
sql, err := renderCreateTriggerStatement(ctx, p, &trig, tableDesc)
4021+
if err != nil {
4022+
return false, err
4023+
}
4024+
err = addRow(
4025+
tree.NewDInt(tree.DInt(db.GetID())),
4026+
tree.NewDString(db.GetName()),
4027+
tree.NewDInt(tree.DInt(sc.GetID())),
4028+
tree.NewDString(sc.GetName()),
4029+
tree.NewDInt(tree.DInt(tableDesc.GetID())),
4030+
tree.NewDString(tableDesc.GetName()),
4031+
tree.NewDInt(tree.DInt(trig.ID)),
4032+
tree.NewDString(trig.Name),
4033+
tree.NewDString(sql),
4034+
)
4035+
if err != nil {
4036+
return false, err
4037+
}
4038+
}
4039+
return true, nil
4040+
},
4041+
},
4042+
},
4043+
}
4044+
39464045
// Prepare the row populate function.
39474046
var typeView = tree.NewDString("view")
39484047
var typeTable = tree.NewDString("table")

pkg/sql/delegate/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ go_library(
3535
"show_table.go",
3636
"show_tables.go",
3737
"show_transactions.go",
38+
"show_triggers.go",
3839
"show_types.go",
3940
"show_var.go",
4041
"show_zone_config.go",

0 commit comments

Comments
 (0)