two rules have the same semantics:
ON UPDATE TO emp.salary WHERE emp.name = "Joe"
- DO UPDATE emp ( ... ) WHERE ...
+ DO
+ UPDATE emp ( ... ) WHERE ...
ON UPDATE TO emp-1.salary WHERE emp-2.name = "Joe"
- DO UPDATE emp-3 ( ... ) WHERE ...
+ DO
+ UPDATE emp-3 ( ... ) WHERE ...
Each rule can have the optional tag INSTEAD.
CREATE RULE bad_rule_combination_1 AS
ON SELECT TO emp
- DO INSTEAD SELECT TO toyemp;
+ DO INSTEAD
+ SELECT TO toyemp;
CREATE RULE bad_rule_combination_2 AS
ON SELECT TO toyemp
- DO INSTEAD SELECT TO emp;
+ DO INSTEAD
+ SELECT TO emp;
This attempt to retrieve from EMP will cause
CREATE RULE example_1 AS
ON UPDATE emp.salary WHERE current.name = "Joe"
- DO UPDATE emp (salary = new.salary)
- WHERE emp.name = "Sam";
+ DO
+ UPDATE emp
+ SET salary = new.salary
+ WHERE emp.name = "Sam";
At the time Joe receives a salary adjustment, the event
ON SELECT TO EMP.salary
WHERE current.name = "Bill"
DO INSTEAD
- SELECT (emp.salary) from emp
- WHERE emp.name = "Joe";
+ SELECT emp.salary
+ FROM emp
+ WHERE emp.name = "Joe";
the current user):
CREATE RULE example_3 AS
- ON SELECT TO emp.salary
- WHERE current.dept = "shoe" AND current_user = "Joe"
+ ON
+ SELECT TO emp.salary
+ WHERE current.dept = "shoe" AND current_user = "Joe"
DO INSTEAD NOTHING;
CREATE RULE example_4 AS
ON SELECT TO toyemp
DO INSTEAD
- SELECT (emp.name, emp.salary) FROM emp
+ SELECT (emp.name, emp.salary)
+ FROM emp
WHERE emp.dept = "toy";
CREATE RULE example_5 AS
ON INERT TO emp WHERE new.salary > 5000
- DO UPDATE NEWSET salary = 5000;
+ DO
+ UPDATE NEWSET salary = 5000;