[odb-users] How to change the join type of relations in a view

علی دانش adanesh at noornet.net
Wed Jun 29 08:50:56 EDT 2016


Hi Boris!

How to change the join type of relations in a view. I want to use 'inner' instead of 'left'.

e.g.:

#pragma db object pointer(std::shared_ptr) session
class SubjectIndex
{
public:
#pragma db id auto
   int m_id;
   QString m_subject;
#pragma db unordered
   QList<odb::lazy_shared_ptr<TagIndex>> m_tags;
};

#pragma db object pointer(std::shared_ptr) session
class TagIndex
{
public:
#pragma db id auto
   int m_id;
   QString m_tag;
};

#pragma db view object(TagIndex) object(SubjectIndex inner)
struct TagSubjectIndex
{
   QString m_subject;
};

The generated query in '*-odb.cxx' file is like this:
    query_base_type r (
      "SELECT "
      "\"SubjectIndex\".\"subject\", "
      "\"SubjectIndex\".\"bookID\" ");

    r += "FROM \"TagIndex\"";

    r += " INNER JOIN \"SubjectIndex_tags\" ON";
    r += "\"SubjectIndex_tags\".\"value\"=\"TagIndex\".\"id\"";

    r += " LEFT JOIN \"SubjectIndex\" ON";
    r += "\"SubjectIndex_tags\".\"object_id\"=\"SubjectIndex\".\"id\"";

As you see there is a 'LEFT JOIN' that I want to change it to "INNER JOIN". How can I do that?

Thanks,
Ali



More information about the odb-users mailing list