<?php
namespace nur\m;

/**
 * Interface IRowIncarnation: objet permettant d'adapter des données avant de
 * les transmettre à la base de données ou vice-versa
 */
interface IRowIncarnation {
  /**
   * créer un tableau de bindings à partir d'un filtre (tableau utilisé pour
   * sélectionner les lignes concernées par une opération), d'une ligne de
   * données (utilisé pour la mises à jour), et d'un tableau retour (pour
   * récupérer certaines informations de la base de données)
   */
  function createBindings(?array &$bindings, ?array $filter, $row=null, ?array $results=null): void;

  /**
   * Si une requête a des variables retour, mettre à jour $results avec ces
   * variables
   */
  function loadResults(?array &$results, array $bindings): void;

  /**
   * Préparer les données de bindings pour qu'elles puissent être utilisées par
   * la base de données. notamment, il s'agit de formatter les données à la
   * manière dont la base de données les attends
   */
  function prepareBindings(?array &$bindings): void;

  /** Créer une instance de ligne de données */
  function loadRow(&$row, &$rowKey): void;
}