58 #ifndef __UT_ORMMANYTOMANYFIELD_H__ 
   59 #define __UT_ORMMANYTOMANYFIELD_H__ 
   79     explicit inline operator bool()
 const { 
return isValid(); }
 
   83         return myThrough != 
nullptr;
 
   86     template <
typename LObjT, 
typename RObjT>
 
   94     template <
typename LObjT, 
typename RObjT>
 
  100                     = myThrough->findForeignRelatedField(mySourceFieldName);
 
  102                     = myThrough->findForeignRelatedField(myTargetFieldName);
 
  103             if (source_obj_field != 
nullptr && target_obj_field != 
nullptr)
 
  107                             meta.
db(), [ec]() { 
return !ec; },
 
  111                     for (
auto&& new_item : new_list_obj)
 
  116                                          mySourceFieldName, source_obj_field,
 
  119                                          myTargetFieldName, target_obj_field,
 
  129                     ec = tran.entryFailure();
 
  139     template <
typename LObjT, 
typename RObjT>
 
  145                     = myThrough->findForeignRelatedField(myTargetFieldName);
 
  147             if (target_obj_field != 
nullptr)
 
  149                 using r_pk_obj_t = 
typename RObjT::Meta::primary_key_t;
 
  159                 removeIds(obj, values, ec);
 
  168     template <
typename LObjT, 
typename RObjValueT>
 
  177                     = myThrough->findForeignRelatedField(mySourceFieldName);
 
  180             remove_in_str.
format(
"{}__in", myTargetFieldName);
 
  184                                  mySourceFieldName, source_obj_field, &obj),
 
  194     template <
typename LObjT, 
typename RObjT>
 
  205                         meta.
db(), [&ec]() { 
return !ec; },
 
  214                     add(obj, new_items, ec);
 
  219                             = myThrough->findForeignRelatedField(
 
  222                             = myThrough->findForeignRelatedField(
 
  224                     if (source_obj_field != 
nullptr && target_obj_field)
 
  227                                 typename RObjT::Meta::primary_key_t;
 
  233                                                   source_obj_field, &obj)})
 
  234                                           .
values({myTargetFieldName})
 
  244                         for (
auto&& 
value : result)
 
  247                                     = 
value.stmt().get<r_pk_field_t>(0);
 
  252                         for (
auto&& new_item : new_items)
 
  265                                 if (old_ids[i] == fk_v)
 
  279                         removeIds(obj, old_ids, ec);
 
  280                         add(obj, add_items, ec);
 
  286                 ec = tran.entryFailure();
 
  295     template <
typename LObjT>
 
  301                     = myThrough->findForeignRelatedField(mySourceFieldName);
 
  302             if (source_obj_field != 
nullptr)
 
  308                                               source_obj_field, &obj)})
 
  320     template <
typename LObjT, 
typename RObjT>
 
  331         for (
auto&& 
value : result)
 
  334             if (
value.load(obj, ec))
 
  342     template <
typename LObjT, 
typename RObjT>
 
  349                     = myThrough->findForeignRelatedField(mySourceFieldName);
 
  351             if (source_obj_field != 
nullptr)
 
  355                         "{}__{}", myQueryFieldName, source_obj_field->
name());
 
  358                         filter_name, source_obj_field, &obj)});
 
  385 template <
typename Owner, 
typename OtherModel>
 
  393         : myOwner(owner), myFieldName(field_name), myRightMeta(rmeta)
 
  406             bool do_clear = 
false);
 
  415         if (!myHasLookedForManager)
 
  417             myHasLookedForManager = 
true;
 
  419                     myOwner.get().meta(), myRightMeta, myFieldName);
 
  421         return myManyManager;
 
  428     bool myHasLookedForManager = 
false;
 
  431     std::reference_wrapper<Owner> myOwner;
 
  435 template <
typename Owner, 
typename Model>
 
  439     return manager().template add<Owner, Model>(myOwner, rmodel, ec);
 
  442 template <
typename Owner, 
typename Model>
 
  448     return manager().template add<Owner, Model>(myOwner, rmodels, ec);
 
  451 template <
typename Owner, 
typename Model>
 
  455     return manager().template all<Owner, Model>(myOwner, ec, myRightMeta);
 
  458 template <
typename Owner, 
typename Model>
 
  462     return manager().template all<Owner, Model>(myOwner, myRightMeta);
 
  465 template <
typename Owner, 
typename Model>
 
  471     return manager().template remove<Owner, Model>(myOwner, model, ec);
 
  474 template <
typename Owner, 
typename Model>
 
  478     return manager().template clear<Owner>(myOwner, ec);
 
  481 template <
typename Owner, 
typename OtherModel>
 
  488     return manager().template set<Owner, OtherModel>(
 
  489             myOwner, items, do_clear, ec);
 
  492 #endif // __UT_ORMMANYTOMANYFIELD_H__ 
void getValue(const Cls &obj, MemberT &member_value, UT_ErrorCode &ec)
 
const UT_StringHolder & name() const 
 
void clear(UT_ErrorCode &ec)
 
UT_ORMQuerySetResult error(UT_ErrorCode ec)
 
void set(LObjT &obj, const UT_Array< RObjT > &new_items, bool do_clear, UT_ErrorCode &ec)
 
GLsizei const GLfloat * value
 
SYS_FORCE_INLINE T * SYSconst_cast(const T *foo)
 
void removeIds(LObjT &obj, const UT_Array< RObjValueT > &values, UT_ErrorCode &ec)
 
exint removeIndex(exint index)
 
void remove(const OtherModel &model, UT_ErrorCode &ec)
 
static UT_ORMManyToManyManager lookupM2MManager(const UT_ORMModelMeta &meta, const UT_ORMModelMeta &other_meta, const UT_StringHolder &field_name)
 
UT_ORMManyToManyField(Owner &owner, const UT_StringHolder &field_name=UT_StringHolder::theEmptyString, const UT_ORMModelMeta &rmeta=OtherModel::metaInfo())
 
**But if you need a result
 
UT_ORMQuerySet filter(const std::initializer_list< UT::orm::FilterArg > &args)
 
UT_ORMQuerySet all() const 
 
UT_IORMFieldAdapter * adapter()
 
exint emplace_back(S &&...s)
 
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr. 
 
static const UT_StringHolder theEmptyString
 
UT_ORMQuerySet all(LObjT &obj, const UT_ORMModelMeta &rmeta) const 
 
void addBulk(const UT_Array< OtherModel > &rmodels, UT_ErrorCode &ec)
 
const UT_ErrorCode & getError() const 
 
void set(const UT_Array< OtherModel > &rmodels, UT_ErrorCode &ec, bool do_clear=false)
 
size_t format(const char *fmt, const Args &...args)
Format a string using the same formatting codes as UTformat. 
 
std::error_code UT_ErrorCode
 
auto UTmakeErrorCode(EnumT e) -> decltype(make_error_code(e))
Make a UT_ErrorCode based on the provided namespaced enum class. 
 
void add(LObjT &obj, const UT_Array< RObjT > &new_list_obj, UT_ErrorCode &ec)
 
UT_ORMQuerySetResult get()
 
void add(const OtherModel &rmodel, UT_ErrorCode &ec)
 
GLenum GLsizei GLsizei GLint * values
 
UT_ORMQuerySetResult create(const std::initializer_list< UT::orm::FilterArg > &args, bool ignore_conflicts=false, bool no_return=false)
 
void add(LObjT &obj, const RObjT &new_list_obj, UT_ErrorCode &ec)
 
void clear(LObjT &obj, UT_ErrorCode &ec)
 
void setOwner(Owner &owner)
 
ImageBuf OIIO_API add(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
 
UT_Array< RObjT > all(LObjT &obj, UT_ErrorCode &ec, const UT_ORMModelMeta &rmeta) const