#ifndef QUERY_H
#define QUERY_H

#include <QMetaType>
#include <QVariant>
#include <QString>
#include "argument.h"

class BaseAdaptor;

class Query : public Argument
{
public:
    Query( const BaseAdaptor * const db = 0,
            QString (BaseAdaptor::*call)( const QVariantList& )const = 0,
            const QVariantList &args = QVariantList() );

    bool isValid() const;

    static bool canConvert( const QVariant &other );
    static Query convert( const QVariant &other );

    Query operator && ( const QVariant &other ) const;
    Query operator || ( const QVariant &other ) const;
    Query operator !  () const;

    QStringList tables() const;
    QStringList fieldsForTable( const QString &table ) const;

};
Q_DECLARE_METATYPE(Query)

#endif // QUERY_H

