6#include <ifile/IFilePersistence.h>
9#include <imtbase/IComplexCollectionFilter.h>
10#include <imtbase/IRevisionController.h>
11#include <imtdb/CSqlDatabaseObjectDelegateCompBase.h>
12#include <imtdb/IJsonBasedMetaInfoDelegate.h>
13#include <imtdb/IDependentMetaInfoController.h>
14#include <imtdb/ISqlJsonXPathExtractor.h>
15#include <imtcol/CDocumentCollectionFilter.h>
16#include <imtcol/CDocumentIdFilter.h>
23struct RawSqlExpression
29class CSqlDatabaseDocumentDelegateComp:
30 public imtdb::CSqlDatabaseObjectDelegateCompBase,
35 typedef imtdb::CSqlDatabaseObjectDelegateCompBase BaseClass;
37 static const QByteArray s_idColumn;
38 static const QByteArray s_typeIdColumn;
39 static const QByteArray s_documentIdColumn;
40 static const QByteArray s_nameColumn;
41 static const QByteArray s_descriptionColumn;
42 static const QByteArray s_documentColumn;
43 static const QByteArray s_dataMetaInfoColumn;
44 static const QByteArray s_addedColumn;
45 static const QByteArray s_lastModifiedColumn;
46 static const QByteArray s_stateColumn;
47 static const QByteArray s_revisionInfoColumn;
48 static const QByteArray s_ownerIdKey;
49 static const QByteArray s_ownerNameKey;
50 static const QByteArray s_operationDescriptionKey;
51 static const QByteArray s_revisionNumberKey;
52 static const QByteArray s_checksumKey;
53 static QSet<QString> s_filterableColumns;
55 I_BEGIN_COMPONENT(CSqlDatabaseDocumentDelegateComp)
58 I_ASSIGN(m_useDataMetaInfoAttrPtr,
"UseDataMetaInfo",
"If true - documents will be searched and sorted by the 'DataMetaInfo' column,\n else - otherwise according to the contents of the 'Document' column",
true,
false);
59 I_ASSIGN(m_autoCreateTableAttrPtr,
"AutoCreateTable",
"Auto create collection table if it does not exist",
false,
false);
60 I_ASSIGN(m_createTableScriptPathAttrPtr,
"CreateTableScriptPath",
"QRC path or file name of SQL script used to create collection table",
false,
":/SQL/Postgres/CreateCollectionTable.sql");
61 I_ASSIGN_MULTI_0(m_documentFactoriesCompPtr,
"DocumentFactories",
"Factory list used for creation of the new document instance according to the given type-ID",
true);
62 I_ASSIGN(m_metaInfoCreatorCompPtr,
"MetaInfoCreator",
"Creator of metainformation of object data",
false,
"MetaInfoCreator");
63 I_ASSIGN(m_jsonBasedMetaInfoDelegateCompPtr,
"JsonBasedMetaInfoDelegate",
"Delegate for converting document metainfo to JSON representation",
false,
"JsonBasedMetaInfoDelegate");
64 I_ASSIGN(m_sqlJsonXPathExtractorCompPtr,
"SqlJsonXPathExtractor",
"SQL json X-Path extractor",
false,
"SqlJsonXPathExtractor");
68 virtual QByteArray GetCountQuery(
const iprm::IParamsSet* paramsPtr =
nullptr)
const override;
69 virtual QByteArray GetObjectIdFromRecord(
const QSqlRecord& record)
const override;
70 virtual QByteArray GetSelectionQuery(
71 const QByteArray& objectId = QByteArray(),
74 const iprm::IParamsSet* paramsPtr =
nullptr)
const override;
75 virtual istd::IChangeableUniquePtr CreateObjectFromRecord(
76 const QSqlRecord& record,
77 const iprm::IParamsSet* paramsPtr =
nullptr)
const override;
78 virtual NewObjectQuery CreateNewObjectQuery(
79 const QByteArray& typeId,
80 const QByteArray& proposedObjectId,
81 const QString& objectName,
82 const QString& objectDescription,
83 const istd::IChangeable* valuePtr,
85 virtual QByteArray CreateDeleteObjectsQuery(
87 const imtbase::ICollectionInfo::Ids& objectIds,
89 virtual QByteArray CreateDeleteObjectSetQuery(
91 const iprm::IParamsSet* paramsPtr =
nullptr,
93 virtual QByteArray CreateRestoreObjectsQuery(
95 const imtbase::ICollectionInfo::Ids& objectIds,
97 virtual QByteArray CreateRestoreObjectSetQuery(
99 const iprm::IParamsSet* paramsPtr =
nullptr,
101 virtual QByteArray CreateUpdateObjectQuery(
103 const QByteArray& objectId,
104 const istd::IChangeable&
object,
106 bool useExternDelegate =
true)
const override;
107 virtual QByteArray CreateRenameObjectQuery(
109 const QByteArray& objectId,
110 const QString& newObjectName,
112 virtual QByteArray CreateDescriptionObjectQuery(
114 const QByteArray& objectId,
115 const QString& description,
117 virtual QByteArray GetSelectionByMetaInfoQuery(
const QByteArray& metaInfoId,
const QVariant& metaInfoValue)
const override;
118 virtual QByteArray CreateUpdateMetaInfoQuery(
const QSqlRecord& record)
const override;
121 virtual RevisionInfoList GetRevisionInfoList(
123 const QByteArray& objectId)
const override;
124 virtual int BackupRevision(
126 const imtbase::ICollectionInfo::Id& objectId,
127 const QString& userComment = QString())
const override;
128 virtual bool RestoreRevision(
130 const imtbase::ICollectionInfo::Id& objectId,
131 int revision)
const override;
132 virtual bool ExportRevision(
134 const imtbase::ICollectionInfo::Id& objectId,
136 const QString& filePath)
const override;
137 virtual bool DeleteRevision(
139 const imtbase::ICollectionInfo::Id& objectId,
140 int revision)
const override;
143 virtual bool UpdateDependentMetaInfo(
const DependentMetaInfo& metaInfo)
const override;
144 virtual bool ClearDependentMetaInfo(
const MetaFieldCleanupPlan& metaInfo)
const override;
147 virtual void OnComponentCreated()
override;
150 virtual bool CreateTableIfNeeded();
151 virtual QByteArray PrepareInsertNewObjectQuery(
152 const QByteArray& typeId,
153 const QByteArray& objectId,
154 const QString& objectName,
155 const QString& objectDescription,
156 const istd::IChangeable&
object,
158 const QVariant& revisionArgument)
const;
159 virtual istd::IChangeableUniquePtr CreateObject(
const QByteArray& typeId)
const;
160 virtual bool WriteDataToMemory(
const QByteArray& typeId,
const istd::IChangeable&
object, QByteArray& data)
const;
161 virtual bool ReadDataFromMemory(
const QByteArray& typeId,
const QByteArray& data, istd::IChangeable&
object)
const;
162 virtual QByteArray CreateRevisionInfoQuery(
const imtbase::IOperationContext* operationContextPtr,
const QVariant& revisionArgument, quint32 checksum)
const;
163 virtual QByteArray CreateJsonBuildObjectQuery(
const QVariantMap& paramMap)
const;
164 virtual QString CreateJsonExtractSql(
const QString& jsonName,
const QString& key, QMetaType::Type metaType = QMetaType::QString,
const QString& tableAlias = QString())
const;
167 virtual QString GetBaseSelectionQuery()
const override;
168 virtual idoc::MetaInfoPtr CreateObjectMetaInfo(
const QByteArray& typeId)
const override;
169 virtual bool SetObjectMetaInfoFromRecord(
const QSqlRecord& record, idoc::IDocumentMetaInfo& metaInfo)
const override;
170 virtual bool CreateObjectFilterQuery(
const iprm::IParamsSet& filterParams, QString& filterQuery)
const override;
173 virtual bool CreateFilterQuery(
const iprm::IParamsSet& filterParams, QString& filterQuery)
const override;
174 virtual bool CreateTextFilterQuery(
const imtbase::ICollectionFilter& collectionFilter, QString& textFilterQuery)
const override;
175 virtual bool CreateTimeFilterQuery(
const imtbase::ITimeFilterParam& timeFilter, QString& timeFilterQuery,
const QString& timeFieldId = QStringLiteral(
"root1.\"TimeStamp\""))
const override;
180 virtual void SubstituteFieldIds(QString& query,
bool castToStr =
true)
const;
181 virtual QByteArray GetObjectSelectionQuery(
const QByteArray& objectId,
const iprm::IParamsSet* paramsPtr =
nullptr)
const;
182 virtual QByteArray CreateJoinTablesQuery()
const;
183 virtual QByteArray GetCustomColumnsQuery()
const;
184 virtual bool CreateDocumentCollectionFilterQuery(
const imtcol::IDocumentCollectionFilter& documentCollectionFilter, QString& documentFilterQuery)
const;
185 virtual bool CreateDocumentIdFilterQuery(
const imtcol::IDocumentIdFilter& documentIdFilter, QString& documentIdFilterQuery)
const;
186 bool IsArrayOperation(
const QString& query,
const QString& field)
const;
189 I_ATTR(
bool, m_useDataMetaInfoAttrPtr);
190 I_ATTR(
bool, m_autoCreateTableAttrPtr);
191 I_ATTR(QByteArray, m_createTableScriptPathAttrPtr);
192 I_MULTIFACT(istd::IChangeable, m_documentFactoriesCompPtr);
202Q_DECLARE_METATYPE(imtdb::RawSqlExpression);
Database Abstraction Layer (ORM Framework) for ImtCore applications.