QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
QxSqlQuery.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** https://www.qxorm.com/
4** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
5**
6** This file is part of the QxOrm library
7**
8** This software is provided 'as-is', without any express or implied
9** warranty. In no event will the authors be held liable for any
10** damages arising from the use of this software
11**
12** Commercial Usage
13** Licensees holding valid commercial QxOrm licenses may use this file in
14** accordance with the commercial license agreement provided with the
15** Software or, alternatively, in accordance with the terms contained in
16** a written agreement between you and Lionel Marty
17**
18** GNU General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU
20** General Public License version 3.0 as published by the Free Software
21** Foundation and appearing in the file 'license.gpl3.txt' included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU General Public License version 3.0 requirements will be
24** met : http://www.gnu.org/copyleft/gpl.html
25**
26** If you are unsure which license is appropriate for your use, or
27** if you have questions regarding the use of this file, please contact :
28** contact@qxorm.com
29**
30****************************************************************************/
31
32#ifndef _QX_SQL_QUERY_H_
33#define _QX_SQL_QUERY_H_
34
35#ifdef _MSC_VER
36#pragma once
37#endif
38
46#ifdef Q_COMPILER_INITIALIZER_LISTS
47#include <initializer_list>
48#endif // Q_COMPILER_INITIALIZER_LISTS
49
50#ifdef _QX_ENABLE_BOOST_SERIALIZATION
51#include <boost/serialization/serialization.hpp>
52#include <boost/serialization/split_free.hpp>
53#include <boost/serialization/nvp.hpp>
54#endif // _QX_ENABLE_BOOST_SERIALIZATION
55
56#include <QtCore/qdatastream.h>
57
58#ifndef _QX_NO_JSON
59#include <QtCore/qjsonvalue.h>
60#include <QtCore/qjsonobject.h>
61#include <QtCore/qjsonarray.h>
62#include <QtCore/qjsondocument.h>
63#endif // _QX_NO_JSON
64
65#include <QtSql/qsqlquery.h>
66
68
70
72
74
76
77#include <QxConvert/QxConvert.h>
78
79namespace qx {
80class QxSqlQuery;
81} // namespace qx
82
83#ifdef _QX_ENABLE_BOOST_SERIALIZATION
84namespace boost {
85namespace serialization {
86
87template <class Archive> inline void qx_save(Archive & ar, const qx::QxSqlQuery & t, const unsigned int file_version);
88template <class Archive> inline void qx_load(Archive & ar, qx::QxSqlQuery & t, const unsigned int file_version);
89
90} // namespace serialization
91} // namespace boost
92#endif // _QX_ENABLE_BOOST_SERIALIZATION
93
94QX_DLL_EXPORT QDataStream & operator<< (QDataStream & stream, const qx::QxSqlQuery & t) QX_USED;
95QX_DLL_EXPORT QDataStream & operator>> (QDataStream & stream, qx::QxSqlQuery & t) QX_USED;
96
97#ifndef _QX_NO_JSON
98namespace qx {
99namespace cvt {
100namespace detail {
101template <> struct QxConvert_ToJson< qx::QxSqlQuery >;
102template <> struct QxConvert_FromJson< qx::QxSqlQuery >;
103QX_DLL_EXPORT QJsonValue QxConvert_ToJson_Helper(const qx::QxSqlQuery & t, const QString & format) QX_USED;
104QX_DLL_EXPORT qx_bool QxConvert_FromJson_Helper(const QJsonValue & j, qx::QxSqlQuery & t, const QString & format) QX_USED;
105} // namespace detail
106} // namespace cvt
107} // namespace qx
108#endif // _QX_NO_JSON
109
110namespace qx {
111
245{
246
247#ifdef _QX_ENABLE_BOOST_SERIALIZATION
248 template <class Archive> friend inline void boost::serialization::qx_save(Archive & ar, const qx::QxSqlQuery & t, const unsigned int file_version);
249 template <class Archive> friend inline void boost::serialization::qx_load(Archive & ar, qx::QxSqlQuery & t, const unsigned int file_version);
250#endif // _QX_ENABLE_BOOST_SERIALIZATION
251
252 friend QX_DLL_EXPORT QDataStream & ::operator<< (QDataStream & stream, const qx::QxSqlQuery & t);
253 friend QX_DLL_EXPORT QDataStream & ::operator>> (QDataStream & stream, qx::QxSqlQuery & t);
254
255#ifndef _QX_NO_JSON
257 friend struct qx::cvt::detail::QxConvert_FromJson< qx::QxSqlQuery >;
258 friend QX_DLL_EXPORT QJsonValue qx::cvt::detail::QxConvert_ToJson_Helper(const qx::QxSqlQuery & t, const QString & format);
259 friend QX_DLL_EXPORT qx_bool qx::cvt::detail::QxConvert_FromJson_Helper(const QJsonValue & j, qx::QxSqlQuery & t, const QString & format);
260#endif // _QX_NO_JSON
261
262public:
263
264 typedef std::function<void (QString &)> type_fct_on_before_sql_prepare;
265
266protected:
267
269 { QHash<QString, int> positionByKey; QHash<QString, int> positionByKeyUpper; QVector< QVector<QVariant> > values; };
270
271 typedef std::tuple<QVariant, QSql::ParamType> type_bind_value;
272
273 QStringList m_sQuery;
276 QList<qx::dao::detail::IxSqlElement_ptr> m_lstSqlElement;
280 std::shared_ptr<QxSqlResult> m_pSqlResult;
281 QVariant m_vResponse;
282 QString m_sType;
283 QHash<QString, std::shared_ptr<QxSqlQuery> > m_lstJoinQueryUser;
284 QList<std::shared_ptr<QxSqlQuery> > m_lstJoinQueryToResolve;
286
287public:
288
290 QxSqlQuery(const char * query, const QVariantList & values = QVariantList());
291 QxSqlQuery(const QString & query, const QVariantList & values = QVariantList());
292 QxSqlQuery(const QStringList & query);
293 QxSqlQuery(const QString & type, const QString & query);
294 QxSqlQuery(const QString & type, const QStringList & query);
295 virtual ~QxSqlQuery();
296
297#ifndef _QX_NO_JSON
298#ifdef Q_COMPILER_INITIALIZER_LISTS
299 QxSqlQuery(std::initializer_list<QPair<QString, QJsonValue> > json);
300 QxSqlQuery(std::initializer_list<QPair<QString, QJsonValue> > json, std::initializer_list<QPair<QString, QJsonValue> > opts);
301 QxSqlQuery(const QString & type, std::initializer_list<QPair<QString, QJsonValue> > json);
302 QxSqlQuery(const QString & type, std::initializer_list<QPair<QString, QJsonValue> > json, std::initializer_list<QPair<QString, QJsonValue> > opts);
303#endif // Q_COMPILER_INITIALIZER_LISTS
304#endif // _QX_NO_JSON
305
306 QString query();
307 QString queryAt(int idx) const;
308 void queryAt(int idx, const QString & query);
309 QVariant response() const;
310 QString type() const;
311 bool isEmpty() const;
312 bool isDistinct() const;
313 void clear();
314 void resolve(QSqlQuery & query, qx::QxCollection<QString, QVariantList> * pLstExecBatch = NULL) const;
315 void resolveOutput(QSqlQuery & query, bool bFetchSqlResult);
316 void postProcess(QString & sql) const;
317 void setResponse(const QVariant & v);
318 void setType(const QString & s);
319 QString getJoinQuery(const QString & relationKey, const QString & relationAlias);
321
322 QxSqlQuery & query(const QString & sQuery);
323 QxSqlQuery & bind(const QVariant & vValue, QSql::ParamType paramType = QSql::In);
324 QxSqlQuery & bind(const QString & sKey, const QVariant & vValue, QSql::ParamType paramType = QSql::In);
325
326 QVariant boundValue(const QString & sKey) const;
327 QVariant boundValue(int iPosition) const;
328
331 QVariant getSqlResultAt(long row, long column) const;
332 QVariant getSqlResultAt(long row, const QString & column, bool caseSensitive = false) const;
333 QVector<QVariant> getSqlResultAt(long row) const;
334 QVector<QString> getSqlResultAllColumns() const;
336
337 static void dumpBoundValues(const QSqlQuery & query);
338
340 void onBeforeSqlPrepare(QString & sql);
341
342private:
343
344 void verifyQuery() const QX_USED;
345 void fetchSqlResult(QSqlQuery & query);
346
347public:
348
349 /* -- All methods to build SQL query using C++ syntax -- */
350
351 virtual QxSqlQuery & distinct();
352
353 virtual QxSqlQuery & where(const QString & column);
354 virtual QxSqlQuery & where_OpenParenthesis(const QString & column);
355 virtual QxSqlQuery & and_(const QString & column);
356 virtual QxSqlQuery & and_OpenParenthesis(const QString & column);
357 virtual QxSqlQuery & or_(const QString & column);
358 virtual QxSqlQuery & or_OpenParenthesis(const QString & column);
359
360 virtual QxSqlQuery & openParenthesis();
361 virtual QxSqlQuery & closeParenthesis();
362
363 virtual QxSqlQuery & orderAsc(const QStringList & columns);
364 virtual QxSqlQuery & orderAsc(const QString & col1);
365 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2);
366 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2, const QString & col3);
367 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4);
368 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5);
369 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6);
370 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7);
371 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8);
372 virtual QxSqlQuery & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9);
373
374 virtual QxSqlQuery & orderDesc(const QStringList & columns);
375 virtual QxSqlQuery & orderDesc(const QString & col1);
376 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2);
377 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2, const QString & col3);
378 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4);
379 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5);
380 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6);
381 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7);
382 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8);
383 virtual QxSqlQuery & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9);
384
385 virtual QxSqlQuery & groupBy(const QStringList & columns);
386 virtual QxSqlQuery & groupBy(const QString & col1);
387 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2);
388 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2, const QString & col3);
389 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4);
390 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5);
391 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6);
392 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7);
393 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8);
394 virtual QxSqlQuery & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9);
395
396 virtual QxSqlQuery & limit(int rowsCount, int startRow = 0, bool withTies = false);
397
398 virtual QxSqlQuery & like(const QString & val);
399 virtual QxSqlQuery & notLike(const QString & val);
400 virtual QxSqlQuery & startsWith(const QString & val);
401 virtual QxSqlQuery & endsWith(const QString & val);
402 virtual QxSqlQuery & containsString(const QString & val);
403
404 virtual QxSqlQuery & isEqualTo(const QVariant & val);
405 virtual QxSqlQuery & isNotEqualTo(const QVariant & val);
406 virtual QxSqlQuery & isGreaterThan(const QVariant & val);
407 virtual QxSqlQuery & isGreaterThanOrEqualTo(const QVariant & val);
408 virtual QxSqlQuery & isLessThan(const QVariant & val);
409 virtual QxSqlQuery & isLessThanOrEqualTo(const QVariant & val);
410 virtual QxSqlQuery & customOperator(const QString & sCustomOperator, const QVariant & val);
411
412 virtual QxSqlQuery & in(const QVariantList & values);
413 virtual QxSqlQuery & in(const QVariant & val1);
414 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2);
415 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2, const QVariant & val3);
416 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4);
417 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5);
418 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6);
419 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7);
420 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8);
421 virtual QxSqlQuery & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8, const QVariant & val9);
422
423 virtual QxSqlQuery & notIn(const QVariantList & values);
424 virtual QxSqlQuery & notIn(const QVariant & val1);
425 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2);
426 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3);
427 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4);
428 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5);
429 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6);
430 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7);
431 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8);
432 virtual QxSqlQuery & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8, const QVariant & val9);
433
434 virtual QxSqlQuery & in_Select(const QxSqlQuery & query);
435 virtual QxSqlQuery & notIn_Select(const QxSqlQuery & query);
436 virtual QxSqlQuery & isEqualTo_Select(const QxSqlQuery & query);
437 virtual QxSqlQuery & isNotEqualTo_Select(const QxSqlQuery & query);
438
439 virtual QxSqlQuery & isNull();
440 virtual QxSqlQuery & isNotNull();
441
442 virtual QxSqlQuery & isBetween(const QVariant & val1, const QVariant & val2);
443 virtual QxSqlQuery & isNotBetween(const QVariant & val1, const QVariant & val2);
444
445 virtual QxSqlQuery & freeText(const QString & text, const QVariantList & values = QVariantList());
446
447 virtual QxSqlQuery & addJoinQuery(const QString & relationKeyOrAlias, const QxSqlQuery & joinQuery);
448
449private:
450
451 QxSqlQuery & addSqlExpression(const QString & column, qx::dao::detail::QxSqlExpression::type type);
452 QxSqlQuery & addSqlCompare(const QVariant & val, qx::dao::detail::QxSqlCompare::type type, const QString & sCustomOperator = QString());
453 QxSqlQuery & addSqlSort(const QStringList & columns, qx::dao::detail::QxSqlSort::type type);
454 QxSqlQuery & addSqlIn(const QVariantList & values, qx::dao::detail::QxSqlIn::type type);
455 QxSqlQuery & addSqlIsNull(qx::dao::detail::QxSqlIsNull::type type);
456 QxSqlQuery & addSqlIsBetween(const QVariant & val1, const QVariant & val2, qx::dao::detail::QxSqlIsBetween::type type);
457 QxSqlQuery & addFreeText(const QString & text, const QVariantList & values);
458 QxSqlQuery & addEmbedQuery(const QxSqlQuery & query, qx::dao::detail::QxSqlEmbedQuery::type type, bool requirePreviousElement);
459
460};
461
462} // namespace qx
463
464typedef qx::QxSqlQuery qx_query;
465
466namespace qx {
467namespace dao {
468
492QX_DLL_EXPORT QSqlError call_query(qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL);
493
498QX_DLL_EXPORT QSqlError call_query_without_prepare(qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL);
499
500namespace helper {
501
502QX_DLL_EXPORT QSqlError call_query_helper(qx::QxSqlQuery & query, QSqlDatabase * pDatabase, bool bPrepare);
503
504} // namespace helper
505} // namespace dao
506} // namespace qx
507
509
511
512#ifdef _QX_ENABLE_BOOST_SERIALIZATION
514#endif // _QX_ENABLE_BOOST_SERIALIZATION
515
516#define QX_SQL_QUERY_DERIVED_IMPL_COVARIANT_RETURN_TYPE_HPP(className) \
517public: \
518\
519virtual className & distinct(); \
520\
521virtual className & where(const QString & column); \
522virtual className & where_OpenParenthesis(const QString & column); \
523virtual className & and_(const QString & column); \
524virtual className & and_OpenParenthesis(const QString & column); \
525virtual className & or_(const QString & column); \
526virtual className & or_OpenParenthesis(const QString & column); \
527\
528virtual className & openParenthesis(); \
529virtual className & closeParenthesis(); \
530\
531virtual className & orderAsc(const QStringList & columns); \
532virtual className & orderAsc(const QString & col1); \
533virtual className & orderAsc(const QString & col1, const QString & col2); \
534virtual className & orderAsc(const QString & col1, const QString & col2, const QString & col3); \
535virtual className & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4); \
536virtual className & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5); \
537virtual className & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6); \
538virtual className & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7); \
539virtual className & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8); \
540virtual className & orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9); \
541\
542virtual className & orderDesc(const QStringList & columns); \
543virtual className & orderDesc(const QString & col1); \
544virtual className & orderDesc(const QString & col1, const QString & col2); \
545virtual className & orderDesc(const QString & col1, const QString & col2, const QString & col3); \
546virtual className & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4); \
547virtual className & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5); \
548virtual className & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6); \
549virtual className & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7); \
550virtual className & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8); \
551virtual className & orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9); \
552\
553virtual className & groupBy(const QStringList & columns); \
554virtual className & groupBy(const QString & col1); \
555virtual className & groupBy(const QString & col1, const QString & col2); \
556virtual className & groupBy(const QString & col1, const QString & col2, const QString & col3); \
557virtual className & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4); \
558virtual className & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5); \
559virtual className & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6); \
560virtual className & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7); \
561virtual className & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8); \
562virtual className & groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9); \
563\
564virtual className & limit(int rowsCount, int startRow = 0, bool withTies = false); \
565\
566virtual className & like(const QString & val); \
567virtual className & notLike(const QString & val); \
568virtual className & startsWith(const QString & val); \
569virtual className & endsWith(const QString & val); \
570virtual className & containsString(const QString & val); \
571\
572virtual className & isEqualTo(const QVariant & val); \
573virtual className & isNotEqualTo(const QVariant & val); \
574virtual className & isGreaterThan(const QVariant & val); \
575virtual className & isGreaterThanOrEqualTo(const QVariant & val); \
576virtual className & isLessThan(const QVariant & val); \
577virtual className & isLessThanOrEqualTo(const QVariant & val); \
578virtual className & customOperator(const QString & sCustomOperator, const QVariant & val); \
579\
580virtual className & in(const QVariantList & values); \
581virtual className & in(const QVariant & val1); \
582virtual className & in(const QVariant & val1, const QVariant & val2); \
583virtual className & in(const QVariant & val1, const QVariant & val2, const QVariant & val3); \
584virtual className & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4); \
585virtual className & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5); \
586virtual className & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6); \
587virtual className & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7); \
588virtual className & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8); \
589virtual className & in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8, const QVariant & val9); \
590\
591virtual className & notIn(const QVariantList & values); \
592virtual className & notIn(const QVariant & val1); \
593virtual className & notIn(const QVariant & val1, const QVariant & val2); \
594virtual className & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3); \
595virtual className & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4); \
596virtual className & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5); \
597virtual className & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6); \
598virtual className & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7); \
599virtual className & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8); \
600virtual className & notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8, const QVariant & val9); \
601\
602virtual className & in_Select(const QxSqlQuery & query); \
603virtual className & notIn_Select(const QxSqlQuery & query); \
604virtual className & isEqualTo_Select(const QxSqlQuery & query); \
605virtual className & isNotEqualTo_Select(const QxSqlQuery & query); \
606\
607virtual className & isNull(); \
608virtual className & isNotNull(); \
609\
610virtual className & isBetween(const QVariant & val1, const QVariant & val2); \
611virtual className & isNotBetween(const QVariant & val1, const QVariant & val2); \
612\
613virtual className & freeText(const QString & text, const QVariantList & values = QVariantList()); \
614\
615virtual className & addJoinQuery(const QString & relationKeyOrAlias, const QxSqlQuery & joinQuery);
616
617#define QX_SQL_QUERY_DERIVED_IMPL_COVARIANT_RETURN_TYPE_CPP(className) \
618\
619className & className::distinct() { return static_cast<className &>(qx::QxSqlQuery::distinct()); } \
620\
621className & className::where(const QString & column) { return static_cast<className &>(qx::QxSqlQuery::where(column)); } \
622className & className::where_OpenParenthesis(const QString & column) { return static_cast<className &>(qx::QxSqlQuery::where_OpenParenthesis(column)); } \
623className & className::and_(const QString & column) { return static_cast<className &>(qx::QxSqlQuery::and_(column)); } \
624className & className::and_OpenParenthesis(const QString & column) { return static_cast<className &>(qx::QxSqlQuery::and_OpenParenthesis(column)); } \
625className & className::or_(const QString & column) { return static_cast<className &>(qx::QxSqlQuery::or_(column)); } \
626className & className::or_OpenParenthesis(const QString & column) { return static_cast<className &>(qx::QxSqlQuery::or_OpenParenthesis(column)); } \
627\
628className & className::openParenthesis() { return static_cast<className &>(qx::QxSqlQuery::openParenthesis()); } \
629className & className::closeParenthesis() { return static_cast<className &>(qx::QxSqlQuery::closeParenthesis()); } \
630\
631className & className::orderAsc(const QStringList & columns) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(columns)); } \
632className & className::orderAsc(const QString & col1) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1)); } \
633className & className::orderAsc(const QString & col1, const QString & col2) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2)); } \
634className & className::orderAsc(const QString & col1, const QString & col2, const QString & col3) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2, col3)); } \
635className & className::orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2, col3, col4)); } \
636className & className::orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2, col3, col4, col5)); } \
637className & className::orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2, col3, col4, col5, col6)); } \
638className & className::orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2, col3, col4, col5, col6, col7)); } \
639className & className::orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2, col3, col4, col5, col6, col7, col8)); } \
640className & className::orderAsc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9) { return static_cast<className &>(qx::QxSqlQuery::orderAsc(col1, col2, col3, col4, col5, col6, col7, col8, col9)); } \
641\
642className & className::orderDesc(const QStringList & columns) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(columns)); } \
643className & className::orderDesc(const QString & col1) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1)); } \
644className & className::orderDesc(const QString & col1, const QString & col2) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2)); } \
645className & className::orderDesc(const QString & col1, const QString & col2, const QString & col3) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2, col3)); } \
646className & className::orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2, col3, col4)); } \
647className & className::orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2, col3, col4, col5)); } \
648className & className::orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2, col3, col4, col5, col6)); } \
649className & className::orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2, col3, col4, col5, col6, col7)); } \
650className & className::orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2, col3, col4, col5, col6, col7, col8)); } \
651className & className::orderDesc(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9) { return static_cast<className &>(qx::QxSqlQuery::orderDesc(col1, col2, col3, col4, col5, col6, col7, col8, col9)); } \
652\
653className & className::groupBy(const QStringList & columns) { return static_cast<className &>(qx::QxSqlQuery::groupBy(columns)); } \
654className & className::groupBy(const QString & col1) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1)); } \
655className & className::groupBy(const QString & col1, const QString & col2) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2)); } \
656className & className::groupBy(const QString & col1, const QString & col2, const QString & col3) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2, col3)); } \
657className & className::groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2, col3, col4)); } \
658className & className::groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2, col3, col4, col5)); } \
659className & className::groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2, col3, col4, col5, col6)); } \
660className & className::groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2, col3, col4, col5, col6, col7)); } \
661className & className::groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2, col3, col4, col5, col6, col7, col8)); } \
662className & className::groupBy(const QString & col1, const QString & col2, const QString & col3, const QString & col4, const QString & col5, const QString & col6, const QString & col7, const QString & col8, const QString & col9) { return static_cast<className &>(qx::QxSqlQuery::groupBy(col1, col2, col3, col4, col5, col6, col7, col8, col9)); } \
663\
664className & className::limit(int rowsCount, int startRow, bool withTies) { return static_cast<className &>(qx::QxSqlQuery::limit(rowsCount, startRow, withTies)); } \
665\
666className & className::like(const QString & val) { return static_cast<className &>(qx::QxSqlQuery::like(val)); } \
667className & className::notLike(const QString & val) { return static_cast<className &>(qx::QxSqlQuery::notLike(val)); } \
668className & className::startsWith(const QString & val) { return static_cast<className &>(qx::QxSqlQuery::startsWith(val)); } \
669className & className::endsWith(const QString & val) { return static_cast<className &>(qx::QxSqlQuery::endsWith(val)); } \
670className & className::containsString(const QString & val) { return static_cast<className &>(qx::QxSqlQuery::containsString(val)); } \
671\
672className & className::isEqualTo(const QVariant & val) { return static_cast<className &>(qx::QxSqlQuery::isEqualTo(val)); } \
673className & className::isNotEqualTo(const QVariant & val) { return static_cast<className &>(qx::QxSqlQuery::isNotEqualTo(val)); } \
674className & className::isGreaterThan(const QVariant & val) { return static_cast<className &>(qx::QxSqlQuery::isGreaterThan(val)); } \
675className & className::isGreaterThanOrEqualTo(const QVariant & val) { return static_cast<className &>(qx::QxSqlQuery::isGreaterThanOrEqualTo(val)); } \
676className & className::isLessThan(const QVariant & val) { return static_cast<className &>(qx::QxSqlQuery::isLessThan(val)); } \
677className & className::isLessThanOrEqualTo(const QVariant & val) { return static_cast<className &>(qx::QxSqlQuery::isLessThanOrEqualTo(val)); } \
678className & className::customOperator(const QString & sCustomOperator, const QVariant & val) { return static_cast<className &>(qx::QxSqlQuery::customOperator(sCustomOperator, val)); } \
679\
680className & className::in(const QVariantList & values) { return static_cast<className &>(qx::QxSqlQuery::in(values)); } \
681className & className::in(const QVariant & val1) { return static_cast<className &>(qx::QxSqlQuery::in(val1)); } \
682className & className::in(const QVariant & val1, const QVariant & val2) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2)); } \
683className & className::in(const QVariant & val1, const QVariant & val2, const QVariant & val3) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2, val3)); } \
684className & className::in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2, val3, val4)); } \
685className & className::in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2, val3, val4, val5)); } \
686className & className::in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2, val3, val4, val5, val6)); } \
687className & className::in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2, val3, val4, val5, val6, val7)); } \
688className & className::in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2, val3, val4, val5, val6, val7, val8)); } \
689className & className::in(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8, const QVariant & val9) { return static_cast<className &>(qx::QxSqlQuery::in(val1, val2, val3, val4, val5, val6, val7, val8, val9)); } \
690\
691className & className::notIn(const QVariantList & values) { return static_cast<className &>(qx::QxSqlQuery::notIn(values)); } \
692className & className::notIn(const QVariant & val1) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1)); } \
693className & className::notIn(const QVariant & val1, const QVariant & val2) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2)); } \
694className & className::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2, val3)); } \
695className & className::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2, val3, val4)); } \
696className & className::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2, val3, val4, val5)); } \
697className & className::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2, val3, val4, val5, val6)); } \
698className & className::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2, val3, val4, val5, val6, val7)); } \
699className & className::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2, val3, val4, val5, val6, val7, val8)); } \
700className & className::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8, const QVariant & val9) { return static_cast<className &>(qx::QxSqlQuery::notIn(val1, val2, val3, val4, val5, val6, val7, val8, val9)); } \
701\
702className & className::in_Select(const QxSqlQuery & query) { return static_cast<className &>(qx::QxSqlQuery::in_Select(query)); } \
703className & className::notIn_Select(const QxSqlQuery & query) { return static_cast<className &>(qx::QxSqlQuery::notIn_Select(query)); } \
704className & className::isEqualTo_Select(const QxSqlQuery & query) { return static_cast<className &>(qx::QxSqlQuery::isEqualTo_Select(query)); } \
705className & className::isNotEqualTo_Select(const QxSqlQuery & query) { return static_cast<className &>(qx::QxSqlQuery::isNotEqualTo_Select(query)); } \
706\
707className & className::isNull() { return static_cast<className &>(qx::QxSqlQuery::isNull()); } \
708className & className::isNotNull() { return static_cast<className &>(qx::QxSqlQuery::isNotNull()); } \
709\
710className & className::isBetween(const QVariant & val1, const QVariant & val2) { return static_cast<className &>(qx::QxSqlQuery::isBetween(val1, val2)); } \
711className & className::isNotBetween(const QVariant & val1, const QVariant & val2) { return static_cast<className &>(qx::QxSqlQuery::isNotBetween(val1, val2)); } \
712\
713className & className::freeText(const QString & text, const QVariantList & values) { return static_cast<className &>(qx::QxSqlQuery::freeText(text, values)); } \
714\
715className & className::addJoinQuery(const QString & relationKeyOrAlias, const QxSqlQuery & joinQuery) { return static_cast<className &>(qx::QxSqlQuery::addJoinQuery(relationKeyOrAlias, joinQuery)); }
716
717#endif // _QX_SQL_QUERY_H_
QxOrm thread-safe container (keep insertion order + quick access by index + quick access by key)
qx::cvt : namespace to provide global functions to convert any kind of objects to/from QString and QV...
#define QX_USED
Definition QxMacro.h:244
#define QX_DLL_EXPORT
Definition QxMacro.h:182
#define QX_SERIALIZE_FAST_COMPIL_SAVE_LOAD_HPP(dllImportExport, className)
QX_DLL_EXPORT QDataStream & operator>>(QDataStream &stream, qx::QxSqlQuery &t) QX_USED
QX_DLL_EXPORT QDataStream & operator<<(QDataStream &stream, const qx::QxSqlQuery &t) QX_USED
Register a version number per class.
#define QX_CLASS_VERSION(C, V)
Definition QxVersion.h:50
qx_bool : boolean type with code and description message when an error occured
Definition QxBool.h:71
qx::QxCollection<Key, Value> : QxOrm thread-safe container (keep insertion order + quick access by in...
qx::QxSqlQuery : define a user SQL query added to default SQL query builded by QxOrm library,...
Definition QxSqlQuery.h:245
QxSqlQuery(const QString &type, const QString &query)
std::tuple< QVariant, QSql::ParamType > type_bind_value
Definition QxSqlQuery.h:271
QxSqlQuery(const QStringList &query)
QStringList m_sQuery
Query SQL with place-holder.
Definition QxSqlQuery.h:273
QHash< QString, std::shared_ptr< QxSqlQuery > > m_lstJoinQueryUser
List of SQL queries defined by user to add inside relationships joins (LEFT OUTER JOIN,...
Definition QxSqlQuery.h:283
long getSqlResultRowCount() const
void setResponse(const QVariant &v)
QxCollection< QString, type_bind_value > m_lstValue
Bind value in this array.
Definition QxSqlQuery.h:274
QVariant getSqlResultAt(long row, const QString &column, bool caseSensitive=false) const
type_fct_on_before_sql_prepare m_fctOnBeforeSqlPrepare
Custom callback function to modify SQL query before preparing in database.
Definition QxSqlQuery.h:285
QList< std::shared_ptr< QxSqlQuery > > m_lstJoinQueryToResolve
List of SQL queries to resolve (in the right order) to add inside relationships joins (LEFT OUTER JOI...
Definition QxSqlQuery.h:284
QVariant m_vResponse
Can be used to store some responses (from MongoDB database for example in JSON format)
Definition QxSqlQuery.h:281
void resolveOutput(QSqlQuery &query, bool bFetchSqlResult)
void dumpSqlResult()
std::function< void(QString &)> type_fct_on_before_sql_prepare
Definition QxSqlQuery.h:264
QVector< QVariant > getSqlResultAt(long row) const
QxSqlQuery(const QString &type, const QStringList &query)
QString query()
QString queryAt(int idx) const
QVector< QString > getSqlResultAllColumns() const
void onBeforeSqlPrepare(QString &sql)
void queryAt(int idx, const QString &query)
int m_iSqlElementIndex
Current index of SQL element.
Definition QxSqlQuery.h:277
QVariant boundValue(int iPosition) const
bool isEmpty() const
QString m_sType
Query type (for example : 'aggregate' or 'cursor' for MongoDB database)
Definition QxSqlQuery.h:282
bool m_bDistinct
Replace SELECT by SELECT DISTINCT in SQL query.
Definition QxSqlQuery.h:279
void postProcess(QString &sql) const
QxSqlQuery & setFctOnBeforeSqlPrepare(type_fct_on_before_sql_prepare fct)
void setType(const QString &s)
QVariant response() const
std::shared_ptr< QxSqlResult > m_pSqlResult
All results returning by SQL query or stored procedure (after calling qx::dao::call_query function)
Definition QxSqlQuery.h:280
QxSqlQuery & bind(const QVariant &vValue, QSql::ParamType paramType=QSql::In)
QxSqlQuery(const QString &query, const QVariantList &values=QVariantList())
int m_iParenthesisCount
Current parenthesis count.
Definition QxSqlQuery.h:278
QxSqlQuery & query(const QString &sQuery)
void verifyQuery() const QX_USED
QxSqlQuery(const char *query, const QVariantList &values=QVariantList())
QxSqlQuery & bind(const QString &sKey, const QVariant &vValue, QSql::ParamType paramType=QSql::In)
bool isDistinct() const
qx::dao::detail::IxSqlElement_ptr m_pSqlElementTemp
Temporary SQL element.
Definition QxSqlQuery.h:275
QString getJoinQuery(const QString &relationKey, const QString &relationAlias)
QVariant getSqlResultAt(long row, long column) const
QVariant boundValue(const QString &sKey) const
virtual ~QxSqlQuery()
void resolve(QSqlQuery &query, qx::QxCollection< QString, QVariantList > *pLstExecBatch=NULL) const
QList< qx::dao::detail::IxSqlElement_ptr > m_lstSqlElement
List of all SQL elements to build SQL query.
Definition QxSqlQuery.h:276
QString getJoinQueryHash()
long getSqlResultColumnCount() const
static void dumpBoundValues(const QSqlQuery &query)
QString type() const
qx::trait::get_class_name<T>::get() : return class name of type T under const char * format,...
#define QX_REGISTER_CLASS_NAME(className)
QX_DLL_EXPORT QSqlError call_query(qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
qx::dao::call_query function can be used to call a custom SQL query or a stored procedure
QX_DLL_EXPORT QSqlError call_query_without_prepare(qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
qx::dao::call_query_without_prepare function can be used to call a custom SQL query or a stored proce...
void qx_save(Archive &ar, const qx::QxSqlQuery &t, const unsigned int file_version)
void qx_load(Archive &ar, qx::QxSqlQuery &t, const unsigned int file_version)
QX_DLL_EXPORT QJsonValue QxConvert_ToJson_Helper(const qx::dao::detail::IxSqlElement &t, const QString &format) QX_USED
QX_DLL_EXPORT qx_bool QxConvert_FromJson_Helper(const QJsonValue &j, qx::dao::detail::IxSqlElement &t, const QString &format) QX_USED
std::shared_ptr< IxSqlElement > IxSqlElement_ptr
QX_DLL_EXPORT QSqlError call_query_helper(qx::QxSqlQuery &query, QSqlDatabase *pDatabase, bool bPrepare)
Root namespace for all QxOrm library features.
QHash< QString, int > positionByKey
Definition QxSqlQuery.h:269