184 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\m;
 | 
						|
 | 
						|
use nur\m\base\QueryException;
 | 
						|
 | 
						|
/**
 | 
						|
 * Interface IConn: une connexion à une base de données
 | 
						|
 */
 | 
						|
interface IConn {
 | 
						|
  /**
 | 
						|
   * obtenir des infos sur la connexion. le tableau retour fait au moins 3
 | 
						|
   * éléments: [$dbname, $dbuser, $dbpass]
 | 
						|
   */
 | 
						|
  function getInfos(): array;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Démarrer une transaction si nécessaire. Si on est dans une transaction,
 | 
						|
   * cette méthode est un NOP.
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function beginTransaction(): void;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Valider la transaction en cours, le cas échéant
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function commit(): void;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Annuler la transaction en cours, le cas échéant
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function rollback(): void;
 | 
						|
 | 
						|
  const EXECUTE_PARAMS_SCHEMA = [
 | 
						|
    "transaction" => [null, false, "faut-il automatiquement démarrer une transaction pour cette requête?"],
 | 
						|
    "stmt" => [null, true, "faut-il retourner un objet 'statement' pour récupérer le résultat de la requête?"],
 | 
						|
    "num_rows" => [null, false, "faut-il retourner le nombre de ligne affectées?"],
 | 
						|
    "last_insert_id" => [null, false, "faut-il retourner l'id de la dernière ligne ajoutée?"],
 | 
						|
  ];
 | 
						|
 | 
						|
  const EXECUTE_PARAMS_DQL = [
 | 
						|
    "transaction" => false,
 | 
						|
    "stmt" => true,
 | 
						|
    "num_rows" => false,
 | 
						|
    "last_insert_id" => false,
 | 
						|
  ];
 | 
						|
 | 
						|
  const EXECUTE_PARAMS_DML_UPDATE = [
 | 
						|
    "transaction" => true,
 | 
						|
    "stmt" => false,
 | 
						|
    "num_rows" => true,
 | 
						|
    "last_insert_id" => false,
 | 
						|
  ];
 | 
						|
 | 
						|
  const EXECUTE_PARAMS_DML_INSERT = [
 | 
						|
    "transaction" => true,
 | 
						|
    "stmt" => false,
 | 
						|
    "num_rows" => false,
 | 
						|
    "last_insert_id" => true,
 | 
						|
  ];
 | 
						|
 | 
						|
  const EXECUTE_RETURN_VALUE_SCHEMA = [
 | 
						|
    "num_rows" => [null, null, "le nombre de ligne affectées par la requête"],
 | 
						|
    "insert_id" => [null, null, "id de la dernière ligne ajoutée"],
 | 
						|
    "stmt" => [null, null, "objet 'statement' permettant de récupérer le résultat de la requête"],
 | 
						|
  ];
 | 
						|
 | 
						|
  /**
 | 
						|
   * exécuter une requête générique de bas niveau (aucun traitement du type de
 | 
						|
   * ceux effectués par {@link IRowIncarnation} n'est fait au préalable)
 | 
						|
   *
 | 
						|
   * $params est un tableau conforme à {@link EXECUTE_PARAMS_SCHEMA} et indique
 | 
						|
   * les attendus concernant la requête et son résultat
 | 
						|
   * - "transaction" indique qu'il faut démarrer une transaction si ce n'est
 | 
						|
   * déjà le cas
 | 
						|
   * - "stmt" indique que des lignes seront retournées, et qu'il ne faut pas
 | 
						|
   * fermer l'objet "statement"
 | 
						|
   * - "num_rows" indique qu'on souhaite avoir le nombre de lignes concernées
 | 
						|
   * par l'opération de mise à jour
 | 
						|
   * - "last_insert_id" indique qu'on souhaite avoir l'identifiant de la dernière
 | 
						|
   * ligne ajoutée, si cela est possible
 | 
						|
   *
 | 
						|
   * Retourner un tableau conforme à {@link EXECUTE_RETURN_VALUE_SCHEMA}
 | 
						|
   * - "stmt" est un objet 'statement' permettant de récupérer les lignes
 | 
						|
   * résultat de la requête (la nature de cet objet dépend de l'implémentation)
 | 
						|
   * - "num_rows" est le nom de lignes affectées par la requête
 | 
						|
   * - "insert_id" est l'identifiant de la dernière ligne ajoutée
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function _execute(string $sql, ?array &$bindings=null, ?array $params=null): array;
 | 
						|
 | 
						|
  /**
 | 
						|
   * frontend de bas niveau pour {@link _execute()} retournant toutes les lignes
 | 
						|
   * résultat d'une requête de type DQL.
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function _fetchAll(string $sql, ?array &$bindings=null): array;
 | 
						|
 | 
						|
  /**
 | 
						|
   * frontend de bas niveau pour {@link _execute()} permettant de récupérer
 | 
						|
   * l'unique résultat (ou au moins le premier résultat) d'une requête de type
 | 
						|
   * DQL. Retourner null si la requête ne retourne pas de résultat
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function _fetchFirst(string $sql, ?array &$bindings=null): ?array;
 | 
						|
 | 
						|
  /**
 | 
						|
   * exécuter une requête qui met à jour jour des lignes. retourner le nombre de
 | 
						|
   * lignes affectées.
 | 
						|
   *
 | 
						|
   * une transaction est commencée implicitement. les méthodes {@link commit()}
 | 
						|
   * ou {@link rollback()} doivent être appelées explicitement.
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function _update(string $sql, ?array &$bindings=null): int;
 | 
						|
 | 
						|
  /**
 | 
						|
   * retourner une instance par défaut de IQuery appropriée pour cette connexion.
 | 
						|
   * l'instance est configurée par défaut pour une requête de type DQL
 | 
						|
   */
 | 
						|
  function query(?string $sql=null, ?array $filter=null, ?IRowIncarnation $incarnation=null): IQuery;
 | 
						|
 | 
						|
  #############################################################################
 | 
						|
 | 
						|
  /**
 | 
						|
   * méthode de convenance retournant toutes les lignes résultat d'une requête
 | 
						|
   * de type DQL.
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function all(string $sql, ?array $filter=null): array;
 | 
						|
 | 
						|
  /**
 | 
						|
   * retourner une liste de valeurs [$value] tel que $value = $row[$name] pour
 | 
						|
   * chaque ligne de résultat de {@link all()}
 | 
						|
   *
 | 
						|
   * NB: si $name===null, prendre le premier champ de $row
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function allVals(?string $name, string $sql, ?array $filter=null): array;
 | 
						|
 | 
						|
  /**
 | 
						|
   * méthode de convenance permettant de récupérer l'unique résultat (ou au
 | 
						|
   * moins le premier résultat) d'une requête de type DQL.
 | 
						|
   *
 | 
						|
   * Retourner null si la requête ne retourne pas de résultat
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function first(string $sql, ?array $filter=null): ?array;
 | 
						|
 | 
						|
  /**
 | 
						|
   * retourner la valeur $row[$name] où $row est la valeur retournée par
 | 
						|
   * {@link first()}. Retourner $default si {@link first()} ne retourne
 | 
						|
   * pas de résultat
 | 
						|
   *
 | 
						|
   * NB: si $name===null, prendre le premier champ de $row
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function firstVal(?string $name, string $sql, ?array $filter=null, $default=null);
 | 
						|
 | 
						|
  /**
 | 
						|
   * méthode de convenance pour exécuter une requête qui met à jour jour des
 | 
						|
   * lignes. retourner le nombre de lignes affectées.
 | 
						|
   *
 | 
						|
   * une transaction est commencée si ce n'est pas déjà le cas. ensuite, la
 | 
						|
   * transaction (celle déjà existante ou la nouvelle) est systématiquement
 | 
						|
   * commitée.
 | 
						|
   *
 | 
						|
   * @throws QueryException
 | 
						|
   */
 | 
						|
  function update(string $sql, ?array $filter=null): int;
 | 
						|
}
 |