Beispiel #1
0
 public function __construct(Database $model)
 {
     /* CLI case */
     if (!defined('APPLICATION_ENV')) {
         define('APPLICATION_ENV', 'production');
     }
     $this->model = $model;
     $ageChange = $model->cache()->get(sha1($model->dir));
     $ageDb = $model->cache()->get(sha1($model->dir) . '_ageDb');
     $dbFile = Config::get('directory.store', STORAGE_PATH) . DS . $model->db . '_' . APPLICATION_ENV . '.db';
     $this->db = new PDO('sqlite:' . $dbFile);
     umask(00);
     chmod($dbFile, 0777);
     $populate = true;
     if (strlen($ageDb) && strlen($ageChange)) {
         if ($ageDb > $ageChange) {
             $populate = false;
         } else {
             $model->cache()->del(sha1($model->dir) . '_ageDb');
         }
     }
     if ($populate) {
         $this->populate();
     }
 }
Beispiel #2
0
 public static function make($name, Database $model, $overAge = false)
 {
     $name = Inflector::urlize($name, '.');
     $ageChange = $model->cache()->get(sha1($model->dir));
     $ageChange = strlen($ageChange) ? $ageChange : 0;
     $hash = "dbjson::cachedQueries::{$model->db}::{$model->table}";
     $cachedAge = "dbjson::cachedQueries::{$model->db}::{$model->table}::{$name}::age";
     $ageCached = $model->cache()->get($cachedAge);
     $ageCached = strlen($ageCached) ? $ageCached : 0;
     $cached = $model->cache()->hget($hash, $name);
     if (strlen($cached)) {
         if ($ageCached < $ageChange) {
             if ($overAge) {
                 return new Cachedresults($cached);
             } else {
                 $model->cache()->hdel($hash, $name);
                 $model->cache()->del($cachedAge);
             }
         } else {
             return new Cachedresults($cached);
         }
     }
     Event::listen("{$model->db}.{$model->table}.put.in.cache", function ($collection) use($model, $cachedAge, $hash, $name) {
         $model->cache()->hset($hash, $name, serialize($collection));
         $model->cache()->set($cachedAge, time());
     });
     return $model;
 }