[odb-users] std::map<Entity, int>

Adnan RIHAN axel50397 at gmail.com
Tue Nov 25 18:25:35 EST 2014

Hi Boris

On 24 novembre 2014 at 11:16:00, Boris Kolpackov (boris at codesynthesis.com(mailto:boris at codesynthesis.com)) wrote:

> #pragma db value
> struct ProductKey
> {
> QSharedPointer p;
> };

I tried this, the file was correctly compiled by ODB, but I needed to make some changes. As I needed many methods in the struct, I’ve decided to create a class, my class structure is like this:

- An Invoice has a Set of QSharedPointer<Cart>.
- A Cart has 1 struct CartId, 1 quantity (int).
- A struct CartId is 1 QWeakPointer<Invoice>, 1 QSharedPointer<Offer>.
- An Offer has 1 QSharedPointer<Product>, 1 price (int).
- A Product has many properties.

I want to make a composite key for struct CartId, and I think I’ve followed the doc, but I now have an odb compilation issue:
> apps/LGC/src/Models/Invoice/Invoice.hpp:107:0: warning: ignoring #pragma dbb member [-Wunknown-pragmas]
>  #   pragma  dbb  member(Invoice::m_cart)         not_null
>  ^
> apps/LGC/src/Models/Invoice/../Cart/Cart.hpp:81:45: error: name 'CartId' in db pragma column does not refer to a data member
> apps/LGC/src/Models/Invoice/../Cart/Cart.hpp:82:40: error: unable to resolve type name 'CartId::m_invoice' in db pragma value
> apps/LGC/src/Models/Invoice/../Cart/Cart.hpp:83:38: error: unable to resolve type name 'CartId::m_offer' in db pragma value

Here is my Cart.hpp (odb section, at the end of the file):
> # ifdef     ODB_COMPILER
> #   pragma  db  value(CartId)               column("")
> #   pragma  db  value(CartId::m_invoice)    column("invoice_id")
> #   pragma  db  value(CartId::m_offer)      column("offer_id")
> #   pragma  db  model                       version(1, 1, open)
> #   pragma  db  object(Cart)                table("invoice_carts")
> #   pragma  db  member(Cart::m_data)        id  auto
> #   pragma  db  member(Cart::m_quantity)    not_null    default(1)
> #   pragma  db  member(Cart::isDirty)       transient
> # endif

And for reference, my Invoice.hpp (because it also failed, but not anymore):
> # ifdef     ODB_COMPILER
> #   pragma  db  model                           version(1, 1, open)
> #   pragma  db  object(Invoice)                 table("invoices")
> #   pragma  db  member(Invoice::m_id)           id  auto
> #   pragma  db  member(Invoice::m_cart)         not_null    // QSet<QSharedPointer<Cart> >
> #   pragma  db  member(Invoice::m_customer)     not_null    column("customer_id")   default(1)
> #   pragma  db  member(Invoice::m_discount)     not_null    default(0)
> #   pragma  db  member(Invoice::m_comment)      null
> #   pragma  db  member(Invoice::m_barcode)      not_null
> #   pragma  db  member(Invoice::m_createdAt)    not_null    column("created_at")
> #   pragma  db  member(Invoice::m_updatedAt)    null        column("updated_at")
> #   pragma  db  member(Invoice::m_deletedAt)    null        column("deleted_at")
> #   pragma  db  member(Invoice::isDirty)        transient
> # endif

In your previous email, you wrote: "Interestingly, wrapping the pointer into a composite value seems to work”, could the error come from the fact that I’m making a composite of 2 unsupported data (objects).

Do I need to wrap the pointer into 2 distinct composite values, then in my struct CartId I would have 2 other structs?
Cordialement, Adnan RIHAN.
Directeur-Gérant de Eolis-Software, société de services informatiques.  

GPG: 5675-62BA (https://keybase.io/max13/key.asc)
-> Si vous n'utilisez pas GPG mais souhaitez quand même m’envoyer un e-mail chiffré: (https://encrypt.to/0x567562BA).

More information about the odb-users mailing list