Skip to content

Commit 0e1c6b9

Browse files
authored
doc/hcl: add triggers to schema examples (#2412)
1 parent b650570 commit 0e1c6b9

File tree

1 file changed

+109
-4
lines changed

1 file changed

+109
-4
lines changed

doc/md/atlas-schema/hcl.mdx

Lines changed: 109 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,111 @@ table "users" {
668668
}
669669
```
670670

671+
## Trigger
672+
673+
:::info BETA FEATURE
674+
Triggers are currently in beta and available to logged-in users only. To use this feature, run:
675+
```
676+
atlas login
677+
```
678+
:::
679+
680+
The `trigger` block allows defining SQL triggers in HCL format.
681+
682+
683+
<Tabs>
684+
<TabItem label="PostgreSQL" value="postgres">
685+
686+
```hcl
687+
function "audit_orders" {
688+
schema = schema.public
689+
lang = PLpgSQL
690+
return = trigger
691+
as = <<-SQL
692+
BEGIN
693+
INSERT INTO orders_audit(order_id, operation) VALUES (NEW.order_id, TG_OP);
694+
RETURN NEW;
695+
END;
696+
SQL
697+
}
698+
trigger "trigger_orders_audit" {
699+
on = table.orders
700+
after {
701+
insert = true
702+
update_of = [table.orders.column.amount]
703+
}
704+
foreach = ROW
705+
execute {
706+
function = function.audit_orders
707+
}
708+
}
709+
```
710+
711+
</TabItem>
712+
<TabItem label="MySQL" value="mysql">
713+
714+
```hcl
715+
trigger "after_orders_insert" {
716+
on = table.orders
717+
after {
718+
insert = true
719+
}
720+
foreach = ROW
721+
as = <<-SQL
722+
BEGIN
723+
INSERT INTO orders_audit(order_id, changed_at, operation)
724+
VALUES (NEW.order_id, NOW(), 'INSERT');
725+
END
726+
SQL
727+
}
728+
trigger "after_orders_update" {
729+
on = table.orders
730+
after {
731+
update = true
732+
}
733+
foreach = ROW
734+
as = <<-SQL
735+
BEGIN
736+
INSERT INTO orders_audit(order_id, changed_at, operation)
737+
VALUES (NEW.order_id, NOW(), 'UPDATE');
738+
END
739+
SQL
740+
}
741+
```
742+
743+
</TabItem>
744+
<TabItem label="SQLite" value="sqlite">
745+
746+
```hcl
747+
trigger "after_orders_insert" {
748+
on = table.orders
749+
after {
750+
insert = true
751+
}
752+
foreach = ROW
753+
as = <<-SQL
754+
BEGIN
755+
INSERT INTO orders_audit(order_id, operation) VALUES (NEW.order_id, 'INSERT');
756+
END
757+
SQL
758+
}
759+
trigger "after_orders_update" {
760+
on = table.orders
761+
after {
762+
update_of = [table.orders.column.amount]
763+
}
764+
foreach = ROW
765+
as = <<-SQL
766+
BEGIN
767+
INSERT INTO orders_audit(order_id, operation) VALUES (NEW.order_id, 'UPDATE');
768+
END
769+
SQL
770+
}
771+
```
772+
773+
</TabItem>
774+
</Tabs>
775+
671776
## Function
672777

673778
:::info BETA FEATURE
@@ -682,7 +787,7 @@ The `function` block allows defining SQL functions in HCL format.
682787
<Tabs>
683788
<TabItem label="PostgreSQL" value="postgres">
684789

685-
```sql
790+
```hcl
686791
function "positive" {
687792
schema = schema.public
688793
lang = SQL
@@ -724,7 +829,7 @@ function "sql_body2" {
724829
</TabItem>
725830
<TabItem label="MySQL" value="mysql">
726831

727-
```sql
832+
```hcl
728833
function "add2" {
729834
schema = schema.public
730835
arg "a" {
@@ -771,7 +876,7 @@ The `procedure` block allows defining SQL procedure in HCL format.
771876
<Tabs>
772877
<TabItem label="PostgreSQL" value="postgres">
773878

774-
```sql
879+
```hcl
775880
procedure "proc" {
776881
schema = schema.public
777882
lang = SQL
@@ -795,7 +900,7 @@ procedure "proc" {
795900
</TabItem>
796901
<TabItem label="MySQL" value="mysql">
797902

798-
```sql
903+
```hcl
799904
procedure "p1" {
800905
schema = schema.public
801906
arg "x" {

0 commit comments

Comments
 (0)