|
| virtual const iprm::IOptionsList * | GetObjectTypeInfos () const =0 |
| | Gets information about object types supported by this delegate.
|
| |
| virtual QByteArray | GetObjectTypeId (const QByteArray &objectId) const =0 |
| | Gets the type ID for a specific object.
|
| |
| virtual QByteArray | GetCountQuery (const iprm::IParamsSet *paramsPtr=nullptr) const =0 |
| | Generates SQL query to count objects in collection.
|
| |
| virtual QByteArray | GetSelectionQuery (const QByteArray &objectId=QByteArray(), int offset=0, int count=-1, const iprm::IParamsSet *paramsPtr=nullptr) const =0 |
| | Generates SQL SELECT query for retrieving objects.
|
| |
| virtual NewObjectQuery | CreateNewObjectQuery (const QByteArray &typeId, const QByteArray &proposedObjectId, const QString &objectName, const QString &objectDescription, const istd::IChangeable *valuePtr, const imtbase::IOperationContext *operationContextPtr) const =0 |
| | Creates SQL query for inserting a new object.
|
| |
| virtual QByteArray | CreateDeleteObjectsQuery (const imtbase::IObjectCollection &collection, const imtbase::ICollectionInfo::Ids &objectIds, const imtbase::IOperationContext *operationContextPtr) const =0 |
| | Creates SQL query for deleting objects.
|
| |
| virtual QByteArray | CreateDeleteObjectSetQuery (const imtbase::IObjectCollection &collection, const iprm::IParamsSet *paramsPtr=nullptr, const imtbase::IOperationContext *operationContextPtr=nullptr) const =0 |
| | Creates SQL query for deleting objects matching filter criteria.
|
| |
| virtual QByteArray | CreateRestoreObjectsQuery (const imtbase::IObjectCollection &collection, const imtbase::ICollectionInfo::Ids &objectIds, const imtbase::IOperationContext *operationContextPtr=nullptr) const =0 |
| | Creates SQL query for restoring soft-deleted objects.
|
| |
| virtual QByteArray | CreateRestoreObjectSetQuery (const imtbase::IObjectCollection &collection, const iprm::IParamsSet *paramsPtr=nullptr, const imtbase::IOperationContext *operationContextPtr=nullptr) const =0 |
| | Creates SQL query for restoring objects matching filter criteria.
|
| |
| virtual QByteArray | CreateUpdateObjectQuery (const imtbase::IObjectCollection &collection, const QByteArray &objectId, const istd::IChangeable &object, const imtbase::IOperationContext *operationContextPtr, bool useExternDelegate=true) const =0 |
| | Creates SQL query for updating an existing object.
|
| |
| virtual QByteArray | CreateRenameObjectQuery (const imtbase::IObjectCollection &collection, const QByteArray &objectId, const QString &newObjectName, const imtbase::IOperationContext *operationContextPtr) const =0 |
| | Creates SQL query for renaming an object.
|
| |
| virtual QByteArray | CreateDescriptionObjectQuery (const imtbase::IObjectCollection &collection, const QByteArray &objectId, const QString &description, const imtbase::IOperationContext *operationContextPtr) const =0 |
| | Creates SQL query for updating object description.
|
| |
| virtual QByteArray | CreateResetQuery (const imtbase::IObjectCollection &collection) const =0 |
| | Creates SQL query for clearing all objects from collection.
|
| |
| virtual QByteArray | CreateDataMetaInfoQuery (const imtbase::IObjectCollection &collection, const QByteArray &objectId, const idoc::IDocumentMetaInfo *dataMetaInfoPtr) const =0 |
| | Creates SQL query for updating object data metadata.
|
| |
| virtual QByteArray | CreateCollectionItemMetaInfoQuery (const imtbase::IObjectCollection &collection, const QByteArray &objectId, const idoc::IDocumentMetaInfo *collectionItemMetaInfoPtr) const =0 |
| | Creates SQL query for updating collection-related metadata.
|
| |
| virtual QByteArray | GetSelectionByMetaInfoQuery (const QByteArray &metaInfoId, const QVariant &metaInfoValue) const =0 |
| | Creates SQL query for finding objects by metadata field value.
|
| |
Core ORM interface for object-to-database mapping and SQL query generation.
IDatabaseObjectDelegate is the heart of the imtdb ORM system. It acts as a bridge between C++ object representations and database tables, generating SQL queries for all CRUD operations.
Purpose
The delegate pattern separates:
This separation enables:
- Multiple delegate implementations for different object types
- Database-specific query generation (PostgreSQL vs SQLite)
- Specialized delegates (documents, messages, hierarchies)
- Easy testing through mock delegates
Query Types
The delegate generates queries for:
- Selection: Retrieve objects with filtering, sorting, pagination
- Insertion: Create new objects with metadata
- Update: Modify existing objects
- Deletion: Soft or hard delete objects
- Restoration: Undelete soft-deleted objects
- Metadata: Update object metadata without full object modification
- Count: Efficient counting with filters
Common Implementations
- CSqlDatabaseObjectDelegateCompBase: Base implementation for standard objects
- CSqlDatabaseDocumentDelegateComp: Document objects with JSON metadata and revisions
- CSqlJsonDatabaseDelegateComp: JSON-serialized objects
- CSqlStructureDelegateComp: Hierarchical tree structures
- TMessageDatabaseDelegateComp: Template-based message persistence
Usage Example
auto delegate = acf::CreateComponent<CSqlDatabaseDocumentDelegateComp>();
delegate->SetTableName("users");
delegate->SetDatabaseEngine(engine);
auto collection = acf::CreateComponent<CSqlDatabaseObjectCollectionComp>();
collection->SetDelegate(delegate);
collection->InsertNewObject(user, userId);
collection->GetObject(userId);
collection->UpdateObject(userId, user);
collection->RemoveElements({userId});
- Note
- Delegates are typically created once and reused for a collection's lifetime
- See also
- CSqlDatabaseObjectDelegateCompBase for base implementation
-
CSqlDatabaseObjectCollectionComp for usage context
Definition at line 77 of file IDatabaseObjectDelegate.h.
| virtual NewObjectQuery imtdb::IDatabaseObjectDelegate::CreateNewObjectQuery |
( |
const QByteArray & |
typeId, |
|
|
const QByteArray & |
proposedObjectId, |
|
|
const QString & |
objectName, |
|
|
const QString & |
objectDescription, |
|
|
const istd::IChangeable * |
valuePtr, |
|
|
const imtbase::IOperationContext * |
operationContextPtr |
|
) |
| const |
|
pure virtual |
Creates SQL query for inserting a new object.
Generates INSERT query with all necessary fields: ID, TypeId, Name, Description, serialized data, metadata, timestamps, and operation context.
- Parameters
-
| typeId | Object type identifier (for polymorphic collections) |
| proposedObjectId | Suggested ID (may be auto-generated if empty) |
| objectName | Display name for the object |
| objectDescription | Optional description text |
| valuePtr | Object data to serialize into database |
| operationContextPtr | Context information (user, timestamp, operation description) |
- Returns
- NewObjectQuery struct containing SQL, object name, and parameter bindings
auto user = std::make_shared<User>();
auto context = acf::CreateComponent<COperationContextComp>();
context->SetUserId("admin");
auto newQuery = delegate->CreateNewObjectQuery(
"user",
QByteArray(),
"John Doe",
"System administrator",
user.get(),
context.get()
);
engine->ExecSqlQuery(newQuery.query, newQuery.bindValues);
- See also
- CreateUpdateObjectQuery()