Gestion du delete(key)
This commit is contained in:
parent
e661bf99dd
commit
2cf98451e2
39
automate.php
39
automate.php
|
@ -89,7 +89,7 @@
|
||||||
|
|
||||||
// Lancement du téléchargement
|
// Lancement du téléchargement
|
||||||
// $req = new ModuleRequest('download/phone', array('subjects'=>[200]));
|
// $req = new ModuleRequest('download/phone', array('subjects'=>[200]));
|
||||||
// $res = $req->dispatch();
|
// $res = $req->download();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,31 +99,26 @@
|
||||||
|
|
||||||
// RUN database
|
// RUN database
|
||||||
$db = new lightdb('testdb1');
|
$db = new lightdb('testdb1');
|
||||||
function microtime_float()
|
|
||||||
{
|
|
||||||
list($usec, $sec) = explode(" ", microtime());
|
|
||||||
return ((float)$usec + (float)$sec);
|
|
||||||
}
|
|
||||||
|
|
||||||
$a = microtime_float();
|
var_dump('INSERTING key0 to key99');
|
||||||
/* [1] INSERTION DE 1000*1000 éléments
|
|
||||||
=========================================================*/
|
|
||||||
$data = array();
|
|
||||||
for( $i = 0 ; $i < 1000 ; $i++ )
|
|
||||||
$data['key'.$i] = 'valeur'.$i;
|
|
||||||
|
|
||||||
$average = 0;
|
for( $i = 0 ; $i < 100 ; $i++ )
|
||||||
for( $i = 0 ; $i < 100 ; $i++ ){
|
echo $db->insert('key'.$i, array('data0_'.$i, 'data1_'.$i)) ? 'o' : '_';
|
||||||
$a = microtime_float();
|
|
||||||
$db->fetch('data'.$i);
|
|
||||||
$average += microtime_float()-$a;
|
|
||||||
}
|
|
||||||
|
|
||||||
var_dump('1000 * '.strlen(json_encode($data)) );
|
|
||||||
var_dump('INSERT avg. : '.($average/100) );
|
|
||||||
|
|
||||||
/* [2] RECUPERATION DE 1000*1000 ELEMENTS
|
var_dump('FETCHING key0 : '); var_dump( $db->fetch('key0') );
|
||||||
=========================================================*/
|
var_dump('FETCHING key1 : '); var_dump( $db->fetch('key1') );
|
||||||
|
var_dump('FETCHING key2 : '); var_dump( $db->fetch('key2') );
|
||||||
|
var_dump('FETCHING key3 : '); var_dump( $db->fetch('key3') );
|
||||||
|
|
||||||
|
var_dump('DELETING key0 : '. $db->delete('key0') );
|
||||||
|
var_dump('DELETING key1 : '. $db->delete('key1') );
|
||||||
|
var_dump('DELETING key2 : '. $db->delete('key2') );
|
||||||
|
var_dump('DELETING key3 : '. $db->delete('key3') );
|
||||||
|
|
||||||
|
var_dump('FETCHING key0 : '); var_dump( $db->fetch('key0') );
|
||||||
|
var_dump('FETCHING key1 : '); var_dump( $db->fetch('key1') );
|
||||||
|
var_dump('FETCHING key2 : '); var_dump( $db->fetch('key2') );
|
||||||
|
var_dump('FETCHING key3 : '); var_dump( $db->fetch('key3') );
|
||||||
|
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
|
@ -3,31 +3,33 @@
|
||||||
namespace manager;
|
namespace manager;
|
||||||
|
|
||||||
|
|
||||||
class lightdb{
|
class lightdb{
|
||||||
|
|
||||||
// REPERTOIRE RACINE DE TOUTES LES BDD
|
// REPERTOIRE RACINE DE TOUTES LES BDD
|
||||||
public static $root = __ROOT__.'/tmp/';
|
public static $root = __ROOT__.'/tmp/';
|
||||||
|
|
||||||
// ATTRIBUTS
|
// ATTRIBUTS
|
||||||
private $dbname;
|
private $dbname;
|
||||||
private $dir;
|
private $dir;
|
||||||
private $index;
|
private $index;
|
||||||
private $driver;
|
private $driver;
|
||||||
private $line;
|
private $line;
|
||||||
|
|
||||||
/* CONSTRUCTEUR -> CREER LES FICHIERS S'ILS N'EXISTENT PAS SINON, RECUPERE LES DONNES
|
private $tmp;
|
||||||
*
|
|
||||||
* @dbname<String> Nom de la base de données
|
/* CONSTRUCTEUR -> CREER LES FICHIERS S'ILS N'EXISTENT PAS SINON, RECUPERE LES DONNES
|
||||||
*
|
*
|
||||||
*/
|
* @dbname<String> Nom de la base de données
|
||||||
|
*
|
||||||
|
*/
|
||||||
public function __construct($dbname){
|
public function __construct($dbname){
|
||||||
/* [0] On récupère les attributs
|
/* [0] On récupère les attributs
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$this->dbname = $dbname;
|
$this->dbname = $dbname;
|
||||||
$this->dir = self::$root.$dbname.'/';
|
$this->dir = self::$root.$dbname.'/';
|
||||||
|
|
||||||
/* [1] Création du répertoire s'il n'existe pas
|
/* [1] Création du répertoire s'il n'existe pas
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( !is_dir($this->dir) )
|
if( !is_dir($this->dir) )
|
||||||
mkdir($this->dir);
|
mkdir($this->dir);
|
||||||
|
|
||||||
|
@ -35,162 +37,204 @@
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) Si le fichier n'existe pas, on le crée */
|
/* (1) Si le fichier n'existe pas, on le crée */
|
||||||
if( !file_exists($this->dir.'index') )
|
if( !file_exists($this->dir.'index') )
|
||||||
file_put_contents($this->dir.'index', json_encode(array()) );
|
file_put_contents($this->dir.'index', json_encode(array()) );
|
||||||
|
|
||||||
|
|
||||||
/* (2) On récupère le contenu du fichier */
|
/* (2) On récupère le contenu du fichier */
|
||||||
$fIndex = new \SplFileObject($this->dir.'index');
|
$fIndex = new \SplFileObject($this->dir.'index');
|
||||||
$fIndex->seek(0);
|
$fIndex->seek(0);
|
||||||
|
|
||||||
$index = json_decode( $fIndex->current(), true );
|
$index = json_decode( $fIndex->fgets(), true );
|
||||||
|
|
||||||
// Si erreur de parsage, on retourne une erreur
|
// Si erreur de parsage, on retourne une erreur
|
||||||
if( is_null($index) ) return;
|
if( is_null($index) ) return;
|
||||||
$this->index = $index;
|
$this->index = $index;
|
||||||
|
|
||||||
/* [3] Initialisation du gestionnaire d'acces (SplFileObject)
|
/* [3] Initialisation du gestionnaire d'acces (SplFileObject)
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) Si le fichier n'existe pas, on le crée */
|
/* (1) Si le fichier n'existe pas, on le crée */
|
||||||
if( !file_exists($this->dir.'data') )
|
if( !file_exists($this->dir.'data') )
|
||||||
file_put_contents($this->dir.'data', '' );
|
file_put_contents($this->dir.'data', '' );
|
||||||
|
|
||||||
/* (2) On place un 'driver' sur le fichier */
|
/* (2) On place un 'driver' sur le fichier */
|
||||||
$this->driver = new \SplFileObject($this->dir.'data', 'r+');
|
$this->driver = new \SplFileObject($this->dir.'data', 'r+');
|
||||||
|
// $this->driver->setFlags( \SplFileObject::SKIP_EMPTY );
|
||||||
|
|
||||||
/* (3) On récupère le nombre de lignes */
|
/* (3) On récupère le nombre de lignes */
|
||||||
$this->line = -1;
|
$this->line = -1;
|
||||||
while( !$this->driver->eof() ){
|
while( !$this->driver->eof() ){
|
||||||
$this->line++;
|
$this->line++;
|
||||||
$this->driver->fgetcsv();
|
$this->driver->fgetcsv();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function close(){ $this->driver = null; }
|
public function close(){ $this->driver = null; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* RETOURNE LA LISTE DES INDEX
|
/* RETOURNE LA LISTE DES INDEX
|
||||||
*
|
*
|
||||||
* @i<String> Index pour lequel on veut la ligne et le hash
|
* @i<String> Index pour lequel on veut la ligne et le hash
|
||||||
*
|
*
|
||||||
* @return Index<Array> Tableau associatif contenant le hash et la ligne
|
* @return Index<Array> Tableau associatif contenant le hash et la ligne
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function index($i=null){
|
public function index($i=null){
|
||||||
return is_numeric($i) ? $this->index : $this->index;
|
return is_numeric($i) ? $this->index : $this->index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* INSERTION D'UNE ENTREE DANS LA BASE DE DONNEES
|
/* INSERTION D'UNE ENTREE DANS LA BASE DE DONNEES
|
||||||
*
|
*
|
||||||
* @key<String> Clé qui permettra l'accès direct
|
* @key<String> Clé qui permettra l'accès direct
|
||||||
* @data<mixed*> Objet qui sera enregistré dans la base
|
* @data<mixed*> Objet qui sera enregistré dans la base
|
||||||
*
|
*
|
||||||
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function insert($key, $data){
|
public function insert($key, $data){
|
||||||
/* (1) On vérifie que la clé est unique */
|
/* (1) On vérifie que la clé est unique */
|
||||||
if( array_key_exists($key, $this->index) )
|
if( array_key_exists($key, $this->index) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (2) On ajoute les données aux fichier */
|
/* (2) On ajoute les données aux fichier */
|
||||||
$json_data = json_encode($data);
|
$json_data = json_encode($data);
|
||||||
$this->driver->seek($this->line);
|
$this->driver->seek($this->line);
|
||||||
$this->line++;
|
$this->line++;
|
||||||
$written = $this->driver->fwrite( $json_data.PHP_EOL );
|
$written = $this->driver->fwrite( $json_data.PHP_EOL );
|
||||||
|
|
||||||
// Si erreur d'écriture, on retourne FALSE
|
// Si erreur d'écriture, on retourne FALSE
|
||||||
if( is_null($written) )
|
if( is_null($written) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (3) On enregistre l'index */
|
/* (3) On enregistre l'index */
|
||||||
$this->index[$key] = array(
|
$this->index[$key] = array(
|
||||||
'line' => $this->line - 1,
|
'line' => $this->line - 1,
|
||||||
'hash' => sha1($json_data)
|
'hash' => sha1($json_data)
|
||||||
);
|
);
|
||||||
|
|
||||||
/* (4) On enregistre le fichier index */
|
/* (4) On enregistre le fichier index */
|
||||||
$fIndex = new \SplFileObject($this->dir.'index', 'w');
|
$fIndex = new \SplFileObject($this->dir.'index', 'w');
|
||||||
$fIndex->fwrite( json_encode($this->index) );
|
$fIndex->fwrite( json_encode($this->index) );
|
||||||
$fIndex = null;
|
$fIndex = null;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* MODIFICATION D'UNE ENTREE DE CLE DONNEE
|
/* MODIFICATION D'UNE ENTREE DE CLE DONNEE
|
||||||
*
|
*
|
||||||
* @key<String> Clé associée à la valeur à modifier
|
* @key<String> Clé associée à la valeur à modifier
|
||||||
* @data<mixed*> Nouvelle valeur, si tableau associatif, remplacera uniquement les valeurs données
|
* @data<mixed*> Nouvelle valeur, si tableau associatif, remplacera uniquement les valeurs données
|
||||||
*
|
*
|
||||||
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function update($key, $data){}
|
public function update($key, $data){}
|
||||||
|
|
||||||
|
|
||||||
/* RENVOIE LES DONNEES ASSOCIEES A UNE CLE DONNEE
|
/* RENVOIE LES DONNEES ASSOCIEES A UNE CLE DONNEE
|
||||||
*
|
*
|
||||||
* @key<String> Clé associée à la valeur à récupérer
|
* @key<String> Clé associée à la valeur à récupérer
|
||||||
*
|
*
|
||||||
* @return data<mixed*> Renvoie la valeur associée à la clé, FALSE si erreur
|
* @return data<mixed*> Renvoie la valeur associée à la clé, FALSE si erreur
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function fetch($key){
|
public function fetch($key){
|
||||||
/* (1) On vérifie que la clé existe bien */
|
/* (1) On vérifie que la clé existe bien */
|
||||||
if( !array_key_exists($key, $this->index) )
|
if( !array_key_exists($key, $this->index) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (2) On récupère la ligne */
|
/* (2) On récupère la ligne */
|
||||||
$line = $this->index[$key]['line'];
|
$line = $this->index[$key]['line'];
|
||||||
|
|
||||||
/* (3) On récupère le contenu */
|
/* (3) On récupère le contenu */
|
||||||
$this->driver->seek($line);
|
$this->driver->seek($line);
|
||||||
$json = json_decode( $this->driver->current(), true );
|
$json = json_decode( $this->driver->fgets(), true );
|
||||||
|
|
||||||
// Si erreur de parsage
|
// Si erreur de parsage
|
||||||
if( is_null($json) )
|
if( is_null($json) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return $json;
|
return $json;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* RENVOIE LES DONNEES ASSOCIEES AUX CLES DONNEES
|
/* RENVOIE LES DONNEES ASSOCIEES AUX CLES DONNEES
|
||||||
*
|
*
|
||||||
* @keys<Array> Liste des clés associées aux valeurs à récupérer
|
* @keys<Array> Liste des clés associées aux valeurs à récupérer
|
||||||
*
|
*
|
||||||
* @return data<Array> Renvoie un tableau des valeurs valeur associées aux clés (clé1->valeur1), FALSE si erreur
|
* @return data<Array> Renvoie un tableau des valeurs valeur associées aux clés (clé1->valeur1), FALSE si erreur
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function fetchAll($keys){
|
public function fetchAll($keys){
|
||||||
/* (1) On récupère fetch() pour toutes les clés */
|
/* (1) On récupère fetch() pour toutes les clés */
|
||||||
$wrapper = array();
|
$wrapper = array();
|
||||||
|
|
||||||
foreach($keys as $key){
|
foreach($keys as $key){
|
||||||
$data = $this->fetch($key);
|
$data = $this->fetch($key);
|
||||||
|
|
||||||
// Si aucune erreur, on ajoute l'entree au 'wrapper'
|
// Si aucune erreur, on ajoute l'entree au 'wrapper'
|
||||||
if( $data !== false )
|
if( $data !== false )
|
||||||
$wrapper[$key] = $data;
|
$wrapper[$key] = $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (2) On retourne le résultat */
|
/* (2) On retourne le résultat */
|
||||||
return $wrapper;
|
return $wrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* RENVOIE LES DONNEES ASSOCIEES A UN CHAMP DE RECHERCHE
|
/* SUPPRIME UNE ENTREE DE CLE DONNEE DE LA BASE DE DONNEES
|
||||||
*
|
*
|
||||||
* @nomParam<typeParam> Description du param
|
* @key<String> Clé de l'entrée à supprimer
|
||||||
*
|
*
|
||||||
* @return nomRetour<typeRetour> Description du retour
|
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function filter($data){} // select() en comparant $data
|
public function delete($key){
|
||||||
public function delete($key){}
|
/* (1) On vérifie l'existence de la clé */
|
||||||
|
if( !array_key_exists($key, $this->index) )
|
||||||
|
return true; // On considère que l'action souhaitée est effectuée
|
||||||
|
|
||||||
|
/* (2) On supprime la ligne de l'index */
|
||||||
|
unset( $this->index[$key] );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* RENVOIE LES DONNEES ASSOCIEES A UN CHAMP DE RECHERCHE
|
||||||
|
*
|
||||||
|
* @nomParam<typeParam> Description du param
|
||||||
|
*
|
||||||
|
* @return nomRetour<typeRetour> Description du retour
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function filter($data){
|
||||||
|
/* (1) Si @data est un tableau associatif */
|
||||||
|
if( is_array($data) ){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Sinon on compare @data en tant que valeur simple */
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$this->tmp = sha1( json_encode($data) );
|
||||||
|
return array_filter($this->index, array($this, 'callbackFilter'));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
protected function callbackFilter($e){ return $e['hash'] == $this->tmp; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue