@@ -20,6 +20,7 @@ import (
20
20
"github.com/cockroachdb/errors"
21
21
22
22
"github.com/dolthub/doltgresql/core/id"
23
+ "github.com/dolthub/doltgresql/server/plpgsql"
23
24
"github.com/dolthub/doltgresql/utils"
24
25
)
25
26
@@ -37,14 +38,23 @@ func (trigger Trigger) Serialize(ctx context.Context) ([]byte, error) {
37
38
writer .Id (trigger .Function .AsId ())
38
39
writer .Uint8 (uint8 (trigger .Timing ))
39
40
writer .Bool (trigger .ForEachRow )
40
- // TODO: writer.Unknown(trigger.When)
41
41
writer .Uint8 (uint8 (trigger .Deferrable ))
42
42
writer .Id (trigger .ReferencedTableName .AsId ())
43
43
writer .Bool (trigger .Constraint )
44
44
writer .String (trigger .OldTransitionName )
45
45
writer .String (trigger .NewTransitionName )
46
46
writer .StringSlice (trigger .Arguments )
47
47
writer .String (trigger .Definition )
48
+ // Write the WHEN operations
49
+ writer .VariableUint (uint64 (len (trigger .When )))
50
+ for _ , op := range trigger .When {
51
+ writer .Uint16 (uint16 (op .OpCode ))
52
+ writer .String (op .PrimaryData )
53
+ writer .StringSlice (op .SecondaryData )
54
+ writer .String (op .Target )
55
+ writer .Int32 (int32 (op .Index ))
56
+ writer .StringMap (op .Options )
57
+ }
48
58
// Write the events
49
59
writer .VariableUint (uint64 (len (trigger .Events )))
50
60
for _ , event := range trigger .Events {
@@ -73,14 +83,26 @@ func DeserializeTrigger(ctx context.Context, data []byte) (Trigger, error) {
73
83
t .Function = id .Function (reader .Id ())
74
84
t .Timing = TriggerTiming (reader .Uint8 ())
75
85
t .ForEachRow = reader .Bool ()
76
- // TODO: trigger.When = reader.Unknown()
77
86
t .Deferrable = TriggerDeferrable (reader .Uint8 ())
78
87
t .ReferencedTableName = id .Table (reader .Id ())
79
88
t .Constraint = reader .Bool ()
80
89
t .OldTransitionName = reader .String ()
81
90
t .NewTransitionName = reader .String ()
82
91
t .Arguments = reader .StringSlice ()
83
92
t .Definition = reader .String ()
93
+ // Read the WHEN operations
94
+ opCount := reader .VariableUint ()
95
+ t .When = make ([]plpgsql.InterpreterOperation , opCount )
96
+ for opIdx := uint64 (0 ); opIdx < opCount ; opIdx ++ {
97
+ op := plpgsql.InterpreterOperation {}
98
+ op .OpCode = plpgsql .OpCode (reader .Uint16 ())
99
+ op .PrimaryData = reader .String ()
100
+ op .SecondaryData = reader .StringSlice ()
101
+ op .Target = reader .String ()
102
+ op .Index = int (reader .Int32 ())
103
+ op .Options = reader .StringMap ()
104
+ t .When [opIdx ] = op
105
+ }
84
106
// Read the events
85
107
eventCount := reader .VariableUint ()
86
108
t .Events = make ([]TriggerEvent , eventCount )
0 commit comments