<?php

class RequeteSuivi
{

    protected $database;
 // ex. : DB_OXASQLDB
    protected $tablePrincipale;
 // ex. : 'DA_LIGNE with (nolock)'
    protected $champsCle;
 // ex. : 'DA_LIGNE.NO_DA, DA_LIGNE.NO_PO'
    protected $arrayJointures;
 // une liste des jointures utilisées (tableau d'objets "JointureRequete")
                               
    // function __construct($database, $table_principale, $champs_cle) {
    function __construct()
    {
        $this->database = DB_OXASQLDB;
        $this->tablePrincipale = '';
        $this->champsCle = '';
        $this->arrayJointure = array();
    }

    public function setDatabase(& $database)
    {
        $this->database = $database;
    }

    public function &getDatabase()
    {
        return $this->database;
    }

    public function setTablePrincipale(& $tablePrincipale)
    {
        $this->tablePrincipale = $tablePrincipale;
    }

    public function &getTablePrincipale()
    {
        return $this->tablePrincipale;
    }

    public function setChampsCle(& $champsCle)
    {
        $this->champsCle = $champsCle;
    }

    public function &getChampsCle()
    {
        return $this->champsCle;
    }

    function &saveToString()
    {
        // return serializeSecure(get_object_vars($this));
        $strArrayJointures = '';
        $result = array(
            'database' => $this->database,
            'tablePrincipale' => $this->tablePrincipale,
            'champsCle' => $this->champsCle,
            'arrayJointures' => serializeSecure($this->arrayJointures) // pas sûr que ça fonctionne, c'est un tableau d'objets... Essayer avec une serialisation d'objets?
        );
        $str_result = serializeSecure($result);
        return $str_result;
    }

    public static function &loadFromString($string)
    {
        $result = null;
        $array = unserializeSecure($string);
        if (is_array($array)) {
            $result = new RequeteSuivi();
            $result->database = $array['database'];
            $result->tablePrincipale = $array['tablePrincipale'];
            $result->champsCle = $array['champsCle'];
            $result->arrayJointures = unserializeSecure($array['arrayJointures']);
        }
        return $result;
    }

    public function ajouteJointure(& $jointureRequete)
    { // On attend un objet de classe "JointureRequete"
        if ($jointureRequete instanceof JointureRequete) {
            $this->arrayJointures[$jointureRequete->getNomChamp()] = $jointureRequete;
        }
    }

    public function &getRequeteCount()
    {
        $sql_select = $this->champsCle;
        $sql_from = $this->tablePrincipale . ' '; // Doit finir par un espace
        $sql_where = '1=1 '; // Doit finir par un espace
        
        foreach ($this->arrayJointures as $nom_champ => & $jointure) {
            if ($jointure->isUtileCount()) {
                $sql_from .= $jointure->getJointureSql();
            }
        }
    }

    public function &getRequeteFiltre()
    {}

    public function &getRequeteRupture()
    {}
}


