<?php

/**
* class for storing changes when shard is offline.
* @todo make sure that the querycache class is being used by the sync class and also for inserting the queries themselfs into it.
* Atm this class isn't used yet if I remember correctly
* @author Daan Janssens, mentored by Matthew Lagoe
*/

class Querycache{
    
    private $SID;  /**< The queries ID */ 
    private $type;  /**< The type of query*/ 
    private $query;  /**< The query itself (json encoded) */ 
    private $db;  /**< the db where the query  should be performed */ 
    
    ////////////////////////////////////////////Functions////////////////////////////////////////////////////
    
    
    
    ////////////////////////////////////////////Methods////////////////////////////////////////////////////
    
    
    /**
    * A constructor.
    * Empty constructor
    */
    public function __construct() {
    }
    
    /**
    * sets the object's attributes.
    * @param $values should be an array of the form array('SID' => sid, 'type' => type, 'query' => query, 'db' => db).
    */
    public function set($values) {
        $this->setSID($values['SID']);
        $this->setType($values['type']);
        $this->setQuery($values['query']);
        $this->setDb($values['db']);
    }
    
    
    /**
    * loads the object's attributes.
    * loads the object's attributes by giving a SID as parameter
    * @param $id the id of the querycaches row
    */
    public function load_With_SID( $id) {
        $dbl = new DBLayer("lib");
        $statement = $dbl->select("ams_querycache", array('id' => $id), "SID=:id");
        $row = $statement->fetch();
        $this->set($row);
    } 
    
    
    /**
    * updates the entry.
    */
    public function update(){
        $dbl = new DBLayer("lib");
        $dbl->update("ams_querycache", Array('type' => $this->getType(), 'query' => $this->getQuery(), 'db' => $this->getDb(), "SID=$this->getSID()" ));
    }
    
    ////////////////////////////////////////////Getters////////////////////////////////////////////////////
    
    /**
    * get SID attribute of the object.
    */
    public function getSID(){
        return $this->SID;
    }
   
    /**
    * get type attribute of the object.
    */
    public function getType(){
        return $this->type;
    }
    
    /**
    * get query attribute of the object.
    */
    public function getQuery(){
        return $this->query;
    }
    
    /**
    * get db attribute of the object.
    */
    public function getDb(){
        return $this->db;
    }
    
    ////////////////////////////////////////////Setters////////////////////////////////////////////////////
    
    /**
    * set SID attribute of the object.
    * @param $s integer id 
    */
    public function setSID($s){
        $this->SID = $s;
    }
   
    /**
    * set type attribute of the object.
    * @param $t type of the query, could be changePassword, changePermissions, changeEmail, createUser
    */
    public function setType($t){
        $this->type = $t;
    }
    
    /**
    * set query attribute of the object.
    * @param $q query string
    */
    public function setQuery($q){
        $this->query= $q;
    }
    
    /**
    * set db attribute of the object.
    * @param $d the name of the database in the config global var that we want to use.
    */
    public function setDb($d){
        $this->db= $d;
    }
    
}