bool RelationFetch::parseStream() { Protocol::FetchRelationsCommand cmd(m_command); SelectQueryBuilder<Relation> relationQuery; if (cmd.side() > 0) { Query::Condition c; c.setSubQueryMode(Query::Or); c.addValueCondition(Relation::leftIdFullColumnName(), Query::Equals, cmd.side()); c.addValueCondition(Relation::rightIdFullColumnName(), Query::Equals, cmd.side()); relationQuery.addCondition(c); } else { if (cmd.left() > 0) { relationQuery.addValueCondition(Relation::leftIdFullColumnName(), Query::Equals, cmd.left()); } if (cmd.right() > 0) { relationQuery.addValueCondition(Relation::rightIdFullColumnName(), Query::Equals, cmd.right()); } } if (!cmd.types().isEmpty()) { relationQuery.addJoin(QueryBuilder::InnerJoin, RelationType::tableName(), Relation::typeIdFullColumnName(), RelationType::idFullColumnName()); QStringList types; types.reserve(cmd.types().size()); Q_FOREACH (const QByteArray &type, cmd.types()) { types << QString::fromUtf8(type); } relationQuery.addValueCondition(RelationType::nameFullColumnName(), Query::In, types); }