MCPcopy Create free account
hub / github.com/bytebase/bytebase / getTriggers

Function getTriggers

backend/plugin/db/oracle/sync.go:217–276  ·  view source on GitHub ↗
(txn *sql.Tx, schemaName string)

Source from the content-addressed store, hash-verified

215}
216
217func getTriggers(txn *sql.Tx, schemaName string) (map[db.TableKey][]*storepb.TriggerMetadata, map[db.TableKey][]*storepb.TriggerMetadata, error) {
218 tableTriggerMap := make(map[db.TableKey][]*storepb.TriggerMetadata)
219 viewTriggerMap := make(map[db.TableKey][]*storepb.TriggerMetadata)
220
221 // Get trigger comments
222 triggerCommentMap, err := getTriggerComments(txn, schemaName)
223 if err != nil {
224 return nil, nil, errors.Wrapf(err, "failed to get trigger comments")
225 }
226
227 query := fmt.Sprintf(`
228 SELECT TRIGGER_NAME, TABLE_NAME, DESCRIPTION, TRIGGER_BODY, BASE_OBJECT_TYPE, TRIGGER_TYPE, TRIGGERING_EVENT
229 FROM sys.all_triggers
230 WHERE OWNER = '%s' AND TABLE_NAME is NOT NULL AND (BASE_OBJECT_TYPE = 'TABLE' OR BASE_OBJECT_TYPE = 'VIEW')
231 ORDER BY TRIGGER_NAME`, schemaName)
232
233 slog.Debug("running get triggers query")
234 rows, err := txn.Query(query)
235 if err != nil {
236 return nil, nil, util.FormatErrorWithQuery(err, query)
237 }
238 defer rows.Close()
239
240 for rows.Next() {
241 var triggerName, tableName, description, triggerBody, baseObjectType, triggerType, triggeringEvent sql.NullString
242 if err := rows.Scan(&triggerName, &tableName, &description, &triggerBody, &baseObjectType, &triggerType, &triggeringEvent); err != nil {
243 return nil, nil, err
244 }
245 if !triggerName.Valid || !tableName.Valid || !description.Valid || !triggerBody.Valid || !baseObjectType.Valid {
246 continue
247 }
248 key := db.TableKey{Schema: schemaName, Table: tableName.String}
249 trigger := &storepb.TriggerMetadata{
250 Name: triggerName.String,
251 Body: constructTriggerBody(description.String, triggerBody.String),
252 }
253 if triggerType.Valid {
254 trigger.Timing = triggerType.String
255 }
256 if triggeringEvent.Valid {
257 trigger.Event = triggeringEvent.String
258 }
259 // Add trigger comment if available
260 triggerKey := db.TableKey{Schema: schemaName, Table: triggerName.String}
261 if comment, ok := triggerCommentMap[triggerKey]; ok {
262 trigger.Comment = comment
263 }
264
265 if baseObjectType.String == "TABLE" {
266 tableTriggerMap[key] = append(tableTriggerMap[key], trigger)
267 } else {
268 viewTriggerMap[key] = append(viewTriggerMap[key], trigger)
269 }
270 }
271 if err := rows.Err(); err != nil {
272 return nil, nil, util.FormatErrorWithQuery(err, query)
273 }
274

Callers 1

SyncDBSchemaMethod · 0.70

Calls 8

FormatErrorWithQueryFunction · 0.92
getTriggerCommentsFunction · 0.85
constructTriggerBodyFunction · 0.85
DebugMethod · 0.80
ScanMethod · 0.80
QueryMethod · 0.65
CloseMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected