Rows update

This commit is contained in:
xdrm-brackets 2016-11-07 19:12:16 +01:00
parent 9d447fc170
commit e9451c4e61
1 changed files with 67 additions and 22 deletions

View File

@ -188,16 +188,17 @@
$column_name = ''; $column_name = '';
/* (1) formatte la requête 'MyAttribute' -> 'my_attribute' */ /* (1) formatte la requête 'MyAttribute' -> 'my_attribute' */
for( $l = 0 ; $l < strlen($regex[1]) ; $l++ ){ for( $l = 0, $ll = strlen($regex[1]) ; $l < $ll ; $l++ ){
$letter = $regex[1][$l]; $letter = $regex[1][$l];
// Si la lettre est en majuscule mais que c'est pas la première // Si la lettre est en majuscule mais que c'est pas la première ni un seul mot
if( strtoupper($letter) == $letter && $l > 0 ) if( strtoupper($letter) == $letter && $l > 0 )
$column_name .= '_'; $column_name .= '_';
$column_name .= strtolower($letter); $column_name .= strtolower($letter);
} }
/* (2) On vérifie que la colonne existe */ /* (2) On vérifie que la colonne existe */
if( !isset($this->schema['columns'][$column_name]) ) if( !isset($this->schema['columns'][$column_name]) )
return $this; // si n'existe pas, on ne fait rien return $this; // si n'existe pas, on ne fait rien
@ -205,44 +206,86 @@
/* [2] On vérifie le type du paramètre /* [2] On vérifie le type du paramètre
=========================================================*/ =========================================================*/
/* (1) Si aucun param, on quitte */ // On délègue
if( count($a) == 0 ) $args = array_merge([$column_name], $a);
return call_user_func_array([$this, 'where'], $args);
}
public function where($field){
// get arguments
$args = array_slice(func_get_args(), 1);
/* [1] Vérification de l'argument @field
=========================================================*/
/* (1) Type de @field */
if( !is_string($field) )
return $this; return $this;
/* (2) Si c'est un paramètre seul, on ajoute par défaut self::COND_EQUAL */ /* (2) On vérifie que la colonne existe */
if( !is_array($a[0]) ) if( !isset($this->schema['columns'][$field]) )
$a[0] = [ $a[0], self::COND_EQUAL ]; return $this; // si n'existe pas, on ne fait rien
/* (3) Si type INT et pas numérique */ /* [2] On vérifie le type du paramètre
if( $this->schema['columns'][$column_name]['type'] == 'int' && !is_numeric($a[0][0]) ) =========================================================*/
/* (1) Si au moins 1 param */
if( count($args) < 1 )
return $this; return $this;
/* (4) Si type FLOAT et pas numérique */
if( $this->schema['columns'][$column_name]['type'] == 'float' && !is_numeric($a[0][0]) ) /* [3] If `IN` condition
=========================================================*/
$defaultWhere = $this->where;
$inCond = count($args[0]) > 1 && is_array($args[0][0]) && $args[0][1] == self::COND_IN;
// erreur
if( is_array($args[0][0]) && !$inCond )
return $this; return $this;
/* (5) Si type STRING et pas string */ /* (1) Si c'est une condition "IN"
if( $this->schema['columns'][$column_name]['type'] == 'text' && !is_string($a[0][0]) ) ---------------------------------------------------------*/
return $this; if( $inCond ){
/* (1) On vérifie le type de chaque valeur du IN */
$type = $this->schema['columns'][$field]['type'];
foreach($args[0][0] as $value){
if( $type == 'int' && !is_numeric($value) ) return $this;
if( $type == 'float' && !is_numeric($value) ) return $this;
if( in_array($type, ['text', 'varchar']) && !is_string($value) ) return $this;
}
/* (2) Si c'est une condition "simple"
---------------------------------------------------------*/
}else{
/* (1) Si le type de condition est manquant, on met EQUAL par défaut */
if( !is_array($args[0]) )
$args[0] = [ $args[0], self::COND_EQUAL ];
/* (2) On vérifie le type de chaque valeur */
$type = $this->schema['columns'][$field]['type'];
if( $type == 'int' && !is_numeric($args[0][0]) ) return $this;
if( $type == 'float' && !is_numeric($args[0][0]) ) return $this;
if( in_array($type, ['text', 'varchar']) && !is_string($args[0][0]) ) return $this;
}
/* [3] Si type OK, on enregistre la condition /* [3] Si type OK, on enregistre la condition
=========================================================*/ =========================================================*/
/* (1) Si aucune condition pour ce champ, on crée un tableau */ /* (1) Si aucune condition pour ce champ, on crée un tableau */
if( !isset($this->where[$column_name]) ) if( !isset($this->where[$field]) )
$this->where[$column_name] = []; $this->where[$field] = [];
/* (2) On ajoute la condition */ /* (2) On ajoute la condition */
$this->where[$column_name][] = $a[0]; $this->where[$field][] = $args[0];
// On retourne l'object courant // On retourne l'object courant
return $this; return $this;
} }
/* SELECTIONNE UNIQUEMENT LE CHAMP SELECTIONNE /* SELECTIONNE UNIQUEMENT LE CHAMP SELECTIONNE
* *
* @field<String> Libellé du champ à afficher * @field<String> Libellé du champ à afficher
@ -271,6 +314,10 @@
if( !is_null($func) && !in_array($func, $funcList) ) if( !is_null($func) && !in_array($func, $funcList) )
return $this; return $this;
// If CONCAT -> force type to TEXT
if( $func === Rows::SEL_CONCAT )
$this->schema['columns'][$field]['type'] = 'text';
/* (4) On met la valeur par défaut à @distinct si type mauvais */ /* (4) On met la valeur par défaut à @distinct si type mauvais */
$distinct = !is_bool($distinct) ? false : $distinct; $distinct = !is_bool($distinct) ? false : $distinct;
@ -840,7 +887,6 @@
// On ajoute la clause FROM de jointure à la clause FROM locale // // On ajoute la clause FROM de jointure à la clause FROM locale //
$requestS['FROM'] = array_merge($data['request']['FROM'], $requestS['FROM']); $requestS['FROM'] = array_merge($data['request']['FROM'], $requestS['FROM']);
/* [5] On rédige la clause WHERE/AND /* [5] On rédige la clause WHERE/AND
=========================================================*/ =========================================================*/
/* (1) On met les conditions locales */ /* (1) On met les conditions locales */
@ -942,7 +988,6 @@
/* (3) On prépare la requête */ /* (3) On prépare la requête */
$request = DatabaseDriver::getPDO($this->driver)->prepare($requestString); $request = DatabaseDriver::getPDO($this->driver)->prepare($requestString);
// var_dump($requestString);
/* [8] On exécute la requête et retourne le résultat /* [8] On exécute la requête et retourne le résultat