//---------------------------------------------------------------------------
#ifndef AutoQueryH
#define AutoQueryH
//---------------------------------------------------------------------------

/* Autore: Mario Graziosi (mgraziosi@fgasoftware.com)
 * FG&A Software (http://www.fgasoftware.com)
 *
 * Esempio di utilizzo:
 *
 *     AutoQuery<TQuery> q;
 *     q->DatabaseName = "myDatabase";
 *     q->SQL->Text = "select count(*) from CUSTOMER";
 *     q->Open();
 *
 * Puo' essere conveniente modificare AutoQuery (oppure derivare) in modo che
 * il database venga impostato automaticamente dal costruttore. Nel caso si
 * scelga di derivare, ricorarsi di aggiungere rendere il distrutture virtual.
 */

// Nota: non e' necessario avere AutoQuery.cpp perche' tutte le funzioni sono
// inline e sono definite in AutoQuery.h

// A secondo del motore di accesso che si vuole usare, e' necessario
// #includere <DBTables.hpp> (BDE) oppure <SqlExpr.hpp> (dbExpress)
// oppure <IBQuery> (Interbase).
// Se AutoQuery viene usata in un progetto che utilizza esclusivamente
// il BDE o il dbExpress conviene eliminare (o commentare) una delle tre
// righe che seguono per ridurre i tempi di compilazione
#include <DBTables.hpp>
#include <SqlExpr.hpp>
#include <IBQuery.hpp>

template<class T>
class AutoQuery {
public:
    AutoQuery();
    ~AutoQuery();
    operator T*();
    T* operator->();
private:
    T* q;

private:
    AutoQuery(const AutoQuery<T>& rhs);
    AutoQuery& operator=(const AutoQuery<T>& rhs);
};

template<class T>
inline AutoQuery<T>::AutoQuery(): q(new T(0))
    {}

template<class T>
inline AutoQuery<T>::~AutoQuery()
    { delete q; }

template<class T>
inline AutoQuery<T>::operator T*()
    { return q; }

template<class T>
inline T* AutoQuery<T>::operator->()
    { return q; }


// A secondo del motore di accesso che si intende usare (BDE, dbExpress o
// Interbase) conviene "scommentare" uno dei typedef che seguono
// typedef AutoQuery<TQuery> BDEAutoQuery;
// typedef AutoQuery<TSQLQuery> dbAutoQuery;
// typedef AutoQuery<TIBQuery> IBAutoQuery;

#endif
