[odb-users] query a container

Boris Kolpackov boris at codesynthesis.com
Fri Apr 17 10:12:34 EDT 2020

sam.degheldere at bricsys.com <sam.degheldere at bricsys.com> writes:

> #pragma db object
> class Commit
> {
>     std::map<OdString, std::shared_ptr<FileData>> m_files;
> }
> I was wondering if I can somehow query on this map?
> Specifically I'd like to query all my commits that contain a certain path
> (string/odstring).

Currently, the only way to query on containers is using native views (i.e.,
raw SQL). With one exception: if the container established a relationship
(like in your example), then you could query on the pointed-to object using
an object view.

So, in your example, a native view is the only way to query based on
the map key (OdString). But for FileData you can do:

#pragma db view object(Commit) object(FileData)
struct CommitFileView
  std::shared_ptr<Commit> commit;

And then:

using Query = odb::query<CommitFileView>;

db.query<CommitFileView> (Query::FileData::path == mypath)

More information about the odb-users mailing list