@@ -668,6 +668,111 @@ table "users" {
668
668
}
669
669
```
670
670
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
+
671
776
## Function
672
777
673
778
:::info BETA FEATURE
@@ -682,7 +787,7 @@ The `function` block allows defining SQL functions in HCL format.
682
787
<Tabs >
683
788
<TabItem label = " PostgreSQL" value = " postgres" >
684
789
685
- ``` sql
790
+ ``` hcl
686
791
function "positive" {
687
792
schema = schema.public
688
793
lang = SQL
@@ -724,7 +829,7 @@ function "sql_body2" {
724
829
</TabItem >
725
830
<TabItem label = " MySQL" value = " mysql" >
726
831
727
- ``` sql
832
+ ``` hcl
728
833
function "add2" {
729
834
schema = schema.public
730
835
arg "a" {
@@ -771,7 +876,7 @@ The `procedure` block allows defining SQL procedure in HCL format.
771
876
<Tabs >
772
877
<TabItem label = " PostgreSQL" value = " postgres" >
773
878
774
- ``` sql
879
+ ``` hcl
775
880
procedure "proc" {
776
881
schema = schema.public
777
882
lang = SQL
@@ -795,7 +900,7 @@ procedure "proc" {
795
900
</TabItem >
796
901
<TabItem label = " MySQL" value = " mysql" >
797
902
798
- ``` sql
903
+ ``` hcl
799
904
procedure "p1" {
800
905
schema = schema.public
801
906
arg "x" {
0 commit comments