#ifndef FOREIGNKEYVALUE_H
#define FOREIGNKEYVALUE_H

#include "query.h"
#include "reference.h"
#include <QVariant>
#include <QMetaType>
#include <QExplicitlySharedDataPointer>
#include <QSharedData>
#include <QMap>
class BaseAdaptor;
class ForeignKeyValueData : public QSharedData {
public:
    ForeignKeyValueData():m_adaptor(0){;}
    const BaseAdaptor *m_adaptor;
    Reference m_reference;
    Query m_constraint;
    QMap<QString,QVariant> m_options;
};

class ForeignKeyValue
{
public:
    /**
      Helper constructor that constrains to the query "ref.target.name() = value".
      */
    explicit ForeignKeyValue(const Reference &ref,
                    const QVariant &constraintValue,
                    const QMap<QString,QVariant> &options = QMap<QString,QVariant>() );
    ForeignKeyValue(const Reference &ref = Reference(),
                    const Query &constraint = Query(),
                    const QMap<QString,QVariant> &options = QMap<QString,QVariant>() );
    QString toString() const;
    operator QVariant() const;

private:
    QExplicitlySharedDataPointer<ForeignKeyValueData> m_data;
};
Q_DECLARE_METATYPE(ForeignKeyValue)

#endif // FOREIGNKEYVALUE_H

