MCPcopy Create free account
hub / github.com/dolthub/doltgresql / RowIter

Method RowIter

server/node/create_trigger.go:89–142  ·  view source on GitHub ↗

RowIter implements the interface sql.ExecSourceRel.

(ctx *sql.Context, r sql.Row)

Source from the content-addressed store, hash-verified

87
88// RowIter implements the interface sql.ExecSourceRel.
89func (c *CreateTrigger) RowIter(ctx *sql.Context, r sql.Row) (sql.RowIter, error) {
90 schema, err := core.GetSchemaName(ctx, nil, c.Name.SchemaName())
91 if err != nil {
92 return nil, err
93 }
94 triggerID := id.NewTrigger(schema, c.Name.TableName(), c.Name.TriggerName())
95 relationType, err := core.GetRelationType(ctx, schema, c.Name.TableName())
96 if err != nil {
97 return nil, err
98 }
99 if relationType == core.RelationType_DoesNotExist {
100 return nil, errors.Errorf(`relation "%s" does not exist`, c.Name.TableName())
101 } else if relationType != core.RelationType_Table {
102 return nil, errors.Errorf(`"%s" is not a table or view`, c.Name.TableName())
103 }
104 function, err := loadFunction(ctx, nil, c.Function)
105 if err != nil {
106 return nil, err
107 }
108 if !function.ID.IsValid() {
109 return nil, errors.Errorf("function %s() does not exist", c.Function.FunctionName())
110 }
111 if function.ReturnType != pgtypes.Trigger.ID {
112 return nil, errors.Errorf(`function %s must return type trigger`, function.ID.FunctionName())
113 }
114 trigCollection, err := core.GetTriggersCollectionFromContext(ctx, ctx.GetCurrentDatabase())
115 if err != nil {
116 return nil, err
117 }
118 if c.Replace && trigCollection.HasTrigger(ctx, triggerID) {
119 if err = trigCollection.DropTrigger(ctx, triggerID); err != nil {
120 return nil, err
121 }
122 }
123 err = trigCollection.AddTrigger(ctx, triggers.Trigger{
124 ID: triggerID,
125 Function: function.ID,
126 Timing: c.Timing,
127 Events: c.Events,
128 ForEachRow: c.ForEachRow,
129 When: c.When,
130 Deferrable: triggers.TriggerDeferrable_NotDeferrable,
131 ReferencedTableName: "",
132 Constraint: false,
133 OldTransitionName: "",
134 NewTransitionName: "",
135 Arguments: c.Arguments,
136 Definition: c.Definition,
137 })
138 if err != nil {
139 return nil, err
140 }
141 return sql.RowsToRowIter(), nil
142}
143
144// Schema implements the interface sql.ExecSourceRel.
145func (c *CreateTrigger) Schema(ctx *sql.Context) sql.Schema {

Callers

nothing calls this directly

Calls 14

GetSchemaNameFunction · 0.92
NewTriggerFunction · 0.92
GetRelationTypeFunction · 0.92
loadFunctionFunction · 0.85
TriggerNameMethod · 0.80
HasTriggerMethod · 0.80
DropTriggerMethod · 0.80
AddTriggerMethod · 0.80
ErrorfMethod · 0.65
SchemaNameMethod · 0.45
TableNameMethod · 0.45

Tested by

no test coverage detected