Skip to content

Commit 64888a9

Browse files
authored
Merge pull request #67 from trimble-oss/add_trigger
Add trigger callbacks
2 parents 2266cd7 + ee590bc commit 64888a9

2 files changed

Lines changed: 19 additions & 10 deletions

File tree

sql/core.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,7 @@ type TriggerDefinition struct {
820820
Name string // The name of this trigger. Trigger names in a database are unique.
821821
CreateStatement string // The text of the statement to create this trigger.
822822
CreatedAt time.Time // The time that the trigger was created.
823+
Callback func() // Optional Go callback invoked after each row the trigger fires on. Not persisted.
823824
}
824825

825826
// TriggerDatabase is a Database that supports the creation and execution of triggers. The engine handles all parsing

sql/plan/trigger.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,12 @@ func (t *TriggerExecutor) CheckPrivileges(ctx *sql.Context, opChecker sql.Privil
9393
}
9494

9595
type triggerIter struct {
96-
child sql.RowIter
97-
executionLogic sql.Node
98-
triggerTime TriggerTime
99-
triggerEvent TriggerEvent
100-
ctx *sql.Context
96+
child sql.RowIter
97+
executionLogic sql.Node
98+
triggerTime TriggerTime
99+
triggerEvent TriggerEvent
100+
triggerDefinition sql.TriggerDefinition
101+
ctx *sql.Context
101102
}
102103

103104
// prependRowInPlanForTriggerExecution returns a transformation function that prepends the row given to any row source in a query
@@ -172,9 +173,15 @@ func (t *triggerIter) Next(ctx *sql.Context) (row sql.Row, returnErr error) {
172173
// For some logic statements, we want to return the result of the logic operation as our row, e.g. a Set that alters
173174
// the fields of the new row
174175
if ok, returnRow := shouldUseLogicResult(logic, logicRow); ok {
176+
if t.triggerDefinition.Callback != nil {
177+
t.triggerDefinition.Callback()
178+
}
175179
return returnRow, nil
176180
}
177181

182+
if t.triggerDefinition.Callback != nil {
183+
t.triggerDefinition.Callback()
184+
}
178185
return childRow, nil
179186
}
180187

@@ -228,11 +235,12 @@ func (t *TriggerExecutor) RowIter(ctx *sql.Context, row sql.Row) (sql.RowIter, e
228235
}
229236

230237
return &triggerIter{
231-
child: childIter,
232-
triggerTime: t.TriggerTime,
233-
triggerEvent: t.TriggerEvent,
234-
executionLogic: t.right,
235-
ctx: ctx,
238+
child: childIter,
239+
triggerTime: t.TriggerTime,
240+
triggerEvent: t.TriggerEvent,
241+
triggerDefinition: t.TriggerDefinition, // add this
242+
executionLogic: t.right,
243+
ctx: ctx,
236244
}, nil
237245
}
238246

0 commit comments

Comments
 (0)