214 lines
4.7 KiB
PHP
214 lines
4.7 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 "UPDATE" AVEC LA TABLE EN QUESTION
|
|
*
|
|
* @table<String> Table en question
|
|
*
|
|
* @return sql<String> Renvoie la clause remplie
|
|
*
|
|
*/
|
|
public static function UPDATE($table){
|
|
/* [0] Initialisation
|
|
=========================================================*/
|
|
$sql = 'UPDATE ';
|
|
|
|
/* [1] On construit la requête
|
|
=========================================================*/
|
|
$sql .= $table;
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* CONSTRUIT LA REQUETE TEXTUELLE "SET" AVEC UNE LISTE DE TABLES
|
|
*
|
|
* @values<Array> Tableau de la forme [ field=>value, field2=>value2 ]
|
|
* @binded<Arary> Tableau associatif contenant les variables "bindés" -> ajout des champs
|
|
*
|
|
* @return sql<String> Renvoie la clause remplie
|
|
*
|
|
*/
|
|
public static function SET($values, &$binded){
|
|
/* [0] Initialisation
|
|
=========================================================*/
|
|
$sql = 'SET ';
|
|
|
|
|
|
/* [1] On construit la requête
|
|
=========================================================*/
|
|
$c = 0;
|
|
foreach($values as $field=>$value){
|
|
/* (1) Champ */
|
|
if( $c > 0 ) $sql .= "\n, ";
|
|
$sql .= $field.' = ';
|
|
|
|
/* (2) Variable */
|
|
$sql .= ':update_'.$field;
|
|
|
|
$binded[':update_'.$field] = $value;
|
|
|
|
$c++;
|
|
}
|
|
|
|
return $sql;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|