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;
 | 
						|
}
 |