Documentation du code de SPIP et de ses plugins

SPIP

jointures.php

Table of Contents

Functions

decompose_champ_id_objet()  : array<string|int, mixed>|string
Décomposer un champ id_truc en (id_objet,objet,truc)
trouver_champs_decomposes()  : array<string|int, mixed>
Mapping d'un champ d'une jointure en deux champs id_objet,objet si nécessaire
calculer_jointure()  : string
Calculer et construite une jointure entre $depart et $arrivee
fabrique_jointures()  : string
Fabriquer une jointure à l'aide d'une liste descriptive d'étapes
nogroupby_if()  : bool
Condition suffisante pour qu'un Group-By ne soit pas nécéssaire
liste_champs_jointures()  : array<string|int, mixed>
Lister les champs candidats a une jointure, sur une table si un join est fourni dans la description, c'est lui qui l'emporte sauf si cle primaire explicitement demandee par $primary
split_key()  : array<string|int, mixed>
Eclater une cle composee en plusieurs champs
calculer_chaine_jointures()  : array<string|int, mixed>
Constuire la chaine de jointures, de proche en proche
trouver_cles_table()  : array<string|int, mixed>
applatit les cles multiples redondance avec split_key() ? a mutualiser
chercher_champ_dans_tables()  : array<string|int, mixed>|false
Indique si une colonne (ou plusieurs colonnes) est présente dans l'une des tables indiquée.
trouver_champ_exterieur()  : array<string|int, mixed>|string
Cherche une colonne (ou plusieurs colonnes) dans les tables de jointures possibles indiquées.
trouver_jointure_champ()  : string
Cherche a ajouter la possibilite d'interroger un champ sql dans une boucle.

Functions

decompose_champ_id_objet()

Décomposer un champ id_truc en (id_objet,objet,truc)

decompose_champ_id_objet(string $champ) : array<string|int, mixed>|string

Exemple : décompose id_article en (id_objet,objet,article)

Parameters
$champ : string

Nom du champ à décomposer

Return values
array<string|int, mixed>|string

Tableau si décomposable : 'id_objet', 'objet', Type de l'objet Chaine sinon : le nom du champ (non décomposable donc)

trouver_champs_decomposes()

Mapping d'un champ d'une jointure en deux champs id_objet,objet si nécessaire

trouver_champs_decomposes(string $champ, array<string|int, mixed> $desc) : array<string|int, mixed>

Si le champ demandé existe dans la table, on l'utilise, sinon on regarde si le champ se décompose en objet/id_objet et si la table possède ces champs, et dans ce cas, on les retourne.

Parameters
$champ : string

Nom du champ à tester (ex. id_article)

$desc : array<string|int, mixed>

Description de la table

Tags
uses
decompose_champ_id_objet()
used-by
calculer_chaine_jointures()
Return values
array<string|int, mixed>

Liste du/des champs. Soit

  • array($champ), si le champ existe dans la table ou si on ne peut décomposer.
  • array(id_objet, objet), si le champ n'existe pas mais qu'on peut décomposer

calculer_jointure()

Calculer et construite une jointure entre $depart et $arrivee

calculer_jointure(Boucle &$boucle, array<string|int, mixed> $depart, array<string|int, mixed> $arrivee[, string $col = '' ][, bool $cond = false ][, int $max_liens = 5 ]) : string

L'objet boucle est modifié pour compléter la requête. La fonction retourne l'alias d'arrivée une fois la jointure construire, en general un "Lx"

Parameters
$boucle : Boucle

Description de la boucle

$depart : array<string|int, mixed>

Table de départ, sous la forme (nom de la table, description de la table)

$arrivee : array<string|int, mixed>

Table d'arrivée, sous la forme (nom de la table, description de la table)

$col : string = ''

Colonne cible de la jointure

$cond : bool = false

Flag pour savoir si le critère est conditionnel ou non

$max_liens : int = 5

Nombre maximal de liaisons possibles pour trouver la jointure.

Tags
uses
calculer_chaine_jointures()
uses
fabrique_jointures()
used-by
trouver_jointure_champ()
Return values
string

Alias de la table de jointure (Lx)

fabrique_jointures()

Fabriquer une jointure à l'aide d'une liste descriptive d'étapes

fabrique_jointures(Boucle &$boucle, array<string|int, mixed> $res[, bool $cond = false ][, array<string|int, mixed> $desc = [] ][, string $nom = '' ][, string $col = '' ][, bool $echap = true ]) : string

Ajoute

  • la jointure dans le tableau $boucle->join,
  • la table de jointure dans le from
  • un modificateur 'lien'
Parameters
$boucle : Boucle

Description de la boucle

$res : array<string|int, mixed>

Chaîne des jointures $res = array( array(table_depart,array(table_arrivee,desc),jointure), ... ) Jointure peut être un tableau pour les jointures sur champ decomposé array('id_article','id_objet','objet','article') array('id_objet','id_article','objet','article')

$cond : bool = false

Flag pour savoir si le critère est conditionnel ou non

$desc : array<string|int, mixed> = []

Description de la table de départ

$nom : string = ''

Nom de la table de départ

$col : string = ''

Colonne cible de la jointure

$echap : bool = true

Écrire les valeurs dans boucle->join en les échappant ou non ?

Tags
uses
nogroupby_if()
uses
liste_champs_jointures()
used-by
calculer_jointure()
Return values
string

Alias de la table de jointure (Lx)

nogroupby_if()

Condition suffisante pour qu'un Group-By ne soit pas nécéssaire

nogroupby_if(array<string|int, mixed> $depart, array<string|int, mixed> $arrivee, string|array<string|int, mixed> $col) : bool

À améliorer, notamment voir si calculer_select ne pourrait pas la réutiliser lorsqu'on sait si le critere conditionnel est finalement present

Parameters
$depart : array<string|int, mixed>
$arrivee : array<string|int, mixed>
$col : string|array<string|int, mixed>
Tags
used-by
fabrique_jointures()
Return values
bool

liste_champs_jointures()

Lister les champs candidats a une jointure, sur une table si un join est fourni dans la description, c'est lui qui l'emporte sauf si cle primaire explicitement demandee par $primary

liste_champs_jointures(string $nom, array<string|int, mixed> $desc[, bool $primary = false ]) : array<string|int, mixed>

sinon on construit une liste des champs a partir de la liste des cles de la table

Parameters
$nom : string
$desc : array<string|int, mixed>
$primary : bool = false
Tags
uses
split_key()
used-by
fabrique_jointures()
used-by
calculer_chaine_jointures()
used-by
trouver_champ_exterieur()
Return values
array<string|int, mixed>

split_key()

Eclater une cle composee en plusieurs champs

split_key(string $v[, array<string|int, mixed> $join = [] ]) : array<string|int, mixed>
Parameters
$v : string
$join : array<string|int, mixed> = []
Tags
used-by
liste_champs_jointures()
Return values
array<string|int, mixed>

calculer_chaine_jointures()

Constuire la chaine de jointures, de proche en proche

calculer_chaine_jointures(objetc &$boucle, array<string|int, mixed> $depart, array<string|int, mixed> $arrivee[, array<string|int, mixed> $vu = [] ][, array<string|int, mixed> $milieu_exclus = [] ][, int $max_liens = 5 ]) : array<string|int, mixed>
Parameters
$boucle : objetc
$depart : array<string|int, mixed>

sous la forme array(nom de la table, description)

$arrivee : array<string|int, mixed>

sous la forme array(nom de la table, description)

$vu : array<string|int, mixed> = []

tables deja vues dans la jointure, pour ne pas y repasser

$milieu_exclus : array<string|int, mixed> = []

cles deja utilisees, pour ne pas les reutiliser

$max_liens : int = 5

nombre maxi d'etapes

Tags
uses
liste_champs_jointures()
uses
trouver_champs_decomposes()
used-by
calculer_jointure()
Return values
array<string|int, mixed>

trouver_cles_table()

applatit les cles multiples redondance avec split_key() ? a mutualiser

trouver_cles_table(array<string|int, mixed> $keys) : array<string|int, mixed>
Parameters
$keys : array<string|int, mixed>
Return values
array<string|int, mixed>

chercher_champ_dans_tables()

Indique si une colonne (ou plusieurs colonnes) est présente dans l'une des tables indiquée.

chercher_champ_dans_tables(string|array<string|int, mixed> $cle, array<string|int, mixed> $tables, string $connect[, bool|string $checkarrivee = false ]) : array<string|int, mixed>|false
Parameters
$cle : string|array<string|int, mixed>

Nom de la ou des colonnes à trouver dans les tables indiquées

$tables : array<string|int, mixed>

Liste de noms de tables ou des couples (alias => nom de table).

  • $boucle->from (alias => nom de table) : les tables déjà utilisées dans une boucle
  • $boucle->jointures : les tables utilisables en tant que jointure
  • $boucle->jointures_explicites les jointures explicitement indiquées à l'écriture de la boucle
$connect : string

Nom du connecteur SQL

$checkarrivee : bool|string = false

false : peu importe la table, si on trouve le/les champs, c'est bon. string : nom de la table où on veut trouver le champ.

Return values
array<string|int, mixed>|false

false : on n'a pas trouvé array : infos sur la table trouvée. Les clés suivantes sont retournés :

  • 'desc' : tableau de description de la table,
  • 'table' : nom de la table
  • 'alias' : alias utilisé pour la table (si pertinent. ie: avec $boucle->from transmis par exemple)

trouver_champ_exterieur()

Cherche une colonne (ou plusieurs colonnes) dans les tables de jointures possibles indiquées.

trouver_champ_exterieur(string|array<string|int, mixed> $cle, array<string|int, mixed> $joints, Boucle &$boucle[, bool|string $checkarrivee = false ]) : array<string|int, mixed>|string
Parameters
$cle : string|array<string|int, mixed>

Nom de la ou des colonnes à trouver dans les tables de jointures

$joints : array<string|int, mixed>

Liste des jointures possibles (ex: $boucle->jointures ou $boucle->jointures_explicites)

$boucle : Boucle

Description de la boucle

$checkarrivee : bool|string = false

false : peu importe la table, si on trouve le/les champs, c'est bon. string : nom de la table jointe où on veut trouver le champ.

Tags
uses
chercher_champ_dans_tables()
uses
decompose_champ_id_objet()
uses
liste_champs_jointures()
used-by
trouver_jointure_champ()
Return values
array<string|int, mixed>|string

chaîne vide : on n'a pas trouvé liste si trouvé : nom de la table, description de la table, clé(s) de la table

trouver_jointure_champ()

Cherche a ajouter la possibilite d'interroger un champ sql dans une boucle.

trouver_jointure_champ(string $champ, object &$boucle[, array<string|int, mixed> $jointures = false ][, bool $cond = false ][, bool|string $checkarrivee = false ]) : string

Cela construira les jointures necessaires si une possibilite est trouve et retournera le nom de l'alias de la table contenant ce champ (L2 par exemple pour 'spip_mots AS L2' dans le FROM),

Parameters
$champ : string

Nom du champ cherche (exemple id_article)

$boucle : object

Informations connues de la boucle

$jointures : array<string|int, mixed> = false

Liste des tables parcourues (articles, mots) pour retrouver le champ sql et calculer la jointure correspondante. En son absence et par defaut, on utilise la liste des jointures connues par SPIP pour la table en question ($boucle->jointures)

$cond : bool = false

flag pour savoir si le critere est conditionnel ou non

$checkarrivee : bool|string = false

false : peu importe la table, si on trouve le/les champs, c'est bon. string : nom de la table jointe où on veut trouver le champ.

Tags
uses
trouver_champ_exterieur()
uses
calculer_jointure()
Return values
string

        
On this page

Search results