85 lines
3.1 KiB
PHP
85 lines
3.1 KiB
PHP
<?php
|
|
namespace nur\m;
|
|
|
|
use nur\m\base\QueryException;
|
|
|
|
/**
|
|
* Interface IQuery: une requête vers une base de données
|
|
*
|
|
* c'est aussi une instance de {@link IRowIterator} permettant de faciliter le
|
|
* parcours du résultat.
|
|
*/
|
|
interface IQuery extends IRowIterator {
|
|
/** mettre à jour l'incarnation courante */
|
|
function setIncarnation(IRowIncarnation $incarnation): IQuery;
|
|
|
|
#############################################################################
|
|
|
|
/**
|
|
* commencer une requête de sélection de lignes. les éventuelles précédentes
|
|
* requêtes et bindings sont effacés
|
|
*/
|
|
function select(?string $sql=null, ?array $filter=null): IQuery;
|
|
|
|
/**
|
|
* commencer une requête de modification de lignes. les éventuelles
|
|
* précédentes requêtes et bindings sont effacés
|
|
*/
|
|
function update(?string $sql=null, ?array $filter=null, $row=null, ?array &$results=null): IQuery;
|
|
|
|
/**
|
|
* commencer une requête de création de nouvelles lignes. les éventuelles
|
|
* précédentes requêtes et bindings sont effacés
|
|
*/
|
|
function insert(?string $sql=null, $row=null, ?array &$results=null): IQuery;
|
|
|
|
/**
|
|
* exécuter la requête qui a été construite, et retourner un itérateur sur le
|
|
* résultat:
|
|
* - une requête de type select retourne une liste de lignes
|
|
* - une requête de type update retourne une liste de tableaux ["num_rows"]
|
|
* - une requête de type insert retourne une liste de tableaux ["insert_id"]
|
|
*
|
|
* puis, si la requête est de type {@link insert()} et {@link update()} alors
|
|
* $commit indique s'il faut valider la transaction après avoir exécuté la
|
|
* requête
|
|
*/
|
|
function execute(bool $commit=false): IRowIterator;
|
|
|
|
/**
|
|
* exécuter la requête qui a été construite, et retourner un itérateur sur le
|
|
* résultat:
|
|
* - une requête de type select retourne une liste de lignes
|
|
* - une requête de type update retourne une liste de tableaux ["num_rows"]
|
|
* - une requête de type insert retourne une liste de tableaux ["insert_id"]
|
|
*
|
|
* si $filter, $row ou $results ne sont pas null, les bindings sont mis à jour
|
|
* avant que la requête soit lancée. ils doivent avoir exactement la même
|
|
* structure que les bindings qui ont été utilisés pour construire la requête.
|
|
*/
|
|
function execute2(?array $filter=null, $row=null, ?array &$results=null): IRowIterator;
|
|
|
|
/** XXX faire la recherche, retourner true s'il y a un unique résultat */
|
|
function search(?array $filter): bool;
|
|
/** XXX retourner l'unique résultat de la méthode search() */
|
|
function getRow();
|
|
|
|
/**
|
|
* Démarrer une transaction si nécessaire. Si on est dans une transaction,
|
|
* cette méthode est un NOP.
|
|
*
|
|
* En principe, une transaction est automatiquement démarrée quand c'est
|
|
* nécessaire, cette méthode ne sera donc généralement utile que dans des cas
|
|
* particuliers (comme par exemple un SELECT qui verrouille des lignes)
|
|
*
|
|
* @throws QueryException
|
|
*/
|
|
function beginTransaction(): IQuery;
|
|
|
|
/** valider la transaction */
|
|
function commit(): IQuery;
|
|
|
|
/** annuler la transaction */
|
|
function rollback(): IQuery;
|
|
}
|