1/% QString guard = _database->namespaces().join(
"_").toUpper() +
"_" + _klass->name().toUpper() +
"_H_";
7#include <kDB/Forward.h>
8#include <knowCore/Global.h>
9#include <knowCore/ValueList.h>
12#include "TypesDefinitions.h"
17 for(
const definitions::Forward* fw : _database->forwards())
20 for(
const QString& ns : fw->namespaces())
24 class /%= fw->name() %/;
26 for(
const QString& ns : fw->namespaces())
32 if(not _database->namespaces().isEmpty())
35namespace /%= _database->namespaces().join(
"::") %/
39 for(
const definitions::Class* klass : _database->classes())
44 class /%= klass->name() %/Value;
45 class /%= klass->name() %/Record;
46 class /%= klass->name() %/SelectQuery;
50 for(
const definitions::Class* sklass : _klass->classOfSubDefinitions())
53 class /%= sklass->name() %/Value;
54 class /%= sklass->name() %/Record;
55 class /%= sklass->name() %/SelectQuery;
59 class /%= _klass->name() %/Value;
60 class /%= _klass->name() %/Record;
63 class /%= _klass->name() %/SelectQuery
65 friend class /%= _klass->name() %/Record;
69 /%= _klass->name() %/SelectQuery(/%= databaseOrContainer(_klass) %/);
70 /%= _klass->name() %/SelectQuery(/%= databaseOrContainer(_klass) %/,
const QString& _fieldName,
const knowCore::Value& _value, Sql::Operand _op);
71 /%= _klass->name() %/SelectQuery(/%= databaseOrContainer(_klass) %/,
const QString& _expression,
const QVariantList& _values);
72 /%= _klass->name() %/SelectQuery(Private* _d);
74 /%= _klass->name() %/SelectQuery();
75 /%= _klass->name() %/SelectQuery(
const /%= _klass->name() %/SelectQuery& _rhs);
76 /%= _klass->name() %/SelectQuery& operator=(
const /%= _klass->name() %/SelectQuery& _rhs);
77 ~/%= _klass->name() %/SelectQuery();
79 std::size_t count(
int _count = 0)
const;
80 QList</%= _klass->name() %/Record> exec(
int _count = 0)
const;
81 QList</%= _klass->name() %/Record> exec(
int _skip,
int _count)
const;
82 /%= _klass->name() %/Record first()
const;
84 /%= _klass->name() %/SelectQuery operator||(
const /%= _klass->name() %/SelectQuery& _rhs)
const;
85 /%= _klass->name() %/SelectQuery operator&&(
const /%= _klass->name() %/SelectQuery& _rhs)
const;
88 for(
const definitions::Field* field : _klass->fields())
90 /%= _klass->name() %/SelectQuery orderBy/%= capitalizeFirstLetter(field->name()) %/(Sql::Sort _order)
const;/%
93 /%= _klass->name() %/SelectQuery randomOrder()
const;
96 enum class /%= _klass->name() %/Fields {/%
98 for(
const definitions::Field* field : _klass->fields())
100 /%= field->name() %/,/%
105 class /%= baseValueClassName(_klass) %/
107 friend class /%= _klass->name() %/Record;
109 for(
const definitions::Class* sklass : _klass->classOfSubDefinitions())
112 friend class /%= sklass->name() %/;
113 friend class /%= sklass->name() %/SelectQuery;
122 const Private* DD()
const {
return d; }
124 /%= baseValueClassName(_klass) %/(Private* _d);
126 if(hasDefaultBaseValueConstructor(_klass))
128 /%= baseValueClassName(_klass) %/();/%
130 /%= baseValueClassName(_klass) %/(/%= baseValueConstructionArguments(_klass,
true,
true) %/);
131 /%= baseValueClassName(_klass) %/(
const /%= baseValueClassName(_klass) %/& _rhs);
132 /%= baseValueClassName(_klass) %/& operator=(
const /%= baseValueClassName(_klass) %/& _rhs);
133 ~/%= baseValueClassName(_klass) %/();
135 knowCore::ReturnValue<knowCore::ValueHash> toValueHash()
const;
136 static knowCore::ReturnValue</%= baseValueClassName(_klass) %/> fromValueHash(
const knowCore::ValueHash& _valueHash);
138 bool operator==(
const /%= baseValueClassName(_klass) %/& _rhs)
const;
139 bool operator!=(
const /%= baseValueClassName(_klass) %/& _rhs)
const;
143 for(
const definitions::Field* field : _klass->fields())
145 if(isBaseValueField(_klass, field))
148 /%= cppReturnType(field) %/ /%= field->name() %/()
const;/%
149 if(not field->options().testFlag(definitions::Field::Constant) and not field->options().testFlag(definitions::Field::Key))
151 void set/%= capitalizeFirstLetter(field->name()) %/(/%= cppArgType(field) %/ _value);/%
158 if(_klass->doesImplement(definitions::INIT))
163 if(_klass->doesImplement(definitions::CLEANUP))
168 if(_klass->doesImplement(definitions::EXTENDED))
171#include "/%= baseValueClassName(_klass) %/_.h"/%
177 if(hasExtendedValueClass(_klass))
181 class /%= _klass->name() %/Value :
public /%= _klass->name() %/BaseValue
183 friend class /%= _klass->name() %/Record;
185 for(
const definitions::Class* sklass : _klass->classOfSubDefinitions())
188 friend class /%= sklass->name() %/;
189 friend class /%= sklass->name() %/SelectQuery;
195 const Private* DD()
const {
return D(); }
197 /%= _klass->name() %/Value(Private* _d);
201 /%= _klass->name() %/Value();
203 /%= _klass->name() %/Value(
const kDB::Repository::QueryConnectionInfo& _connection,
const /%= _klass->name() %/BaseValue& _base_value, /%= onlyExtendedValueConstructionArguments(_klass,
true,
false) %/);
204 /%= _klass->name() %/Value(
const /%= _klass->name() %/Value& _rhs);
205 /%= _klass->name() %/Value& operator=(
const /%= _klass->name() %/Value& _rhs);
206 ~/%= _klass->name() %/Value();
208 bool operator==(
const /%= _klass->name() %/Value& _rhs)
const;
209 bool operator!=(
const /%= _klass->name() %/Value& _rhs)
const;
213 for(
const definitions::Field* field : _klass->fields())
215 if(isExtendedValueField(_klass, field))
218 /%= cppReturnType(field) %/ /%= field->name() %/()
const;/%
219 if(not field->options().testFlag(definitions::Field::Constant) and not field->options().testFlag(definitions::Field::Key))
221 void set/%= capitalizeFirstLetter(field->name()) %/(/%= cppArgType(field) %/ _value);/%
228 if(_klass->doesImplement(definitions::INIT))
233 if(_klass->doesImplement(definitions::CLEANUP))
238 if(_klass->doesImplement(definitions::EXTENDED))
241#include "/%= _klass->name() %/Value_.h
"/%
245 kDB::Repository::QueryConnectionInfo connection() const;
247 //END extended value class
252 class /%= _klass->name() %/Record : public /%= _klass->name() %/Value
255 for(const definitions::Class* sklass : _klass->classOfSubDefinitions())
258 friend class /%= sklass->name() %/;
259 friend class /%= sklass->name() %/SelectQuery;
264 using SelectQuery = /%= _klass->name() %/SelectQuery;
267 if(not _klass->classOfContainerDefinition())
274 static knowCore::ReturnVoid createTable(const kDB::Repository::QueryConnectionInfo& _connection);
278 static knowCore::ReturnValue</%= _klass->name() %/Record> create(/%= databaseOrContainer(_klass) %/, /%= createArguments(_klass, true) %/);
279 static knowCore::ReturnValue<QList</%= _klass->name() %/Record>> create(/%= databaseOrContainer(_klass) %/, const QList</%= _klass->name() %/Value>& _values);
282 AccessShare, RowShare, RowExclusive, ShareUpdateExclusive, Share, ShareRowExclusive, Exclusive, AccessExclusive
284 static knowCore::ReturnVoid 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) %/ /%= keysArguments(_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 knowCore::ReturnVoid discard();
300 knowCore::ReturnVoid refresh();
304 knowCore::ReturnVoid record();
308 knowCore::ReturnVoid record(const kDB::Repository::QueryConnectionInfo& _connection);
312 knowCore::ReturnVoid erase();
316 knowCore::ReturnVoid 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 knowCore::ReturnVoid add/%= klass->name() %/(const /%= klass->name() %/& _other);
378 knowCore::ReturnVoid 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>
435KNOWCORE_CORE_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