Пример #1
0
/**
 * Calcule le code PHP d'une boucle contenant les informations qui produiront une requête SQL
 *
 * Le code produit est un tableau associatif $command contenant les informations
 * pour que la boucle produise ensuite sa requête, tel que `$command['from'] = 'spip_articles';`
 *
 * @param Boucle $boucle
 *     AST de la boucle 
 * @return string
 *     Code PHP compilé définissant les informations de requête
**/
function calculer_requete_sql($boucle)
{
    $init = array();
    $init[] = calculer_dec('table', "'" . $boucle->id_table . "'");
    $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'");
    # En absence de champ c'est un decompte :
    $init[] = calculer_dec('from', calculer_from($boucle));
    $init[] = calculer_dec('type', calculer_from_type($boucle));
    $init[] = calculer_dec('groupby', 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")");
    $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")");
    $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")");
    $init[] = calculer_dec('where', calculer_dump_array($boucle->where));
    $init[] = calculer_dec('join', calculer_dump_join($boucle->join));
    $init[] = calculer_dec('limit', strpos($boucle->limit, 'intval') === false ? "'" . $boucle->limit . "'" : $boucle->limit);
    $init[] = calculer_dec('having', calculer_dump_array($boucle->having));
    $s = $d = "";
    // l'index 0 de $i indique si l'affectation est statique (contenu)
    // ou recalculée à chaque passage (vide)
    foreach ($init as $i) {
        if (reset($i)) {
            $s .= "\n\t\t" . end($i);
        } else {
            $d .= "\n\t" . end($i);
        }
        # dynamique
    }
    return ($boucle->hierarchie ? "\n\t{$boucle->hierarchie}" : '') . $boucle->in . $boucle->hash . "\n\t" . 'if (!isset($command[\'table\'])) {' . $s . "\n\t}" . $d;
}
Пример #2
0
function calculer_requete_sql($boucle){
	return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
		. $boucle->in
		. $boucle->hash
		. calculer_dec('$table', "'" . $boucle->id_table . "'")
		. calculer_dec('$id', "'" . $boucle->id_boucle . "'")
		# En absence de champ c'est un decompte : 
		. calculer_dec('$from', calculer_from($boucle))
		. calculer_dec('$type', calculer_from_type($boucle))
		. calculer_dec('$groupby', 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")")
		. calculer_dec('$select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")")
		. calculer_dec('$orderby', 'array(' . calculer_order($boucle) . ")")
		. calculer_dec('$where', calculer_dump_array($boucle->where))
		. calculer_dec('$join', calculer_dump_join($boucle->join))
		. calculer_dec('$limit', (strpos($boucle->limit, 'intval')===false ?
			"'" . $boucle->limit . "'" :
			$boucle->limit))
		. calculer_dec('$having', calculer_dump_array($boucle->having));
}