Gestion du delete(key)

This commit is contained in:
xdrm-brackets 2016-05-17 15:24:14 +02:00
parent e661bf99dd
commit 2cf98451e2
4 changed files with 290 additions and 251 deletions

View File

@ -89,7 +89,7 @@
// Lancement du téléchargement
// $req = new ModuleRequest('download/phone', array('subjects'=>[200]));
// $res = $req->dispatch();
// $res = $req->download();
@ -99,31 +99,26 @@
// RUN database
$db = new lightdb('testdb1');
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$a = microtime_float();
/* [1] INSERTION DE 1000*1000 éléments
=========================================================*/
$data = array();
for( $i = 0 ; $i < 1000 ; $i++ )
$data['key'.$i] = 'valeur'.$i;
var_dump('INSERTING key0 to key99');
$average = 0;
for( $i = 0 ; $i < 100 ; $i++ ){
$a = microtime_float();
$db->fetch('data'.$i);
$average += microtime_float()-$a;
}
for( $i = 0 ; $i < 100 ; $i++ )
echo $db->insert('key'.$i, array('data0_'.$i, 'data1_'.$i)) ? 'o' : '_';
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();

View File

@ -15,6 +15,8 @@
private $driver;
private $line;
private $tmp;
/* CONSTRUCTEUR -> CREER LES FICHIERS S'ILS N'EXISTENT PAS SINON, RECUPERE LES DONNES
*
* @dbname<String> Nom de la base de données
@ -42,7 +44,7 @@
$fIndex = new \SplFileObject($this->dir.'index');
$fIndex->seek(0);
$index = json_decode( $fIndex->current(), true );
$index = json_decode( $fIndex->fgets(), true );
// Si erreur de parsage, on retourne une erreur
if( is_null($index) ) return;
@ -56,6 +58,7 @@
/* (2) On place un 'driver' sur le fichier */
$this->driver = new \SplFileObject($this->dir.'data', 'r+');
// $this->driver->setFlags( \SplFileObject::SKIP_EMPTY );
/* (3) On récupère le nombre de lignes */
$this->line = -1;
@ -148,7 +151,7 @@
/* (3) On récupère le contenu */
$this->driver->seek($line);
$json = json_decode( $this->driver->current(), true );
$json = json_decode( $this->driver->fgets(), true );
// Si erreur de parsage
if( is_null($json) )
@ -182,6 +185,29 @@
}
/* SUPPRIME UNE ENTREE DE CLE DONNEE DE LA BASE DE DONNEES
*
* @key<String> Clé de l'entrée à supprimer
*
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
*
*/
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
@ -189,8 +215,26 @@
* @return nomRetour<typeRetour> Description du retour
*
*/
public function filter($data){} // select() en comparant $data
public function delete($key){}
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; }
}

200
tmp/testdb1/data Normal file → Executable file

File diff suppressed because one or more lines are too long

2
tmp/testdb1/index Normal file → Executable file

File diff suppressed because one or more lines are too long