45 #ifndef __UT_ORMQUERYSET_H__
46 #define __UT_ORMQUERYSET_H__
67 static bool const value =
false;
86 class ut_QueryOperationInfo;
90 template <
typename... Ts>
93 using Ts::operator()...;
95 template <
typename... Ts>
103 myField(field), myObject(obj)
107 const void* myObject =
nullptr;
111 std::default_delete<ArgArray>,
112 UT_IntrusiveNonThreadSafeCounterPolicy>
115 virtual ~ArgArray() =
default;
116 ArgArray(
const ArgArray&) =
default;
117 ArgArray&
operator=(
const ArgArray&) =
default;
121 ArgArray() =
default;
123 template <
typename T>
124 class ArgArrayHolder final :
public ArgArray
127 ArgArrayHolder(
const T& objs) : myObjs(objs) {}
130 for (
auto&& obj : myObjs)
132 stmt.
bind(bind_index, obj);
138 exint size()
const override {
return myObjs.size(); }
143 template <
typename T>
144 class ArgArrayMemberHolder final :
public ArgArray
147 ArgArrayMemberHolder(
150 : myObjs(objs), myField(field)
155 for (
int i = 0; i < myObjs.size(); i++)
158 myField->adapter()->bind(&myObjs[i], stmt, bind_index, ec);
165 exint size()
const override {
return myObjs.size(); }
188 : myName(name), myArg(Column(field, obj))
217 [&](
const Column& col)
220 col.myField->adapter()->bind(
221 col.myObject, stmt, bind_index, ec);
226 arg->bind(stmt, bind_index);
230 using T = std::decay_t<decltype(arg)>;
231 stmt.
bind(bind_index, std::get<T>(myArg));
234 std::visit(visitor, myArg);
243 for (
int i = 0; i <
arg->size(); i++)
255 std::visit(visitor, myArg);
275 template <
typename T>
288 inline namespace Literal
292 const std::size_t len)
326 if (myResult !=
nullptr && rhs.myResult !=
nullptr)
327 return myResult->myStmt.isImplEqual(rhs->
myStmt);
328 else if (myResult ==
nullptr && rhs.myResult ==
nullptr)
334 return !(*
this == rhs);
353 return myResult ==
nullptr || !myResult->hasResults()
354 || myResult->getError();
400 template <
typename... Args>
405 template <
typename... Args>
410 template <
typename T>
415 template <
typename... Args>
420 template <
typename T>
423 return obj.meta().loadObject(obj,
myStmt, ec);
433 : myStmt(impl), myError(ec)
452 const std::initializer_list<UT::orm::FilterArg>&
args);
458 const std::initializer_list<UT::orm::FilterArg>& args);
463 const std::initializer_list<UT::orm::FilterArg>& args,
464 bool ignore_conflicts =
false,
465 bool no_return =
false);
468 const std::initializer_list<UT_StringHolder>& col_names)
470 myReturningValues.clear();
471 for (
auto&&
name : col_names)
473 myReturningValues.emplace_back(
name);
514 void addOperationToFilter_(
521 static ut_QueryOperationInfo* getAvailableOperations_();
532 std::reference_wrapper<const UT_ORMModelMeta> myModelMeta;
537 #endif // __UT_ORMQUERYSET_H__
const UT_ORMQuerySetResult * operator->() const
typename std::enable_if< B, T >::type enable_if_t
Define Imath::enable_if_t to be std for C++14, equivalent for C++11.
const UT_ErrorCode & getError() const
overloads(Ts...) -> overloads< Ts...>
const iterator end() const
bool operator!=(const iterator &rhs) const
std::tuple< Args...> as(UT_ErrorCode *ec=nullptr)
std::optional< std::tuple< std::tuple< Args...> > > as(UT_ErrorCode *ec=nullptr)
UT_IntrusivePtr< T > UTmakeIntrusive(ArgsT &&...args)
Constructs an object of type T wrapped in a UT_IntrusivePtr.
GLsizei const GLfloat * value
UT_ORMQuerySetResult(const UT_SharedPtr< UT_SqlStatementImpl > &impl, const UT_ErrorCode &ec)
bool bind(int idx, null_tag_t)
UT_Array< T > fetchAllFlat(UT_ErrorCode *ec=nullptr)
SYS_FORCE_INLINE T * SYSconst_cast(const T *foo)
UdlArgValue(const UT_StringHolder &str)
UT_Array< T > fetchAllFlat(UT_ErrorCode *ec=nullptr)
FilterArg operator=(T &&value)
**But if you need a result
A reference counter base class for use with UT_IntrusivePtr.
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
SIM_API const UT_StringHolder all
FilterArg(const UT_StringHolder &name, const UT_ORMFieldColumn *field, const void *obj)
std::forward_iterator_tag iterator_category
A utility class to do read-only operations on a subset of an existing string.
UT_ORMQuerySetResult & operator*()
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
void bind(UT_SqlStatement &stmt, int &bind_index) const
FilterArg(const UT_StringHolder &name, const UT_ORMFieldColumn *field, const T &objs)
Wrapper around hboost::intrusive_ptr.
UT_Array< std::tuple< Args...> > fetchAll(UT_ErrorCode *ec=nullptr)
const iterator begin() const
const iterator cbegin() const
bool load(T &obj, UT_ErrorCode &ec)
OIIO_UTIL_API bool exists(string_view path) noexcept
GLuint const GLchar * name
FilterArg(const UT_StringHolder &name, T &&arg)
bool operator==(const iterator &rhs) const
FilterArg(const UT_StringHolder &name, const char *arg)
std::error_code UT_ErrorCode
UT_ORMQuerySetResult * operator->()
void sqlParam(UT_WorkBuffer &wbuf) const
FilterArg(const UT_StringHolder &name, const T &objs)
LeafData & operator=(const LeafData &)=delete
SYS_FORCE_INLINE void append(char character)
const iterator cend() const
**If you just want to fire and args
const UT_StringHolder & name() const
UT_ORMQuerySet values(const std::initializer_list< UT_StringHolder > &col_names)
const UT_ORMQuerySetResult & operator*() const
std::optional< std::tuple< Args...> > fetchOne(UT_ErrorCode *ec=nullptr)
std::tuple< Args...> fetchOne(UT_ErrorCode *ec=nullptr)
UT_Array< std::tuple< Args...> > fetchAll(UT_ErrorCode *ec=nullptr)
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.