Implémentation de 'lightdb.delete()'

This commit is contained in:
xdrm-brackets 2016-05-18 09:41:36 +02:00
parent 207eb09583
commit 7d91473262
9 changed files with 954 additions and 11831 deletions

View File

@ -7,6 +7,7 @@
use \manager\ManagerError; use \manager\ManagerError;
use \manager\Repo; use \manager\Repo;
use \manager\Database; use \manager\Database;
use \manager\lightdb;
use \api\client; use \api\client;
@ -86,4 +87,26 @@
// } // }
$db = new lightdb('phone_storage/db');
for( $i = 0 ; $i < 10 ; $i ++)
$db->insert("i$i", 'test'.$i);
var_dump( $db->fetch('i0') );
var_dump( $db->fetch('i1') );
var_dump( $db->fetch('i2') );
var_dump( $db->fetch('i3') );
$last = $db->index();
$db->delete('i2');
$db->delete('i3');
$db->delete('i6');
foreach($last as $i=>$d)
echo $i.' -> '.$d['line'].' -> '.( isset($db->index()[$i]) ? $db->index()[$i]['line'] : '.').'<br>';
$db->close();
?> ?>

View File

@ -101,12 +101,16 @@
if( array_key_exists($key, $this->index) ) if( array_key_exists($key, $this->index) )
return true; return true;
$key = (string) $key;
/* (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 );
var_dump($written);
// 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;
@ -143,7 +147,7 @@
/* (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->fgets(), true ); $json = json_decode( $this->driver->current(), true );
// Si erreur de parsage // Si erreur de parsage
if( is_null($json) ) if( is_null($json) )
@ -165,9 +169,47 @@
if( !array_key_exists($key, $this->index) ) if( !array_key_exists($key, $this->index) )
return true; // On considère que l'action souhaitée est effectuée return true; // On considère que l'action souhaitée est effectuée
/* (2) On supprime la ligne de l'index */ $line = $this->index[$key]['line'];
/* (2) On réarrange la bd pour supprimer la ligne */
$tmpfilename = __ROOT__.'/tmp/'.uniqid().'.dat';
$tmpfile = new \SplFileObject($tmpfilename, 'w');
$this->driver->seek(0);
// On recopie toutes les lignes sauf celle à supprimer dans un fichier temporaire
while( $this->driver->key() < $this->line ){
if( $this->driver->key() != $line )
$tmpfile->fwrite( $this->driver->current() );
$this->driver->next();
}
// On décrémente le nb de lignes
$this->line--;
$tmpfile = null;
/* (3) On remplace le fichier original par le fichier temporaire */
$this->driver = null;
rename($tmpfilename, $this->dir.'data');
$this->driver = new \SplFileObject($this->dir.'data', 'r+');
/* (3) On supprime la ligne de l'index */
unset( $this->index[$key] ); unset( $this->index[$key] );
/* (4) On met à jour les index des lignes déplacées */
foreach($this->index as $i=>$indexData)
if( $indexData['line'] > $line )
$this->index[$i]['line']--; // on décrémente les lignes au dessus de la ligne supprimée
/* (5) On enregistre le fichier index */
$fIndex = new \SplFileObject($this->dir.'index', 'w');
$fIndex->fwrite( json_encode($this->index) );
$fIndex = null;
return true; return true;
} }

View File

@ -74,7 +74,7 @@
$uniqid = 0; $uniqid = 0;
// Décalage à appliquer à tous les ids // Décalage à appliquer à tous les ids
$offset = $uniqid + 2; $offset = intval($uniqid) + 2;
// Contiendra la valeur de l'id maximum // Contiendra la valeur de l'id maximum
$maxId = $offset; $maxId = $offset;
@ -89,12 +89,13 @@
// Contiendra le contenu du fichier // Contiendra le contenu du fichier
$file = array( 'logs' => array() ); $file = array( 'logs' => array() );
/* (1) Si on a déja crée le fichier avec le journal d'appel dedans, on le récupère */
$storage_already = is_string($subject['tmp_id']) && strlen($subject['tmp_id']) == 40;
/* (2) On définit les 2 fichiers utiles */ /* (1) On définit les 2 fichiers utiles */
$tmpfile = __ROOT__.'/tmp/phone_storage_'.$subject['tmp_id'].'.json'; $tmpfile = __ROOT__.'/tmp/phone_storage_'.$subject['tmp_id'].'.json';
/* (2) Si on a déja crée le fichier avec le journal d'appel dedans, on le récupère */
$storage_already = is_string($subject['tmp_id']) && strlen($subject['tmp_id']) == 40 && file_exists($tmpfile);
/* (3) Si on a déja crée le fichier, on essaie de récupérer son contenu */ /* (3) Si on a déja crée le fichier, on essaie de récupérer son contenu */
if( $storage_already ){ if( $storage_already ){

File diff suppressed because it is too large Load Diff

16
src/upload/phone_storage/db/data Executable file → Normal file

File diff suppressed because one or more lines are too long

2
src/upload/phone_storage/db/index Executable file → Normal file
View File

@ -1 +1 @@
{"1":{"line":0,"hash":"e87fa66f038f05904a1f4992c45b9f6430cbd78b"},"98":{"line":1,"hash":"3f04358b47ac0d1e9b5abcf1c5736a3231f46ed9"},"199":{"line":2,"hash":"f1de47c3dad31faf596e7f5dd74d2d5168eedf04"},"401":{"line":3,"hash":"a36813d7b22135df742fd0f441ea9bf34cee8508"},"805":{"line":4,"hash":"db7ae3d6b56e5598c29a53ddad013b27554ac2e3"},"1613":{"line":5,"hash":"3b05c357f3bb4b6e872642b2d1541a8927954e5d"},"3229":{"line":6,"hash":"21b2a4cc8307efeb2d6b1645859b5cd1324734e8"},"6461":{"line":7,"hash":"42c194779fec0cceaad90767fa5ed4129094abe6"},"12925":{"line":8,"hash":"df57e696ca3ffbee2955467aa073bf38e24384e6"}} {"i0":{"line":0,"hash":"426ae5243a83a66f3576abce1ac408fafc2beb3d"},"i1":{"line":1,"hash":"592e37f137ca31408b89b51dfaf18eb3ecd8dc76"},"i4":{"line":2,"hash":"188e6de350407bc64aa0607e5a161217b9a66249"},"i5":{"line":3,"hash":"3f2f86bc21e79444b15c8f9176ee87bfaef4e29e"},"i7":{"line":4,"hash":"0db82a5b803c7078ea5a1258540029b75bfc8c59"},"i8":{"line":5,"hash":"f2fc2c964d54eb5911c952512e0bf3c462bab473"},"i9":{"line":6,"hash":"46ed412fe6a52cce25613bff05cb4bcbb3fcae47"}}

View File

@ -1 +1 @@
25852 294908

0
tmp/573c07dc6dbd6.dat Normal file
View File

9
tmp/573c09876b58c.dat Normal file
View File

@ -0,0 +1,9 @@
"test0"
"test1"
"test2"
"test3"
"test4"
"test5"
"test6"
"test7"
"test8"