Project

General

Profile

Actions

Feature #5345

open

Report: UPDATE / INSERT / DELETE statements should trigger subqueries, depending on the result.

Added by Carsten Rose over 6 years ago. Updated 11 days ago.

Status:
Priorize
Priority:
Normal
Assignee:
Zhoujie Li
Target version:
Start date:
03.02.2018
Due date:
% Done:

0%

Estimated time:
3.00 h
Discuss:
Prio Planung:
No
Vote:

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

Related to QFQ - Feature #17319: Report Notation 2.1: 'if then else' / 'for' / 'while'NewQFQ Developer18.11.2023

Actions
Related to QFQ - Feature #17441: Report Notation 2.2: fireIf :Statement to trigger the root level query / fireSubIf : Statement to trigger the subqueryPriorizeZhoujie Li07.12.2023

Actions
Actions

Also available in: Atom PDF