#include "argument.h"
#include "baseadaptor.h"

Argument::Argument( const BaseAdaptor *db,
            QString(BaseAdaptor::*call)(const QVariantList& )const,
            const QVariantList &args ) :
    m_db(db),
    m_call(call),
    m_args(args),
    m_nativeTypeId( qMetaTypeId<Argument>() )
{
}

const BaseAdaptor *Argument::db() const
{
    return m_db;
}

int Argument::nativeTypeId() const
{
   return m_nativeTypeId;
}

Argument::operator QVariant() const
{
    return toVariant();
}

Argument::operator QString() const
{
   return toString();
}

QString Argument::toString() const
{
    return m_db->expand(toVariant());
}

QVariant Argument::toVariant() const
{
    return QVariant(m_nativeTypeId, this);
}

QString Argument::exec() const
{
    if( m_db && m_call )
        return (m_db->*m_call)(m_args);
    return QString();
}

QVariantList Argument::args() const
{
    return m_args;
}

