Project

General

Profile

Bug #11325

SQL: CALL()

Added by Carsten Rose about 1 year ago. Updated 11 months ago.

Status:
In Progress
Priority:
Normal
Assignee:
Target version:
Start date:
16.10.2020
Due date:
% Done:

100%

Estimated time:
Discuss:

Description

Aktuell funktioniert nicht:

10.sql = CALL funktionsname

Unter https://mariadb.com/kb/en/call/ wird in den Kommentaren diskutiert was passiert wenn eine Funktion weitere Funktionen aufruft.

Es ist nicht klar wie wir die Ausgabe in QFQ implmentieren, resp. was mysqli() zurueck liefert.


Related issues

Related to QFQ - Bug #11630: Bitte check ob CALL() in 20.11.0 noch so funktioniert wie in 20.4.1PriorizeCarsten Rose25.11.2020

Actions
#1

Updated by Carsten Rose about 1 year ago

  • Description updated (diff)
#2

Updated by Christoph Fuchs about 1 year ago

Wir nutzen Remote Procedure Calls intensiv in Magnolia: die Tabelle der Fakultätsangehörigen wird direkt via die
RPC: "call userGroupFunctions('StatFM', 'en','inst,func');" generiert. Der Vorteil liegt in der dynamischen Generierung der Select und Where Bedingungen.
Je nach Parameter werden unterschiedliche Tabellen eingebunden.

#3

Updated by Carsten Rose about 1 year ago

  • Tracker changed from Support to Feature
#4

Updated by Carsten Rose about 1 year ago

  • Status changed from New to Closed
  • % Done changed from 0 to 100
#5

Updated by Carsten Rose 12 months ago

  • Target version changed from 21.8.0 to 20.11.0
#6

Updated by Carsten Rose 11 months ago

  • Related to Bug #11630: Bitte check ob CALL() in 20.11.0 noch so funktioniert wie in 20.4.1 added
#7

Updated by Carsten Rose 11 months ago

  • Status changed from Closed to In Progress
  • Target version changed from 20.11.0 to 21.8.0
  • Es ist nachwievor nicht klar was sich veraendert hat. QFQ oder MariaDB oder MySQLi.
  • Unter https://www.php.net/manual/en/mysqli.quickstart.stored-procedures.php am Ende von Example 3 steht: "Please note, that not every MYSQL server version may support preparing the CALL SQL statement."
  • Folgender Code produziert den Fehler
    # Stored Procedure
    DELIMITER $$
    CREATE DEFINER=`admino`@`localhost` PROCEDURE `fake`(IN `myVal` INT)
        NO SQL
    insert into test (`d`) values (@myVal)$$
    DELIMITER ;
    
    # QFQ Code
    10.sql = CALL fake(@myVal := 2)
    
    # Fehler der ausgeloest wird
    
    ok: $this->mysqli->prepare($sql)
    ok: $this->mysqli_stmt->execute()
    fail: $this->mysqli_stmt->get_result()
    
    
#8

Updated by Carsten Rose 11 months ago

  • Warum liefert $this->mysqli_stmt->errno keinen Fehlercode?
  • Vermutlich sollten die Rows eines CALL via STORE_RECORD verfuegbar gemacht werden.
  • Darum wurde in 8cd45997314e1612db1e9e6a35378d9bc9fd7ac3 das Resultset abgefragt.
  • Genau das abholen des Resultsets macht Probleme.
  • Aktuell scheint es aber so, das der Fehler immer ausgeloest wird - dann haette das Problem schon vorher auffallen muessen.
Erklaerung:
  • Die SP `fake()` liefert kein Resultset, das ist ein Insert. Eine SP mit `select()` funktioniert!.
#9

Updated by Carsten Rose 11 months ago

  • Tracker changed from Feature to Bug
#10

Updated by Carsten Rose 11 months ago

  • Subject changed from QFQ: CALL() to SQL: CALL()

Also available in: Atom PDF