@@ -21,7 +21,7 @@ const (
21
21
eventTriggerDatabaseAttr = "database"
22
22
eventTriggerSchemaAttr = "schema"
23
23
eventTriggerOwnerAttr = "owner"
24
- eventTriggerEnabledAttr = "enabled "
24
+ eventTriggerStatusAttr = "status "
25
25
)
26
26
27
27
func resourcePostgreSQLEventTrigger () * schema.Resource {
@@ -102,7 +102,7 @@ func resourcePostgreSQLEventTrigger() *schema.Resource {
102
102
ForceNew : true ,
103
103
Description : "Schema where the function is located. If not specified, the provider default schema is used." ,
104
104
},
105
- eventTriggerEnabledAttr : {
105
+ eventTriggerStatusAttr : {
106
106
Type : schema .TypeString ,
107
107
Optional : true ,
108
108
Default : "enable" ,
@@ -129,87 +129,9 @@ func resourcePostgreSQLEventTrigger() *schema.Resource {
129
129
}
130
130
131
131
func resourcePostgreSQLEventTriggerCreate (db * DBConnection , d * schema.ResourceData ) error {
132
- if err := createEventTrigger (db , d ); err != nil {
133
- return err
134
- }
135
-
136
- d .SetId (d .Get (eventTriggerNameAttr ).(string ))
137
-
138
- return nil
139
- }
140
-
141
- func resourcePostgreSQLEventTriggerUpdate (db * DBConnection , d * schema.ResourceData ) error {
142
- if err := updateEventTrigger (db , d ); err != nil {
143
- return err
144
- }
145
-
146
- d .SetId (d .Get (eventTriggerNameAttr ).(string ))
147
-
148
- return nil
149
- }
150
-
151
- func resourcePostgreSQLEventTriggerDelete (db * DBConnection , d * schema.ResourceData ) error {
152
- if err := deleteEventTrigger (db , d ); err != nil {
153
- return err
154
- }
155
-
156
- d .SetId (d .Get (eventTriggerNameAttr ).(string ))
157
-
158
- return nil
159
- }
160
-
161
- func resourcePostgreSQLEventTriggerRead (db * DBConnection , d * schema.ResourceData ) error {
162
- return readEventTrigger (db , d )
163
- }
164
-
165
- func resourcePostgreSQLEventTriggerExists (db * DBConnection , d * schema.ResourceData ) (bool , error ) {
166
- database , eventTriggerName , err := getDBEventTriggerName (d , db .client .databaseName )
167
- if err != nil {
168
- return false , err
169
- }
170
-
171
- // Check if the database exists
172
- exists , err := dbExists (db , database )
173
- if err != nil || ! exists {
174
- return false , err
175
- }
176
-
177
- txn , err := startTransaction (db .client , database )
178
- if err != nil {
179
- return false , err
180
- }
181
- defer deferredRollback (txn )
182
-
183
- err = txn .QueryRow ("SELECT evtname FROM pg_event_trigger WHERE evtname=$1" , eventTriggerName ).Scan (& eventTriggerName )
184
- switch {
185
- case err == sql .ErrNoRows :
186
- return false , nil
187
- case err != nil :
188
- return false , fmt .Errorf ("Error reading schema: %w" , err )
189
- }
190
-
191
- return true , nil
192
- }
193
-
194
- func getDBEventTriggerName (d * schema.ResourceData , databaseName string ) (string , string , error ) {
195
- database := getDatabase (d , databaseName )
196
132
eventTriggerName := d .Get (eventTriggerNameAttr ).(string )
133
+ d .SetId (eventTriggerName )
197
134
198
- // When importing, we have to parse the ID to find event trigger and database names.
199
- if eventTriggerName == "" {
200
- parsed := strings .Split (d .Id (), "." )
201
- if len (parsed ) != 2 {
202
- return "" , "" , fmt .Errorf ("schema ID %s has not the expected format 'database.event_trigger': %v" , d .Id (), parsed )
203
- }
204
- database = parsed [0 ]
205
- eventTriggerName = parsed [1 ]
206
- }
207
-
208
- return database , eventTriggerName , nil
209
- }
210
-
211
- func createEventTrigger (db * DBConnection , d * schema.ResourceData ) error {
212
- eventTriggerName := d .Get (eventTriggerNameAttr ).(string )
213
135
b := bytes .NewBufferString ("CREATE EVENT TRIGGER " )
214
136
fmt .Fprint (b , pq .QuoteIdentifier (eventTriggerName ))
215
137
@@ -252,7 +174,7 @@ func createEventTrigger(db *DBConnection, d *schema.ResourceData) error {
252
174
b = bytes .NewBufferString ("ALTER EVENT TRIGGER " )
253
175
fmt .Fprint (b , pq .QuoteIdentifier (eventTriggerName ))
254
176
255
- eventTriggerEnabled := d .Get (eventTriggerEnabledAttr ).(string )
177
+ eventTriggerEnabled := d .Get (eventTriggerStatusAttr ).(string )
256
178
fmt .Fprint (b , " " , eventTriggerEnabled )
257
179
258
180
statusSql := b .String ()
@@ -290,14 +212,15 @@ func createEventTrigger(db *DBConnection, d *schema.ResourceData) error {
290
212
return nil
291
213
}
292
214
293
- func updateEventTrigger (db * DBConnection , d * schema.ResourceData ) error {
215
+ func resourcePostgreSQLEventTriggerUpdate (db * DBConnection , d * schema.ResourceData ) error {
294
216
eventTriggerName := d .Get (eventTriggerNameAttr ).(string )
217
+ d .SetId (eventTriggerName )
295
218
296
219
// Enable or disable the event trigger
297
220
b := bytes .NewBufferString ("ALTER EVENT TRIGGER " )
298
221
fmt .Fprint (b , pq .QuoteIdentifier (eventTriggerName ))
299
222
300
- eventTriggerEnabled := d .Get (eventTriggerEnabledAttr ).(string )
223
+ eventTriggerEnabled := d .Get (eventTriggerStatusAttr ).(string )
301
224
fmt .Fprint (b , " " , eventTriggerEnabled )
302
225
303
226
statusSql := b .String ()
@@ -330,8 +253,10 @@ func updateEventTrigger(db *DBConnection, d *schema.ResourceData) error {
330
253
return nil
331
254
}
332
255
333
- func deleteEventTrigger (db * DBConnection , d * schema.ResourceData ) error {
256
+ func resourcePostgreSQLEventTriggerDelete (db * DBConnection , d * schema.ResourceData ) error {
334
257
eventTriggerName := d .Get (eventTriggerNameAttr ).(string )
258
+ d .SetId (eventTriggerName )
259
+
335
260
b := bytes .NewBufferString ("DROP EVENT TRIGGER " )
336
261
fmt .Fprint (b , pq .QuoteIdentifier (eventTriggerName ))
337
262
@@ -354,7 +279,7 @@ func deleteEventTrigger(db *DBConnection, d *schema.ResourceData) error {
354
279
return nil
355
280
}
356
281
357
- func readEventTrigger (db * DBConnection , d * schema.ResourceData ) error {
282
+ func resourcePostgreSQLEventTriggerRead (db * DBConnection , d * schema.ResourceData ) error {
358
283
database , eventTriggerName , err := getDBEventTriggerName (d , db .client .databaseName )
359
284
if err != nil {
360
285
return err
@@ -367,16 +292,15 @@ func readEventTrigger(db *DBConnection, d *schema.ResourceData) error {
367
292
`JOIN pg_catalog.pg_namespace on pg_catalog.pg_proc.pronamespace = pg_catalog.pg_namespace.oid ` +
368
293
`WHERE evtname=$1`
369
294
370
- var name , on , owner , function , schema string
371
- var enabled string
295
+ var name , on , owner , function , schema , status string
372
296
var tags []string
373
297
374
298
values := []interface {}{
375
299
& name ,
376
300
& on ,
377
301
& function ,
378
302
& schema ,
379
- & enabled ,
303
+ & status ,
380
304
(* pq .StringArray )(& tags ),
381
305
& owner ,
382
306
}
@@ -401,34 +325,29 @@ func readEventTrigger(db *DBConnection, d *schema.ResourceData) error {
401
325
}
402
326
403
327
d .SetId (name )
404
- d .Set ("name" , name )
405
- d .Set ("on" , on )
406
- d .Set ("function" , function )
407
- d .Set ("owner" , owner )
408
- d .Set ("database" , database )
409
- d .Set ("schema" , schema )
410
-
411
- switch enabled {
328
+ d .Set (eventTriggerNameAttr , name )
329
+ d .Set (eventTriggerOnAttr , on )
330
+ d .Set (eventTriggerFunctionAttr , function )
331
+ d .Set (eventTriggerOwnerAttr , owner )
332
+ d .Set (eventTriggerDatabaseAttr , database )
333
+ d .Set (eventTriggerSchemaAttr , schema )
334
+
335
+ switch status {
412
336
case "D" :
413
- d .Set ("enabled" , "disable" )
337
+ d .Set (eventTriggerStatusAttr , "disable" )
414
338
case "O" :
415
- d .Set ("enabled" , "enable" )
339
+ d .Set (eventTriggerStatusAttr , "enable" )
416
340
case "R" :
417
- d .Set ("enabled" , "enable_replica" )
341
+ d .Set (eventTriggerStatusAttr , "enable_replica" )
418
342
case "A" :
419
- d .Set ("enabled" , "enable_always" )
343
+ d .Set (eventTriggerStatusAttr , "enable_always" )
420
344
}
421
345
422
- // TODO: maybe it's better to add a struct
423
- // with types instead of an interface{}?
424
346
var filters []interface {}
425
347
426
348
if len (tags ) > 0 {
427
349
var values []string
428
-
429
- for _ , tag := range tags {
430
- values = append (values , tag )
431
- }
350
+ values = append (values , tags ... )
432
351
433
352
filter := map [string ]interface {}{
434
353
"variable" : "TAG" ,
@@ -438,7 +357,53 @@ func readEventTrigger(db *DBConnection, d *schema.ResourceData) error {
438
357
filters = append (filters , filter )
439
358
}
440
359
441
- d .Set ("filter" , filters )
360
+ d .Set (eventTriggerFilterAttr , filters )
442
361
443
362
return nil
444
363
}
364
+
365
+ func resourcePostgreSQLEventTriggerExists (db * DBConnection , d * schema.ResourceData ) (bool , error ) {
366
+ database , eventTriggerName , err := getDBEventTriggerName (d , db .client .databaseName )
367
+ if err != nil {
368
+ return false , err
369
+ }
370
+
371
+ // Check if the database exists
372
+ exists , err := dbExists (db , database )
373
+ if err != nil || ! exists {
374
+ return false , err
375
+ }
376
+
377
+ txn , err := startTransaction (db .client , database )
378
+ if err != nil {
379
+ return false , err
380
+ }
381
+ defer deferredRollback (txn )
382
+
383
+ err = txn .QueryRow ("SELECT evtname FROM pg_event_trigger WHERE evtname=$1" , eventTriggerName ).Scan (& eventTriggerName )
384
+ switch {
385
+ case err == sql .ErrNoRows :
386
+ return false , nil
387
+ case err != nil :
388
+ return false , fmt .Errorf ("error reading schema: %w" , err )
389
+ }
390
+
391
+ return true , nil
392
+ }
393
+
394
+ func getDBEventTriggerName (d * schema.ResourceData , databaseName string ) (string , string , error ) {
395
+ database := getDatabase (d , databaseName )
396
+ eventTriggerName := d .Get (eventTriggerNameAttr ).(string )
397
+
398
+ // When importing, we have to parse the ID to find event trigger and database names.
399
+ if eventTriggerName == "" {
400
+ parsed := strings .Split (d .Id (), "." )
401
+ if len (parsed ) != 2 {
402
+ return "" , "" , fmt .Errorf ("schema ID %s has not the expected format 'database.event_trigger': %v" , d .Id (), parsed )
403
+ }
404
+ database = parsed [0 ]
405
+ eventTriggerName = parsed [1 ]
406
+ }
407
+
408
+ return database , eventTriggerName , nil
409
+ }
0 commit comments