SMMP/manager/ORM/SQLBuilder.php

153 lines
3.4 KiB
PHP

<?php
namespace manager\ORM;
use \manager\Database;
use \manager\ORM\Rows;
class SQLBuilder{
/* CONSTRUIT LA REQUETE TEXTUELLE "SELECT" AVEC UNE LISTE DE CHAMPS
*
* @tables<Array> Liste de tables contenant des champs
*
* @return sql<String> Renvoie la clause remplie
*
*/
public static function SELECT($tables){
/* [0] Initialisation
=========================================================*/
$sql = 'SELECT ';
/* [1] On construit la requête
=========================================================*/
$c = 0;
foreach($tables as $table=>$fields)
foreach($fields as $field){
if( $c > 0 ) $sql .= ', ';
$sql .= $table.'.'.$field;
$c++;
}
return $sql;
}
/* CONSTRUIT LA REQUETE TEXTUELLE "FROM" AVEC UNE LISTE DE TABLES
*
* @tables<Array> Liste de tables
*
* @return sql<String> Renvoie la clause remplie
*
*/
public static function FROM($tables){
/* [0] Initialisation
=========================================================*/
$sql = 'FROM ';
/* [1] On construit la requête
=========================================================*/
$c = 0;
foreach($tables as $table){
if( $c > 0 ) $sql .= ', ';
$sql .= $table;
$c++;
}
return $sql;
}
/* CONSTRUIT LA REQUETE TEXTUELLE "IN" AVEC UNE LISTE DE TABLES
*
* @field<Array> Tableau contenant [table, field]
* @array<Array> Valeurs de la clause IN
* @offset<int> Permet de rendre la condition unique (nommage des variables)
* @binded<Arary> Tableau associatif contenant les variables "bindés" -> ajout des champs
*
* @return sql<String> Renvoie la clause remplie
*
*/
public static function IN($field, $array, $offset=0, &$binded){
/* [0] Initialisation
=========================================================*/
$sql = ( $offset == 0 ) ? 'WHERE ' : 'AND ';
/* [1] On construit la requête
=========================================================*/
/* (1) Champ */
$sql .= $field[0].'.'.$field[1].' IN (';
/* (2) Valeurs */
$c = 0;
foreach($array as $i=>$value){
if( $c > 0 ) $sql .= ', ';
$sql .= ':'.$field[0].'_x_'.$field[1].'_'.$offset.'_'.$i;
$binded[':'.$field[0].'_x_'.$field[1].'_'.$offset.'_'.$i] = $value;
$c++;
}
return $sql.")";
}
/* CONSTRUIT LA REQUETE TEXTUELLE "WHERE" AVEC UNE LISTE DE TABLES
*
* @field<Array> Tableau contenant [table, field]
* @valeur<Array> Valeurs de la clause WHERE [valeur, opérateur]
* @offset<int> Permet de rendre la condition unique (nommage des variables)
* @binded<Arary> Tableau associatif contenant les variables "bindés" -> ajout des champs
*
* @return sql<String> Renvoie la clause remplie
*
*/
public static function WHERE($field, $value, $offset=0, &$binded){
/* [0] Initialisation
=========================================================*/
$sql = ( $offset == 0 ) ? 'WHERE ' : 'AND ';
/* [1] On construit la requête
=========================================================*/
/* (1) Chamo */
$sql .= $field[0].'.'.$field[1].' ';
/* (2) Opérateur */
$sql .= substr($value[1], 2, -2).' ';
/* (3) Variable */
$sql .= ':'.$field[0].'_x_'.$field[1].'_'.$offset;
$binded[':'.$field[0].'_x_'.$field[1].'_'.$offset] = $value[0];
return $sql;
}
}
?>