trouver_table

De functie trouver_table() (base_trouver_table_dist) wordt gedeclareerd in ecrire/base/trouver_table.php en wordt gebruikt om de omschrijving van een SQL-tabel te verkrijgen. Het biedt een mechanisme om de lijst van kolommen, sleutels, gedeclareerde verbindingen en enkele andere informatiedetails op te halen.

Als overrule-bare functie wordt het gebruikt met charger_fonction:

$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table, $serveur);

De parameters zijn:

  1. $table: de naam van de tabel (’spip_articles’ of ’articles’)
  2. $serveur: optioneel de naam van de SQL connectie, die standaard dezelfde is als voor de SPIP installatie zelf.

De geretourneerde tabel $desc heeft deze structuur:

array(
	'field' => array('kolom' => 'omschrijving'),
	'key' => array(
		'PRIMARY KEY' => 'kolom',
		'KEY name' => 'kolom' // of 'kolom1, kolom2'
	),
	'join' => array('kolom' => 'kolom'),
	'table' => 'spip_tables'
	'id_table' => $table,
	'connexion' => 'naam_connectie',
	'titre' => 'kolom_titel AS titre, kolom_taal AS lang'
);
  • De sleutel field is een associatieve tabel met alle kolommen van de tabel en hun SQL beschrijvingen,
  • key is een andere tabel met de primaire en secundaire sleutels,
  • join vermeldt de kolommen van eventuele verbindingen, indien aangegeven in de beschrijvingen van de hoofd- of hulptabellen
  • table is de eigenlijke naam van de tabel (zonder prefix: als de prefix van de tabel verschilt van "spip", dan is het "spip_tables" dat wordt teruggegeven),
  • id_table is de gegeven $table parameter,
  • connexion is de naam van het verbindingsbestand, indien verschillend van die van de installatie,
  • titre is een SQL SELECT-verklaring die aangeeft waar de kolomtitel is of waar de kolomtaal is (onder andere gebruikt om de URL’s te berekenen); bijvoorbeeld "titre, lang", of "naam AS title, '' AS lang".

Deze functie cachet het resultaat van de analyse om herhaalde verstorende toegang tot de SQL-server te voorkomen. Om een herberekening van deze cache te forceren, moet de functie worden aangeroepen met een lege string:

$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('');

Opmerking: Wanneer een tabel wordt aangevraagd zonder het voorvoegsel "spip", wordt de naam van de tabel met het voorvoegsel dat aan de site is toegekend, teruggegeven (zolang de tabel in SPIP wordt gedeclareerd). Door een "spip_tables" tabel aan te vragen wordt gezocht naar het werkelijke bestaan van die tabel (de prefix wordt niet vervangen door de prefix die gebruikt wordt voor de site). In de toekomst zal waarschijnlijk een optie worden toegevoegd aan de trouver_table() functie, aangezien er al een optie is voor sql_showtable om de prefix automatisch te kunnen wijzigen.

Voorbeeld

De functie creer_champs_extras() in plug-in "Champs Extras" maakt SQL kolommen die worden omschreven door het doorgegeven object "ChampExtra" ($c->table is de naam van de SQL tabel, $c->champ is die van de kolom). De functie retourneert false wanneer de kolom niet kon worden aangemaakt:

function creer_champs_extras($champs) {
	// de function past de betreffende tabel aan met maj_tables() 
	// [...] 
	// Dan controleert het of de nieuwe kolom daadwerkelijk werd aangemaakt:
	// voor elke aan te maken kolom!
	$trouver_table = charger_fonction('trouver_table','base');
	$trouver_table(''); // maak de omschrijving van de tabellen opnieuw.
	$retour = true;
	foreach ($champs as $c){ 
		if ($table = table_objet_sql($c->table)) {
			$desc = $trouver_table($table);
			if (!isset($desc['field'][$c->champ])) {
				extras_log("Le champ extra '" . $c->champ . "' sur $table n'a pas ete cree :(", true);
				$retour = false;
			}
		} else {
			$retour = false;
		}
	}
	return $retour;
}

Auteur hanjo Gepubliceerd op:

Vertalingen: English, français, Nederlands