diff --git a/src/Cache.php b/src/Cache.php index 64d3d42..7bc2ea8 100644 --- a/src/Cache.php +++ b/src/Cache.php @@ -59,6 +59,52 @@ class Cache { } } + + static public function check_cache($md5_query, $model_name) + { + + if(!file_exists(Webmodel::$folder_cache.'/'.$md5_query.'_'.$model_name.'.php')) + { + + return false; + + } + + return true; + + } + + static public function save_cache($md5_query, $model_name, $query) + { + + $file="nocached_fetch_array($query)) + { + + $file.="Webmodel::\$model['".$model_name."']->arr_cache_row[]=".var_export($row, true).";\n\n"; + + } + + file_put_contents(Webmodel::$folder_cache.'/'.$md5_query.'_'.$model_name.'.php', $file); + + } + + static public function file_cache($md5_file, $model_name) + { + + include(Webmodel::$folder_cache.'/'.$md5_file.'_'.$model_name.'.php'); + + } + + static public function refresh_cache($model_name, $new_id) + { + + array_map('unlink', glob(Webmodel::$folder_cache.'/'.'*_'.$model_name.'.php')); + + } } diff --git a/src/Databases/MySQLClass.php b/src/Databases/MySQLClass.php index 2797ef0..64c2e50 100644 --- a/src/Databases/MySQLClass.php +++ b/src/Databases/MySQLClass.php @@ -12,6 +12,8 @@ if(!function_exists('mysql_query')) class SQLClass { static public $debug=true; + + static public $persistent='p:'; static public function print_sql_fail($sql_fail, $server_data='default') { @@ -121,7 +123,7 @@ class SQLClass { Webmodel::$connection[$server_data]=mysqli_init(); - if ( !( mysqli_real_connect(Webmodel::$connection[$server_data], $host_db, $login_db, $contra_db ) ) ) + if ( !( mysqli_real_connect(Webmodel::$connection[$server_data], SqlClass::$persistent.$host_db, $login_db, $contra_db ) ) ) { return false; @@ -133,17 +135,6 @@ class SQLClass { //return Webmodel::$connection; } - static public function webtsys_pconnect( $host_db, $login_db, $contra_db, $server_data='default' ) - { - - if ( !( Webmodel::$connection[$server_data] = @mysql_pconnect( $host_db, $login_db, $contra_db ) ) ) - { - return false; - } - - return Webmodel::$connection; - } - static public function webtsys_select_db( $db , $server_data='default') { diff --git a/src/Webmodel.php b/src/Webmodel.php index f66d149..1ef36d1 100644 --- a/src/Webmodel.php +++ b/src/Webmodel.php @@ -260,6 +260,13 @@ class Webmodel { */ public $count_cache_query=0; + + /** + * Property used for count the new queries saved + * + */ + + public $last_query_md5=''; /** * Property that define if this model was cached before, if not, obtain the query from the sql db. @@ -269,12 +276,40 @@ class Webmodel { public $cached=0; /** - * Property that define the cache type, nosql, cached in memory with memcached or redis, etc. + * Property that define the cache method for save the rows in other source, how a file, redis, memcached... * */ static public $type_cache='PhangoApp\PhaModels\Cache::file_cache'; + + /** + * Property that define the cache type, nosql, cached in memory with memcached or redis, etc. + * + */ + + static public $save_cache='PhangoApp\PhaModels\Cache::save_cache'; + + /** + * Property that define the method for check if the cached of this query exists + * + */ + + static public $check_cache='PhangoApp\PhaModels\Cache::check_cache'; + + /** + * Property that define the method for refresh the cache of this table. + * + */ + + static public $refresh_cache='PhangoApp\PhaModels\Cache::refresh_cache'; + /** + * Property that define the method for check if the cached of this query exists + * + */ + + public $arr_cache_row=array(); + /** * Property that define if id is modified. * @@ -358,6 +393,12 @@ class Webmodel { public $update=0; + /** + * Method for set the method used from cache or directly from the database. + */ + + public $method_fetch_array='nocached_fetch_array'; + //Construct the model /** @@ -836,6 +877,13 @@ class Webmodel { } else { + if($this->cache==1) + { + + call_user_func(Webmodel::$refresh_cache, $this->name, $this->insert_id()); + + } + return 1; @@ -976,6 +1024,13 @@ class Webmodel { else { + if($this->cache==1) + { + + call_user_func(Webmodel::$refresh_cache, $this->name, $this->insert_id()); + + } + return 1; } @@ -1011,8 +1066,6 @@ class Webmodel { public function select($arr_select=array(), $raw_query=0, $cache_name='') { //Check conditions.., script must check, i can't make all things!, i am not a machine! - - $this->set_phango_connection(); if(!isset($this->arr_cache_query[$cache_name]) || $this->cache_query==0) { @@ -1129,22 +1182,6 @@ class Webmodel { //$conditions is a variable where store the result from $arr_select and $arr_extra_select - /*if(preg_match('/^where/', $conditions) || preg_match('/^WHERE/', $conditions)) - { - - $conditions=str_replace('where', '', $conditions); - $conditions=str_replace('WHERE', '', $conditions); - - $conditions='WHERE '.$where.' and '.$conditions; - - } - else - { - - $conditions='WHERE '.$where.' '.$conditions; - - }*/ - if($where!='') { @@ -1179,6 +1216,7 @@ class Webmodel { } + //$this->last_query_md5=md5($sql_query); if($cache_name!='' && !isset($this->arr_cache_query[$cache_name])) { @@ -1190,13 +1228,44 @@ class Webmodel { if($this->cache==0) { + + $this->method_fetch_array='nocached_fetch_array'; + + $this->set_phango_connection(); $query=SQLClass::webtsys_query($sql_query, $this->db_selected); } else { + $this->arr_cache_row=array(); + $md5_query=md5($sql_query); + //Check if this operation is cached, if not cached, send normal query and change type fetch_row and fetch_array. + + $this->method_fetch_array='cached_fetch_array'; + + if(!call_user_func(Webmodel::$check_cache, $md5_query, $this->name)) + { + + //Connect to db for make the caching + + $this->set_phango_connection(); + + $query=SQLClass::webtsys_query($sql_query, $this->db_selected); + + //Save the cache + + call_user_func(Webmodel::$save_cache, $md5_query, $this->name, $query); + + + } + + //Load the rows + + call_user_func(Webmodel::$type_cache, $md5_query, $this->name); + + return $md5_query; } @@ -1293,26 +1362,9 @@ class Webmodel { } - /* - if(preg_match('/^where/', $conditions) || preg_match('/^WHERE/', $conditions)) - { - - $conditions=str_replace('where', '', $conditions); - $conditions=str_replace('WHERE', '', $conditions); - - $conditions='WHERE '.$where.' and '.$conditions; - - } - else - { - - $conditions='WHERE '.$where.' '.$conditions; - - }*/ + $query=$this->query('select count('.$this->name.'.`'.$field.'`) from '.implode(', ', $arr_model).' '.$conditions, $this->db_selected); - $query=SQLClass::webtsys_query('select count('.$this->name.'.`'.$field.'`) from '.implode(', ', $arr_model).' '.$conditions, $this->db_selected); - - list($count_field)= SQLClass::webtsys_fetch_row($query); + list($count_field)= $this->fetch_row($query); return $count_field; @@ -1394,11 +1446,16 @@ class Webmodel { */ public function fetch_row($query) - { + { + + if($this->cache==0) + { + + $this->set_phango_connection(); - $this->set_phango_connection(); - - return SQLClass::webtsys_fetch_row($query); + return SQLClass::webtsys_fetch_row($query); + + } } @@ -1411,12 +1468,51 @@ class Webmodel { public function fetch_array($query) { - $this->set_phango_connection(); + $func=$this->method_fetch_array; + + return $this->$func($query); - return SQLClass::webtsys_fetch_array($query); } + /** + * A helper function for obtain an associative array from a result of $this->select + * + * @param mixed $query The result of an $this->select operation + */ + + public function nocached_fetch_array($query) + { + + + $this->set_phango_connection(); + + return SQLClass::webtsys_fetch_array($query); + + + } + + /** + * A helper function for obtain an associative array from a result of $this->select from cache + * + * @param mixed $query The result of an $this->select operation + */ + + public function cached_fetch_array($md5_query) + { + + /* + $this->set_phango_connection(); + + return SQLClass::webtsys_fetch_array($query);*/ + + list($key, $value)=each($this->arr_cache_row); + + return $value; + + + } + /** * A helper function for obtain the last insert id. * @@ -1566,6 +1662,8 @@ class Webmodel { static public function drop_table($table) { + $this->set_phango_connection(); + return SQLClass::webtsys_query('drop table '.$table); } @@ -1579,7 +1677,7 @@ class Webmodel { static public function escape_string($value) { - return SQLClass::webtsys_escape_string($value); + return addslashes($value); }