Actions
Feature #5345
openReport: UPDATE / INSERT / DELETE statements should trigger subqueries, depending on the result.
Start date:
03.02.2018
Due date:
% Done:
0%
Estimated time:
3.00 h
Discuss:
Prio Planung:
No
Vote:
CR
Description
Wunsch¶
Falls ein UPDATE [keine] Records veraendert, waere es gut wenn stattdessen subqueries ausgefuehrt werden - und die Entscheidung wird in PHP evaluiert, ohne das eine weitere Query abgefeuert werden muss. Vergleichbar mit althead (wird ausgefuehrt sobald das sql keine Records selektiert).
Damit wuerden Queries der Form UPDATE ... WHERE 1=0 (mit '0={{<level>.line.count}}') gar nicht erst gefeuert.
Vorschlag¶
10.sql = UPDATE .... 10.affected = 0|1|>0|>1|always 20.sql = INSERT ... SELECT ... 20.affected = 0|1|>0|>1|always 30.sql = DELETE ... 40.sql = SELECT
Bsp. 1)
10.sql = UPDATE ... WHERE 1=0 10.affected = >0 10.head = update 10.althead = kein update
Ausgabe: kein update
Bsp. 2)
10.sql = UPDATE Person SET name='john' LIMIT 1 10.affected = >0 10.head = update 10.althead = kein update
Ausgabe: update
Anmerkungen¶
- Der Wert von affected kann auch eine Query der From '10.affected = {{SELECT IF }}' sein.
- 'affected' wird ausgewertet nachdem query gefeuert wurde.
- head / tail / althead / alttail / altsql wird in Abhaengigkeit von affected ausgegeben.
- affected kann auch bei 'SELECT' angegeben werden. Mit 'affected=always' wird child einmal getriggert, auch wenn das keine records selektiert wurden.
- Hinweis: bei updates die erfolgreich sind (Record existiert), aber keine Veraenderung stattgefunden hat, kommt vermutlich 'affected_rows=0' zurueck. Bei folgendem Klassiker sollte die Aktualisierung von `modified` dem vorbeugen (BTW: die Verwendung von altsql ist oben nicht beschrieben, waere aber nett)
10 { sql = UPDATE EzBookingImport SET `data`='{{dataC:R}}', modified=modified + INTERVAL 1 SEC WHERE ez_start='{{thisMonday:R}}' AND ez_objectID='{{ez_objectID:R}}' altsql = INSERT INTO EzBookingImport (`data`, `ez_start`, `ez_objectID`, `raum_id`) VALUES ('{{dataC:R}}', '{{thisMonday:R}}' , '{{ez_objectID:R}}', '{{raId}}' ) }
Related issues
Updated by Carsten Rose over 4 years ago
- Status changed from New to Some day maybe
Updated by Carsten Rose about 4 years ago
- Target version changed from next8 to next9
Updated by Carsten Rose almost 4 years ago
- Subject changed from Report: UPDATE / INSERT statements should trigger subqueries, depending on the result. to Report: UPDATE / INSERT / DELETE statements should trigger subqueries, depending on the result.
- Description updated (diff)
- Status changed from Some day maybe to New
- Assignee set to Carsten Rose
- Target version changed from next9 to next5
Updated by Zhoujie Li 3 months ago
- Related to Feature #17319: Report Notation 2.1: 'if then else' / 'for' / 'while' added
Updated by Zhoujie Li 3 months ago
- Related to Feature #17441: Report Notation 2.2: fireIf :Statement to trigger the root level query / fireSubIf : Statement to trigger the subquery added
Actions