UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TypedElementQueryBuilder.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
9
10class UScriptStruct;
11class USubsystem;
12
107{
110 TYPEDELEMENTFRAMEWORK_API const UScriptStruct* operator""_Type(const char* Name, std::size_t NameSize);
111 TYPEDELEMENTFRAMEWORK_API const UScriptStruct* operator""_TypeOptional(const char* Name, std::size_t NameSize);
112
113 enum class EOptional
114 {
115 No,
116 Yes
117 };
118
145
146 class FSimpleQuery final
147 {
148 public:
149 friend class Count;
150 friend class Select;
151
154
155 template<TColumnType... TargetTypes>
156 FSimpleQuery& All();
159
160 template<TColumnType... TargetTypes>
161 FSimpleQuery& Any();
164
165 // Dynamic Column Support
167 template<TDynamicColumnTemplate T>
168 FSimpleQuery& Any(const FName&);
169
170 // ValueTags not yet supported for Any
171 template<TValueTagType>
172 FSimpleQuery& Any(const FName&) = delete;
173 template<TValueTagType>
174 FSimpleQuery& Any(const FName&, const FName&) = delete;
175
176 template<TColumnType... TargetTypes>
178
181
182 // ValueTags not yet supported for None
183 template<TValueTagType>
184 FSimpleQuery& None(const FName& Tag) = delete;
185 template<TValueTagType>
186 FSimpleQuery& None(const FName& Tag, const FName& Value) = delete;
187
188 // Dynamic Column Support
190 template<TDynamicColumnTemplate T>
192
193 // Value Tags
194 // ============
195 // Adds a filter to the query which must match a given ValueTag. The value of the ValueTag will not be checked.
197 // Adds a filter to the query which must match a given ValueTag. The value of the ValueTag must also match.
198 // Note: The query can only match a single value. Multiple value queries are not supported at this time.
200
203
204 // Dynamic Column support
206 template<TDynamicColumnTemplate T>
207 FSimpleQuery& All(const FName&);
208
209 // Adds a filter to the query which must match a given ValueTag. The value of the DynamicTag will not be checked.
210 template<TValueTagType>
212 // Adds a filter to the query which must match a given ValueTag. The value of the DynamicTag must also match.
213 // Note: The query can only match a single value. Multiple value queries are not supported at this time.
214 template<TValueTagType>
215 FSimpleQuery& All(const FName& Tag, const FName& Value);
216
217 template<TEnumType EnumT>
219
220 template<TEnumType EnumT>
221 FSimpleQuery& All(EnumT EnumValue);
222
223 template<auto Value, TEnumType EnumT = decltype(Value)>
225
226 private:
228
230 };
231
233
253
281
301
302 // Because this is a thin wrapper called from within a query callback, it's better to inline fully so all
303 // function pre/postambles can be optimized away.
305 {
309 inline ~FQueryContextForwarder() = default;
310
311 inline const void* GetColumn(const UScriptStruct* ColumnType) const override;
312 inline void* GetMutableColumn(const UScriptStruct* ColumnType) override;
315 inline void GetColumnsUnguarded(int32 TypeCount, char** RetrievedAddresses, const TWeakObjectPtr<const UScriptStruct>* ColumnTypes,
316 const EQueryAccessType* AccessTypes) override;
317
318 inline bool HasColumn(const UScriptStruct* ColumnType) const override;
319
320 inline UObject* GetMutableDependency(const UClass* DependencyClass) override;
321 inline const UObject* GetDependency(const UClass* DependencyClass) override;
324
325 inline uint32 GetRowCount() const override;
326 inline TConstArrayView<RowHandle> GetRowHandles() const override;
327 inline void RemoveRow(RowHandle Row) override;
328 inline void RemoveRows(TConstArrayView<RowHandle> Rows) override;
329
330 inline void AddColumns(RowHandle Row, TConstArrayView<const UScriptStruct*> ColumnTypes) override;
332 inline void RemoveColumns(RowHandle Row, TConstArrayView<const UScriptStruct*> ColumnTypes) override;
334
335 inline void PushCommand(void(* CommandFunction)(void*), void* CommandData) override;
336
337 inline FQueryResult RunQuery(QueryHandle Query) override;
341 SubqueryCallbackRef Callback) override;
342
345 };
346
347 template<typename... Dependencies>
349 {
350 explicit FCachedQueryContext(
353
354 static void Register(FQueryDescription& Query);
355
356 template<typename Dependency>
358 template<typename Dependency>
359 const Dependency& GetCachedDependency() const;
360 };
361
375
376 // Explicitly not following the naming convention in order to present this as a query that can be read as such.
377 class Select final
378 {
379 public:
381
383 template<typename CallbackType, typename Function>
384 Select(FName Name, const CallbackType& Type, Function&& Callback);
386 template<typename CallbackType, typename Class, typename Function>
387 Select(FName Name, const CallbackType& Type, Class* Instance, Function&& Callback);
388
390 template<TDataColumnType... TargetTypes>
391 Select& ReadOnly();
401 template<TDataColumnType... TargetTypes>
413 template<TDynamicColumnTemplate Target>
415 template<TDynamicColumnTemplate Target>
418 template<TDataColumnType... TargetTypes>
419 Select& ReadWrite();
425 template<TDynamicColumnTemplate Target>
427 template<TDynamicColumnTemplate Target>
429
430 // Query Condition API
432
437
438 private:
439 FQueryDescription Query;
440 };
441
442 // Explicitly not following the naming convention in order to keep readability consistent. It now reads like a query sentence.
443 class Count final
444 {
445 public:
447
450
451 private:
452 FQueryDescription Query;
453 };
454
455 template<typename Function>
457 template<typename Function>
459
460 // Merge the two input queries by copying the source query into the destination query. If the merge is not possible the original data will be
461 // preserved and an optional error message can be requested
463
464} // namespace UE::Editor::DataStorage::Queries
465
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Columns EContextCapabilityFlags::SupportsBatch TConstArrayView< RowHandle >
Definition TypedElementQueryCapabilities.inl:40
TConstArrayView< const UScriptStruct * > TConstArrayView< const UScriptStruct * >
Definition TypedElementQueryCapabilities.inl:16
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition Text.h:385
Definition ArrayView.h:139
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition Class.h:3793
Definition CommonTypes.h:57
Definition TypedElementQueryBuilder.h:444
TYPEDELEMENTFRAMEWORK_API FDependency DependsOn()
Definition TypedElementQueryBuilder.cpp:556
TYPEDELEMENTFRAMEWORK_API FSimpleQuery Where()
Definition TypedElementQueryBuilder.cpp:551
TYPEDELEMENTFRAMEWORK_API Count()
Definition TypedElementQueryBuilder.cpp:546
Definition TypedElementQueryBuilder.h:120
TYPEDELEMENTFRAMEWORK_API FQueryDescription && Compile()
Definition TypedElementQueryBuilder.cpp:110
TYPEDELEMENTFRAMEWORK_API FDependency & SubQuery(QueryHandle Handle)
Definition TypedElementQueryBuilder.cpp:94
FDependency & ReadOnly()
Definition TypedElementQueryBuilder.inl:76
FDependency & ReadWrite()
Definition TypedElementQueryBuilder.inl:83
Definition TypedElementQueryBuilder.h:363
TYPEDELEMENTFRAMEWORK_API FQueryDescription && Compile()
Definition TypedElementQueryBuilder.cpp:406
TYPEDELEMENTFRAMEWORK_API FDependency DependsOn()
Definition TypedElementQueryBuilder.cpp:401
Definition TypedElementQueryBuilder.h:147
FSimpleQuery & Any(const FName &, const FName &)=delete
FSimpleQuery & All(const FName &Tag)
FSimpleQuery & All()
Definition TypedElementQueryBuilder.inl:1175
TYPEDELEMENTFRAMEWORK_API FQueryDescription && Compile()
Definition TypedElementQueryBuilder.cpp:252
FSimpleQuery & None()
Definition TypedElementQueryBuilder.inl:1199
FSimpleQuery & None(const FName &Tag, const FName &Value)=delete
FSimpleQuery & Any()
Definition TypedElementQueryBuilder.inl:1182
FSimpleQuery & Any(const FName &)=delete
TYPEDELEMENTFRAMEWORK_API FDependency DependsOn()
Definition TypedElementQueryBuilder.cpp:247
Definition TypedElementQueryBuilder.h:378
TYPEDELEMENTFRAMEWORK_API FSimpleQuery Where()
Definition TypedElementQueryBuilder.cpp:514
Select & ReadWrite()
Definition TypedElementQueryBuilder.inl:1153
TYPEDELEMENTFRAMEWORK_API Select()
Definition TypedElementQueryBuilder.cpp:417
TYPEDELEMENTFRAMEWORK_API FQueryDescription && Compile()
Definition TypedElementQueryBuilder.cpp:536
Select & ReadOnly()
Definition TypedElementQueryBuilder.inl:1128
TYPEDELEMENTFRAMEWORK_API Select & AccessesHierarchy(const FName &HierarchyName)
Definition TypedElementQueryBuilder.cpp:524
TYPEDELEMENTFRAMEWORK_API FDependency DependsOn()
Definition TypedElementQueryBuilder.cpp:519
Definition Class.h:2791
Definition Object.h:95
Definition Class.h:1720
Definition Subsystem.h:48
Definition CommonTypes.h:101
Definition CommonTypes.h:95
Definition Conditions.cpp:11
const UScriptStruct * TypeOptional(FTopLevelAssetPath Name)
Definition TypedElementQueryBuilder.cpp:22
EOptional
Definition TypedElementQueryBuilder.h:114
bool MergeQueries(FQueryDescription &Destination, const FQueryDescription &Source, FText *OutErrorMessage)
Definition TypedElementQueryBuilder.cpp:993
const UScriptStruct * Type(FTopLevelAssetPath Name)
Definition TypedElementQueryBuilder.cpp:15
SubqueryCallback CreateSubqueryCallbackBinding(Function &&Callback)
Definition TypedElementQueryBuilder.inl:1274
DirectQueryCallback CreateDirectQueryCallbackBinding(Function &&Callback)
Definition TypedElementQueryBuilder.inl:1259
EQueryTickPhase
Definition Types.h:14
uint64 QueryHandle
Definition Handles.h:18
uint64 RowHandle
Definition Handles.h:15
EExecutionMode
Definition Types.h:83
EQueryAccessType
Definition Types.h:91
Definition TopLevelAssetPath.h:38
Definition WeakObjectPtrTemplates.h:25
Column * GetMutableColumn()
Definition TypedElementQueryStorageInterfaces.h:468
const Column * GetColumn() const
Definition TypedElementQueryStorageInterfaces.h:455
bool HasColumn() const
Definition TypedElementQueryStorageInterfaces.h:481
Definition TypedElementQueryStorageInterfaces.h:390
Definition TypedElementQueryBuilder.h:349
Dependency & GetCachedMutableDependency()
Definition TypedElementQueryBuilder.inl:259
const Dependency & GetCachedDependency() const
Definition TypedElementQueryBuilder.inl:269
Definition TypedElementQueryBuilder.h:255
FObserver & SetMonitoredColumn()
Definition TypedElementQueryBuilder.inl:107
EExecutionMode ExecutionMode
Definition TypedElementQueryBuilder.h:279
TYPEDELEMENTFRAMEWORK_API FObserver & SetEvent(EEvent MonitorForEvent)
Definition TypedElementQueryBuilder.cpp:338
static FObserver OnRemove()
Definition TypedElementQueryBuilder.inl:101
EEvent Event
Definition TypedElementQueryBuilder.h:277
FName ActivationName
Definition TypedElementQueryBuilder.h:278
TYPEDELEMENTFRAMEWORK_API FObserver & SetExecutionMode(EExecutionMode Mode)
Definition TypedElementQueryBuilder.cpp:350
EEvent
Definition TypedElementQueryBuilder.h:257
static FObserver OnAdd()
Definition TypedElementQueryBuilder.inl:95
const UScriptStruct * Monitor
Definition TypedElementQueryBuilder.h:276
TYPEDELEMENTFRAMEWORK_API FObserver & MakeActivatable(FName Name)
Definition TypedElementQueryBuilder.cpp:356
Definition TypedElementQueryBuilder.h:283
EExecutionMode ExecutionMode
Definition TypedElementQueryBuilder.h:299
ELocation
Definition TypedElementQueryBuilder.h:285
EQueryTickPhase Phase
Definition TypedElementQueryBuilder.h:296
TYPEDELEMENTFRAMEWORK_API FPhaseAmble & MakeActivatable(FName Name)
Definition TypedElementQueryBuilder.cpp:390
TYPEDELEMENTFRAMEWORK_API FPhaseAmble & SetLocation(ELocation NewLocation)
Definition TypedElementQueryBuilder.cpp:372
FName ActivationName
Definition TypedElementQueryBuilder.h:298
TYPEDELEMENTFRAMEWORK_API FPhaseAmble & SetPhase(EQueryTickPhase NewPhase)
Definition TypedElementQueryBuilder.cpp:378
ELocation Location
Definition TypedElementQueryBuilder.h:297
TYPEDELEMENTFRAMEWORK_API FPhaseAmble & SetExecutionMode(EExecutionMode Mode)
Definition TypedElementQueryBuilder.cpp:384
Definition TypedElementQueryBuilder.h:235
FName ActivationName
Definition TypedElementQueryBuilder.h:249
FName Group
Definition TypedElementQueryBuilder.h:246
EQueryTickPhase Phase
Definition TypedElementQueryBuilder.h:245
bool bBatchModifications
Definition TypedElementQueryBuilder.h:251
TYPEDELEMENTFRAMEWORK_API FProcessor & MakeActivatable(FName Name)
Definition TypedElementQueryBuilder.cpp:317
FName BeforeGroup
Definition TypedElementQueryBuilder.h:247
TYPEDELEMENTFRAMEWORK_API FProcessor & SetAfterGroup(FName GroupName)
Definition TypedElementQueryBuilder.cpp:305
TYPEDELEMENTFRAMEWORK_API FProcessor & SetPhase(EQueryTickPhase NewPhase)
Definition TypedElementQueryBuilder.cpp:287
TYPEDELEMENTFRAMEWORK_API FProcessor & SetGroup(FName GroupName)
Definition TypedElementQueryBuilder.cpp:293
TYPEDELEMENTFRAMEWORK_API FProcessor & BatchModifications(bool bBatch)
Definition TypedElementQueryBuilder.cpp:323
EExecutionMode ExecutionMode
Definition TypedElementQueryBuilder.h:250
TYPEDELEMENTFRAMEWORK_API FProcessor & SetBeforeGroup(FName GroupName)
Definition TypedElementQueryBuilder.cpp:299
TYPEDELEMENTFRAMEWORK_API FProcessor & SetExecutionMode(EExecutionMode Mode)
Definition TypedElementQueryBuilder.cpp:311
FName AfterGroup
Definition TypedElementQueryBuilder.h:248
Definition TypedElementQueryBuilder.h:232
Definition TypedElementQueryBuilder.h:305
const FQueryDescription & Description
Definition TypedElementQueryBuilder.h:344
IQueryContext & ParentContext
Definition TypedElementQueryBuilder.h:343
void GetDependencies(TArrayView< UObject * > RetrievedAddresses, TConstArrayView< TWeakObjectPtr< const UClass > > SubsystemTypes, TConstArrayView< EQueryAccessType > AccessTypes) override
Definition TypedElementQueryBuilder.inl:161
void GetColumnsUnguarded(int32 TypeCount, char **RetrievedAddresses, const TWeakObjectPtr< const UScriptStruct > *ColumnTypes, const EQueryAccessType *AccessTypes) override
Definition TypedElementQueryBuilder.inl:140
void GetColumns(TArrayView< char * > RetrievedAddresses, TConstArrayView< TWeakObjectPtr< const UScriptStruct > > ColumnTypes, TConstArrayView< EQueryAccessType > AccessTypes) override
Definition TypedElementQueryBuilder.inl:134
void RemoveRow(RowHandle Row) override
Definition TypedElementQueryBuilder.inl:177
const UObject * GetDependency(const UClass *DependencyClass) override
Definition TypedElementQueryBuilder.inl:156
FQueryResult RunQuery(QueryHandle Query) override
Definition TypedElementQueryBuilder.inl:207
UObject * GetMutableDependency(const UClass *DependencyClass) override
Definition TypedElementQueryBuilder.inl:151
TConstArrayView< RowHandle > GetRowHandles() const override
Definition TypedElementQueryBuilder.inl:172
FQueryResult RunSubquery(int32 SubqueryIndex) override
Definition TypedElementQueryBuilder.inl:212
void RemoveRows(TConstArrayView< RowHandle > Rows) override
Definition TypedElementQueryBuilder.inl:182
void AddColumns(RowHandle Row, TConstArrayView< const UScriptStruct * > ColumnTypes) override
Definition TypedElementQueryBuilder.inl:187
uint32 GetRowCount() const override
Definition TypedElementQueryBuilder.inl:167
void PushCommand(void(*CommandFunction)(void *), void *CommandData) override
Definition TypedElementQueryBuilder.inl:229
void RemoveColumns(RowHandle Row, TConstArrayView< const UScriptStruct * > ColumnTypes) override
Definition TypedElementQueryBuilder.inl:197