2/% QString guard = _database->namespaces().join(
"_").toUpper() +
"_" + _klass->name().toUpper() +
"_H_";
8#include <kDB/Forward.h>
9#include <knowCore/Global.h>
10#include <knowCore/ValueList.h>
13#include "TypesDefinitions.h"
18 for(
const definitions::Forward* fw : _database->forwards())
21 for(
const QString& ns : fw->namespaces())
25 class /%= fw->name() %/;
27 for(
const QString& ns : fw->namespaces())
33 if(not _database->namespaces().isEmpty())
36namespace /%= _database->namespaces().join(
"::") %/
40 for(
const definitions::Class* klass : _database->classes())
45 class /%= klass->name() %/Value;
46 class /%= klass->name() %/Record;
47 class /%= klass->name() %/SelectQuery;
51 for(
const definitions::Class* sklass : _klass->classOfSubDefinitions())
54 class /%= sklass->name() %/Value;
55 class /%= sklass->name() %/Record;
56 class /%= sklass->name() %/SelectQuery;
60 class /%= _klass->name() %/Value;
61 class /%= _klass->name() %/Record;
64 class /%= _klass->name() %/SelectQuery
66 friend class /%= _klass->name() %/Record;
70 /%= _klass->name() %/SelectQuery(/%= databaseOrContainer(_klass) %/);
71 /%= _klass->name() %/SelectQuery(/%= databaseOrContainer(_klass) %/,
const QString& _fieldName,
const knowCore::Value& _value, Sql::Operand _op);
72 /%= _klass->name() %/SelectQuery(/%= databaseOrContainer(_klass) %/,
const QString& _expression,
const QVariantList& _values);
73 /%= _klass->name() %/SelectQuery(Private* _d);
75 /%= _klass->name() %/SelectQuery();
76 /%= _klass->name() %/SelectQuery(
const /%= _klass->name() %/SelectQuery& _rhs);
77 /%= _klass->name() %/SelectQuery& operator=(
const /%= _klass->name() %/SelectQuery& _rhs);
78 ~/%= _klass->name() %/SelectQuery();
80 std::size_t count(
int _count = 0)
const;
81 QList</%= _klass->name() %/Record> exec(
int _count = 0)
const;
82 QList</%= _klass->name() %/Record> exec(
int _skip,
int _count)
const;
83 /%= _klass->name() %/Record first()
const;
85 /%= _klass->name() %/SelectQuery operator||(
const /%= _klass->name() %/SelectQuery& _rhs)
const;
86 /%= _klass->name() %/SelectQuery operator&&(
const /%= _klass->name() %/SelectQuery& _rhs)
const;
89 for(
const definitions::Field* field : _klass->fields())
91 /%= _klass->name() %/SelectQuery orderBy/%= capitalizeFirstLetter(field->name()) %/(Sql::Sort _order)
const;/%
94 /%= _klass->name() %/SelectQuery randomOrder()
const;
97 enum class /%= _klass->name() %/Fields {/%
99 for(
const definitions::Field* field : _klass->fields())
101 /%= field->name() %/,/%
106 class /%= baseValueClassName(_klass) %/
108 friend class /%= _klass->name() %/Record;
110 for(
const definitions::Class* sklass : _klass->classOfSubDefinitions())
113 friend class /%= sklass->name() %/;
114 friend class /%= sklass->name() %/SelectQuery;
123 /%= baseValueClassName(_klass) %/(Private* _d);
125 if(hasDefaultBaseValueConstructor(_klass))
127 /%= baseValueClassName(_klass) %/();/%
129 /%= baseValueClassName(_klass) %/(/%= baseValueConstructionArguments(_klass,
true,
true) %/);
130 /%= baseValueClassName(_klass) %/(
const /%= baseValueClassName(_klass) %/& _rhs);
131 /%= baseValueClassName(_klass) %/& operator=(
const /%= baseValueClassName(_klass) %/& _rhs);
132 ~/%= baseValueClassName(_klass) %/();
134 cres_qresult<knowCore::ValueHash> toValueHash()
const;
135 static cres_qresult</%= baseValueClassName(_klass) %/> fromValueHash(
const knowCore::ValueHash& _valueHash);
137 bool operator==(
const /%= baseValueClassName(_klass) %/& _rhs)
const;
138 bool operator!=(
const /%= baseValueClassName(_klass) %/& _rhs)
const;
142 for(
const definitions::Field* field : _klass->fields())
144 if(isBaseValueField(_klass, field))
147 /%= cppReturnType(field) %/ /%= field->name() %/()
const;/%
148 if(not field->options().testFlag(definitions::Field::Constant) and not field->options().testFlag(definitions::Field::Key))
150 void set/%= capitalizeFirstLetter(field->name()) %/(/%= cppArgType(field) %/ _value);/%
157 if(_klass->doesImplement(definitions::INIT))
162 if(_klass->doesImplement(definitions::CLEANUP))
167 if(_klass->doesImplement(definitions::EXTENDED))
170#include "/%= baseValueClassName(_klass) %/_.h"/%
176 if(hasExtendedValueClass(_klass))
180 class /%= _klass->name() %/Value :
public /%= _klass->name() %/BaseValue
182 friend class /%= _klass->name() %/Record;
184 for(
const definitions::Class* sklass : _klass->classOfSubDefinitions())
187 friend class /%= sklass->name() %/;
188 friend class /%= sklass->name() %/SelectQuery;
195 /%= _klass->name() %/Value(Private* _d);
199 /%= _klass->name() %/Value();
201 /%= _klass->name() %/Value(
const kDB::Repository::QueryConnectionInfo& _connection,
const /%= _klass->name() %/BaseValue& _base_value, /%= onlyExtendedValueConstructionArguments(_klass,
true,
false) %/);
202 /%= _klass->name() %/Value(
const /%= _klass->name() %/Value& _rhs);
203 /%= _klass->name() %/Value& operator=(
const /%= _klass->name() %/Value& _rhs);
204 ~/%= _klass->name() %/Value();
206 bool operator==(
const /%= _klass->name() %/Value& _rhs)
const;
207 bool operator!=(
const /%= _klass->name() %/Value& _rhs)
const;
211 for(
const definitions::Field* field : _klass->fields())
213 if(isExtendedValueField(_klass, field))
216 /%= cppReturnType(field) %/ /%= field->name() %/()
const;/%
217 if(not field->options().testFlag(definitions::Field::Constant) and not field->options().testFlag(definitions::Field::Key))
219 void set/%= capitalizeFirstLetter(field->name()) %/(/%= cppArgType(field) %/ _value);/%
226 if(_klass->doesImplement(definitions::INIT))
231 if(_klass->doesImplement(definitions::CLEANUP))
236 if(_klass->doesImplement(definitions::EXTENDED))
239#include "/%= _klass->name() %/Value_.h
"/%
243 kDB::Repository::QueryConnectionInfo connection() const;
245 //END extended value class
250 class /%= _klass->name() %/Record : public /%= _klass->name() %/Value
253 for(const definitions::Class* sklass : _klass->classOfSubDefinitions())
256 friend class /%= sklass->name() %/;
257 friend class /%= sklass->name() %/SelectQuery;
262 using SelectQuery = /%= _klass->name() %/SelectQuery;
263 using SqlSort = /%= _database->namespaces().join("::
") %/::Sql::Sort;
264 using SqlOperand = /%= _database->namespaces().join("::
") %/::Sql::Operand;
267 if(not _klass->classOfContainerDefinition())
274 static cres_qresult<void> createTable(const kDB::Repository::QueryConnectionInfo& _connection);
278 static cres_qresult</%= _klass->name() %/Record> create(/%= databaseOrContainer(_klass) %/, /%= createArguments(_klass, true) %/);
279 static cres_qresult<QList</%= _klass->name() %/Record>> create(/%= databaseOrContainer(_klass) %/, const QList</%= _klass->name() %/Value>& _values);
282 AccessShare, RowShare, RowExclusive, ShareUpdateExclusive, Share, ShareRowExclusive, Exclusive, AccessExclusive
284 static cres_qresult<void> lock(const kDB::Repository::Transaction& _transaction, LockMode _mode = LockMode::AccessExclusive);
286 /%= _klass->name() %/Record();
287 /%= _klass->name() %/Record(const /%= _klass->name() %/Record& _rhs);
288 /%= _klass->name() %/Record& operator=(const /%= _klass->name() %/Record& _rhs);
289 /%= _klass->name() %/Record(/%= databaseOrContainer(_klass) %/ /%= constructorKeyArguments(_klass) %/);
290 ~/%= _klass->name() %/Record();
292 bool operator==(const /%= _klass->name() %/Record& _rhs) const;
296 bool sameValuesAs(const /%= _klass->name() %/Record& _rhs) const;
297 bool operator!=(const /%= _klass->name() %/Record& _rhs) const;
299 cres_qresult<void> discard();
300 cres_qresult<void> refresh();
304 cres_qresult<void> record();
308 cres_qresult<void> record(const kDB::Repository::QueryConnectionInfo& _connection);
312 cres_qresult<void> erase();
316 cres_qresult<void> erase(const kDB::Repository::QueryConnectionInfo& _connection);
320 bool isPersistent() const;
323 // Add function to access children
324 if(not _klass->children().empty())
326 for(const definitions::Class* child : _klass->children())
328 if(hasSingleChild(child, _klass))
330 /%= child->name() %/ /%= childfunctionname(child->name()) %/() const;/%
333 /%= child->name() %/SelectQuery /%= childrenfunctionname(child->name()) %/() const;/%
338 // Add field function: getter for auto, and query for everything
339 for(const definitions::Field* field : _klass->fields())
341 if(isRecordField(_klass, field))
343 /%= cppReturnType(field) %/ /%= field->name() %/() const;/%
346 static SelectQuery by/%= capitalizeFirstLetter(field->name()) %/(/%= databaseOrContainer(_klass) %/, /%= cppArgType(field) %/, Sql::Operand _op = Sql::Operand::EQ);/%
353 static SelectQuery by(/%= databaseOrContainer(_klass) %/, const QString& _expression, const QVariantList& _values); // QVariantList has to be used, because knowCore::Value cannot hold a /%= _klass->name() %/Fields
355 template<typename _T1_, typename ... _T_>
356 static SelectQuery by(/%= databaseOrContainer(_klass) %/, const QString& _expression, _T1_ _v, _T_... _values)
358 return by(/%= databaseOrContainerParameterName(_klass) %/, _expression, QVariantList(), _v, _values...);
361 template<typename _T1_, typename ... _T_>
362 static SelectQuery by(/%= databaseOrContainer(_klass) %/, const QString& _expression, const QVariantList& _arguments, _T1_ _v, _T_... _values)
364 QVariantList args = _arguments; args.append(QVariant::fromValue(_v));
365 return by(/%= databaseOrContainerParameterName(_klass) %/, _expression, args, _values...);
370 static SelectQuery all(/%= databaseOrContainer(_klass) %/);
373/% for(const definitions::Mapping* mapping : _klass->mappings())
375 const definitions::Class* klass = mapping->other(_klass);%/
376 QList</%= klass->name() %/> /%= functiongetallname(klass->name()) %/() const;
377 cres_qresult<void> add/%= klass->name() %/(const /%= klass->name() %/& _other);
378 cres_qresult<void> remove/%= klass->name() %/(const /%= klass->name() %/& _other);
382 if(_klass->doesImplement(definitions::INIT))
387 if(_klass->doesImplement(definitions::CLEANUP))
392 if(_klass->doesImplement(definitions::EXTENDED))
395#include "/%= _klass->name() %/Record_.h
"/%
399 kDB::Repository::QueryConnectionInfo connection() const;
404 //END Generate the record class
405 if(hasExtendedValueClass(_klass))
407 //BEGIN Extended value constructor with default
408 inline /%= _klass->name() %/Value::/%= _klass->name() %/Value(const kDB::Repository::QueryConnectionInfo& _connection, /%= extendedValueConstructionArguments(_klass, true, true) %/) : /%= _klass->name() %/Value()
410 init(_connection, /%= extendedValueConstructionArguments(_klass, false, false) %/);
413 //END Extended value constructor with default
415if(not _database->namespaces().isEmpty())
424 if(hasExtendedValueClass(_klass))
426Q_DECLARE_METATYPE(/%= _database->namespaces().join("::
") %/::/%= _klass->name() %/BaseValue)/%
429Q_DECLARE_METATYPE(/%= _database->namespaces().join("::
") %/::/%= _klass->name() %/Value)
430Q_DECLARE_METATYPE(/%= _database->namespaces().join("::
") %/::/%= _klass->name() %/Record)
431Q_DECLARE_METATYPE(/%= _database->namespaces().join("::
") %/::/%= _klass->name() %/Fields)
433#include <knowCore/Formatter.h>
435clog_format_declare_formatter(/%= _database->namespaces().join("::
") %/::/%= _klass->name() %/Record)
437 return format_to(ctx.out(), "'/%= _database->namespaces().join("::") %/::/%= _klass->name() %/Record'");
Definition QueryConnectionInfo.h:8
Definition ValueHash.h:13