diff --git a/.gitattributes b/.gitattributes index 8059f23d196..05b1a132398 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ **/module_bindings/** linguist-generated=true eol=lf +**/ModuleBindings/** linguist-generated=true eol=lf /docs/llms/** linguist-generated=true /docs/llms/*-details.json linguist-generated=false diff --git a/crates/codegen/src/unrealcpp.rs b/crates/codegen/src/unrealcpp.rs index bab5d0bfed5..bdb761ca590 100644 --- a/crates/codegen/src/unrealcpp.rs +++ b/crates/codegen/src/unrealcpp.rs @@ -1,7 +1,7 @@ //! Autogenerated Unreal‑C++ code‑gen backend for SpacetimeDB CLI use crate::code_indenter::CodeIndenter; use crate::util::{ - fmt_fn, iter_table_names_and_types, iter_tables, print_auto_generated_file_comment, + fmt_fn, iter_table_names_and_types, iter_tables, iter_views, print_auto_generated_file_comment, print_auto_generated_version_comment, CodegenVisibility, }; use crate::util::{iter_indexes, iter_procedures, iter_reducers}; @@ -16,6 +16,7 @@ use spacetimedb_schema::schema::{Schema, TableSchema}; use spacetimedb_schema::type_for_generate::{ AlgebraicTypeDef, AlgebraicTypeUse, PlainEnumTypeDef, ProductTypeDef, SumTypeDef, }; +use std::collections::HashMap; use std::fmt::{self}; use std::ops::Deref; use std::path::Path; @@ -916,6 +917,14 @@ impl Lang for UnrealCpp<'_> { ); } + for (_, _, product_type_ref) in iter_table_names_and_types(module, options.visibility) { + includes.insert(format!( + "ModuleBindings/Types/{}Type.g.h", + type_ref_name(self.module_prefix, module, product_type_ref) + )); + } + includes.insert("QueryBuilder/query_builder.h".to_string()); + // Convert to sorted vector let mut include_vec: Vec = includes.into_iter().collect(); include_vec.sort(); @@ -989,8 +998,24 @@ impl Lang for UnrealCpp<'_> { self.module_name, ); + // QueryBuilder types + generate_query_builder_types( + &mut client_h, + module, + options.visibility, + self.module_prefix, + &self.get_api_macro(), + self.module_name, + ); + // SubscriptionBuilder class - generate_subscription_builder_class(&mut client_h, self.module_prefix, &self.get_api_macro()); + generate_subscription_builder_class( + &mut client_h, + module, + options.visibility, + self.module_prefix, + &self.get_api_macro(), + ); // SubscriptionHandle class generate_subscription_handle_class(&mut client_h, self.module_prefix, &self.get_api_macro()); @@ -2948,7 +2973,668 @@ fn generate_remote_procedures_class( writeln!(output); } -fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, module_prefix: &str, api_macro: &str) { +fn generate_query_builder_types( + output: &mut UnrealCppAutogen, + module: &ModuleDef, + visibility: CodegenVisibility, + module_prefix: &str, + api_macro: &str, + module_name: &str, +) { + #[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] + enum BlueprintPredicateKind { + Bool, + U8, + I32, + I64, + F32, + F64, + String, + Identity, + ConnectionId, + Timestamp, + Uuid, + } + + fn supports_blueprint_query_filter(module: &ModuleDef, ty: &AlgebraicTypeUse) -> bool { + match ty { + AlgebraicTypeUse::Primitive(_) + | AlgebraicTypeUse::String + | AlgebraicTypeUse::Identity + | AlgebraicTypeUse::ConnectionId + | AlgebraicTypeUse::Timestamp + | AlgebraicTypeUse::Uuid => is_blueprintable(module, ty), + _ => false, + } + } + + fn blueprint_predicate_kind(ty: &AlgebraicTypeUse) -> Option { + match ty { + AlgebraicTypeUse::Primitive(PrimitiveType::Bool) => Some(BlueprintPredicateKind::Bool), + AlgebraicTypeUse::Primitive(PrimitiveType::U8) => Some(BlueprintPredicateKind::U8), + AlgebraicTypeUse::Primitive(PrimitiveType::I32) => Some(BlueprintPredicateKind::I32), + AlgebraicTypeUse::Primitive(PrimitiveType::I64) => Some(BlueprintPredicateKind::I64), + AlgebraicTypeUse::Primitive(PrimitiveType::F32) => Some(BlueprintPredicateKind::F32), + AlgebraicTypeUse::Primitive(PrimitiveType::F64) => Some(BlueprintPredicateKind::F64), + AlgebraicTypeUse::String => Some(BlueprintPredicateKind::String), + AlgebraicTypeUse::Identity => Some(BlueprintPredicateKind::Identity), + AlgebraicTypeUse::ConnectionId => Some(BlueprintPredicateKind::ConnectionId), + AlgebraicTypeUse::Timestamp => Some(BlueprintPredicateKind::Timestamp), + AlgebraicTypeUse::Uuid => Some(BlueprintPredicateKind::Uuid), + _ => None, + } + } + + fn blueprint_predicate_kind_name(kind: BlueprintPredicateKind) -> &'static str { + match kind { + BlueprintPredicateKind::Bool => "Bool", + BlueprintPredicateKind::U8 => "UInt8", + BlueprintPredicateKind::I32 => "Int32", + BlueprintPredicateKind::I64 => "Int64", + BlueprintPredicateKind::F32 => "Float", + BlueprintPredicateKind::F64 => "Double", + BlueprintPredicateKind::String => "String", + BlueprintPredicateKind::Identity => "Identity", + BlueprintPredicateKind::ConnectionId => "ConnectionId", + BlueprintPredicateKind::Timestamp => "Timestamp", + BlueprintPredicateKind::Uuid => "Uuid", + } + } + + fn blueprint_predicate_kinds() -> &'static [BlueprintPredicateKind] { + &[ + BlueprintPredicateKind::Bool, + BlueprintPredicateKind::U8, + BlueprintPredicateKind::I32, + BlueprintPredicateKind::I64, + BlueprintPredicateKind::F32, + BlueprintPredicateKind::F64, + BlueprintPredicateKind::String, + BlueprintPredicateKind::Identity, + BlueprintPredicateKind::ConnectionId, + BlueprintPredicateKind::Timestamp, + BlueprintPredicateKind::Uuid, + ] + } + + fn blueprint_predicate_kind_ty(kind: BlueprintPredicateKind) -> AlgebraicTypeUse { + match kind { + BlueprintPredicateKind::Bool => AlgebraicTypeUse::Primitive(PrimitiveType::Bool), + BlueprintPredicateKind::U8 => AlgebraicTypeUse::Primitive(PrimitiveType::U8), + BlueprintPredicateKind::I32 => AlgebraicTypeUse::Primitive(PrimitiveType::I32), + BlueprintPredicateKind::I64 => AlgebraicTypeUse::Primitive(PrimitiveType::I64), + BlueprintPredicateKind::F32 => AlgebraicTypeUse::Primitive(PrimitiveType::F32), + BlueprintPredicateKind::F64 => AlgebraicTypeUse::Primitive(PrimitiveType::F64), + BlueprintPredicateKind::String => AlgebraicTypeUse::String, + BlueprintPredicateKind::Identity => AlgebraicTypeUse::Identity, + BlueprintPredicateKind::ConnectionId => AlgebraicTypeUse::ConnectionId, + BlueprintPredicateKind::Timestamp => AlgebraicTypeUse::Timestamp, + BlueprintPredicateKind::Uuid => AlgebraicTypeUse::Uuid, + } + } + + fn blueprint_predicate_kind_supports_ordering(kind: BlueprintPredicateKind) -> bool { + !matches!( + kind, + BlueprintPredicateKind::Bool + | BlueprintPredicateKind::String + | BlueprintPredicateKind::Identity + | BlueprintPredicateKind::ConnectionId + | BlueprintPredicateKind::Uuid + ) + } + + fn blueprint_predicate_kind_spec( + module_prefix: &str, + module: &ModuleDef, + module_name: &str, + kind: BlueprintPredicateKind, + ) -> (String, bool, bool) { + let ty = blueprint_predicate_kind_ty(kind); + ( + cpp_ty_fmt_blueprint_compatible(module_prefix, module, &ty, module_name).to_string(), + should_pass_by_value_in_delegate(module, &ty), + blueprint_predicate_kind_supports_ordering(kind), + ) + } + + struct QueryBuilderSourceMeta { + row_struct: String, + cols_struct: String, + ix_cols_struct: String, + fields: Vec<(String, String, String, AlgebraicTypeUse)>, + singleton_indexed_fields: Vec, + source_name: String, + source_pascal: String, + can_be_lookup: bool, + } + + writeln!(output, "// QueryBuilder types"); + + let mut source_metas = Vec::::new(); + + let singleton_indexed_fields_for_schema = |schema: &TableSchema, product_type: &ProductTypeDef| { + let mut singleton_indexed_fields = Vec::::new(); + for (columns, constraints) in schema.backcompat_column_constraints() { + if columns.len() != 1 { + continue; + } + if !(constraints.has_indexed() || constraints.has_unique() || constraints.has_primary_key()) { + continue; + } + let col_idx = columns.iter().next().expect("singleton column").idx(); + let (field_name, _) = &product_type.elements[col_idx]; + singleton_indexed_fields.push(field_name.deref().to_case(Case::Pascal)); + } + singleton_indexed_fields + }; + + for table in iter_tables(module, visibility) { + let product_type = module.typespace_for_generate()[table.product_type_ref] + .as_product() + .expect("query builder source should be a product type"); + let row_struct = format!("F{}Type", type_ref_name(module_prefix, module, table.product_type_ref)); + let source_pascal = table.accessor_name.deref().to_case(Case::Pascal); + let schema = TableSchema::from_module_def(module, table, (), 0.into()) + .validated() + .expect("table schema should validate for query builder codegen"); + + let singleton_indexed_fields = singleton_indexed_fields_for_schema(&schema, product_type); + + let fields = product_type + .elements + .iter() + .map(|(field_name, field_ty)| { + ( + field_name.deref().to_string(), + field_name.deref().to_case(Case::Pascal), + cpp_ty_fmt_with_module(module_prefix, module, field_ty, module_name).to_string(), + field_ty.clone(), + ) + }) + .collect::>(); + + source_metas.push(QueryBuilderSourceMeta { + row_struct, + cols_struct: format!("F{module_prefix}{source_pascal}Cols"), + ix_cols_struct: format!("F{module_prefix}{source_pascal}IxCols"), + fields, + singleton_indexed_fields, + source_name: table.name.deref().to_string(), + source_pascal, + can_be_lookup: !table.is_event, + }); + } + + for view in iter_views(module) { + let product_type = module.typespace_for_generate()[view.product_type_ref] + .as_product() + .expect("query builder source should be a product type"); + let row_struct = format!("F{}Type", type_ref_name(module_prefix, module, view.product_type_ref)); + let source_pascal = view.accessor_name.deref().to_case(Case::Pascal); + let schema = TableSchema::from_view_def_for_codegen(module, view) + .validated() + .expect("view schema should validate for query builder codegen"); + + let singleton_indexed_fields = singleton_indexed_fields_for_schema(&schema, product_type); + + let fields = product_type + .elements + .iter() + .map(|(field_name, field_ty)| { + ( + field_name.deref().to_string(), + field_name.deref().to_case(Case::Pascal), + cpp_ty_fmt_with_module(module_prefix, module, field_ty, module_name).to_string(), + field_ty.clone(), + ) + }) + .collect::>(); + + source_metas.push(QueryBuilderSourceMeta { + row_struct, + cols_struct: format!("F{module_prefix}{source_pascal}Cols"), + ix_cols_struct: format!("F{module_prefix}{source_pascal}IxCols"), + fields, + singleton_indexed_fields, + source_name: view.name.deref().to_string(), + source_pascal, + can_be_lookup: true, + }); + } + + let mut row_struct_counts = HashMap::::new(); + for source_meta in &source_metas { + *row_struct_counts.entry(source_meta.row_struct.clone()).or_default() += 1; + } + for source_meta in &mut source_metas { + if row_struct_counts.get(&source_meta.row_struct).copied().unwrap_or_default() == 1 { + let row_type_name = source_meta + .row_struct + .strip_prefix('F') + .and_then(|name| name.strip_suffix("Type")) + .expect("row struct should match F*Type"); + source_meta.cols_struct = format!("F{row_type_name}Cols"); + source_meta.ix_cols_struct = format!("F{row_type_name}IxCols"); + } + } + + source_metas.sort_by(|a, b| a.source_pascal.cmp(&b.source_pascal)); + + let mut declared_helper_structs = HashSet::::new(); + for source_meta in &source_metas { + if declared_helper_structs.insert(source_meta.cols_struct.clone()) { + writeln!(output, "struct {api_macro} {};", source_meta.cols_struct); + } + if declared_helper_structs.insert(source_meta.ix_cols_struct.clone()) { + writeln!(output, "struct {api_macro} {};", source_meta.ix_cols_struct); + } + } + writeln!(output); + + for source_meta in &source_metas { + let row_struct = &source_meta.row_struct; + let cols_struct = &source_meta.cols_struct; + let ix_cols_struct = &source_meta.ix_cols_struct; + let singleton_indexed_fields = &source_meta.singleton_indexed_fields; + + writeln!(output, "struct {api_macro} {cols_struct}"); + writeln!(output, "{{"); + writeln!(output, " explicit {cols_struct}(const char* TableName)"); + write!(output, " : "); + for (idx, (field_name_raw, field_name_pascal, _field_type, _field_ty)) in source_meta.fields.iter().enumerate() { + if idx > 0 { + write!(output, ", "); + } + write!( + output, + "{}(TableName, \"{}\")", + field_name_pascal, + field_name_raw + ); + } + writeln!(output, " {{}}"); + writeln!(output); + for (_field_name_raw, field_name_pascal, field_type, _field_ty) in &source_meta.fields { + writeln!( + output, + " ::SpacetimeDB::query_builder::Col<{row_struct}, {field_type}> {field_name_pascal};" + ); + } + writeln!(output, "}};"); + writeln!(output); + + writeln!(output, "struct {api_macro} {ix_cols_struct}"); + writeln!(output, "{{"); + writeln!(output, " explicit {ix_cols_struct}(const char* TableName)"); + if !singleton_indexed_fields.is_empty() { + write!(output, " : "); + for (idx, (field_name_raw, field_name_pascal, _field_type, _field_ty)) in source_meta + .fields + .iter() + .filter(|(_field_name_raw, field_name_pascal, _, _)| singleton_indexed_fields.contains(field_name_pascal)) + .enumerate() + { + if idx > 0 { + write!(output, ", "); + } + write!( + output, + "{}(TableName, \"{}\")", + field_name_pascal, + field_name_raw + ); + } + } + writeln!(output, " {{}}"); + writeln!(output); + for (_field_name_raw, field_name_pascal, field_type, _field_ty) in source_meta + .fields + .iter() + .filter(|(_field_name_raw, field_name_pascal, _, _)| singleton_indexed_fields.contains(field_name_pascal)) + { + writeln!( + output, + " ::SpacetimeDB::query_builder::IxCol<{row_struct}, {field_type}> {field_name_pascal};" + ); + } + writeln!(output, "}};"); + writeln!(output); + + if source_meta.can_be_lookup { + writeln!(output, "namespace SpacetimeDB::query_builder"); + writeln!(output, "{{"); + writeln!(output, " template<>"); + writeln!( + output, + " struct CanBeLookupTable> : std::true_type {{}};" + ); + writeln!(output, "}}"); + writeln!(output); + } + } + + writeln!(output, "struct {api_macro} F{module_prefix}From"); + writeln!(output, "{{"); + for source_meta in &source_metas { + let row_struct = &source_meta.row_struct; + let source_pascal = &source_meta.source_pascal; + let cols_struct = &source_meta.cols_struct; + let ix_cols_struct = &source_meta.ix_cols_struct; + writeln!( + output, + " [[nodiscard]] ::SpacetimeDB::query_builder::Table<{row_struct}, {cols_struct}, {ix_cols_struct}> {source_pascal}() const {{ return ::SpacetimeDB::query_builder::Table<{row_struct}, {cols_struct}, {ix_cols_struct}>(\"{}\", {cols_struct}(\"{}\"), {ix_cols_struct}(\"{}\")); }}", + source_meta.source_name, + source_meta.source_name, + source_meta.source_name + ); + } + writeln!(output, "}};"); + writeln!(output); + + writeln!(output, "struct {api_macro} F{module_prefix}QueryBuilder"); + writeln!(output, "{{"); + writeln!(output, " F{module_prefix}From From;"); + writeln!(output); + writeln!(output, " static TArray AllTablesSqlQueries()"); + writeln!(output, " {{"); + writeln!(output, " TArray Sql;"); + for source_meta in &source_metas { + let source_pascal = &source_meta.source_pascal; + writeln!( + output, + " Sql.Add(FString(UTF8_TO_TCHAR(F{module_prefix}QueryBuilder().From.{source_pascal}().into_sql().c_str())));" + ); + } + writeln!(output, " return Sql;"); + writeln!(output, " }}"); + writeln!(output, "}};"); + writeln!(output); + + let blueprint_query_struct = format!("F{module_prefix}BlueprintQuery"); + let blueprint_predicate_struct = format!("F{module_prefix}BlueprintPredicate"); + writeln!(output, "USTRUCT(BlueprintType)"); + writeln!(output, "struct {api_macro} {blueprint_query_struct}"); + writeln!(output, "{{"); + writeln!(output, " GENERATED_BODY()"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString Sql;"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString ResultSourceName;"); + writeln!(output, "}};"); + writeln!(output); + + writeln!(output, "USTRUCT(BlueprintType)"); + writeln!(output, "struct {api_macro} {blueprint_predicate_struct}"); + writeln!(output, "{{"); + writeln!(output, " GENERATED_BODY()"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString Sql;"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString ResultSourceName;"); + writeln!(output, "}};"); + writeln!(output); + + for source_meta in &source_metas { + let source_pascal = &source_meta.source_pascal; + let query_struct = format!("F{module_prefix}{source_pascal}Query"); + writeln!(output, "USTRUCT(BlueprintType)"); + writeln!(output, "struct {api_macro} {query_struct}"); + writeln!(output, "{{"); + writeln!(output, " GENERATED_BODY()"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString Sql;"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString ResultSourceName;"); + writeln!(output, "}};"); + writeln!(output); + } + + for kind in blueprint_predicate_kinds() { + let column_struct = + format!("F{module_prefix}Blueprint{}Column", blueprint_predicate_kind_name(*kind)); + writeln!(output, "USTRUCT(BlueprintType)"); + writeln!(output, "struct {api_macro} {column_struct}"); + writeln!(output, "{{"); + writeln!(output, " GENERATED_BODY()"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString ResultSourceName;"); + writeln!(output); + writeln!(output, " UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB|Queries\")"); + writeln!(output, " FString ColumnName;"); + writeln!(output, "}};"); + writeln!(output); + } + + writeln!(output, "UCLASS(BlueprintType)"); + writeln!( + output, + "class {api_macro} U{module_prefix}QueryBuilderBlueprintLibrary : public UBlueprintFunctionLibrary" + ); + writeln!(output, "{{"); + writeln!(output, " GENERATED_BODY()"); + writeln!(output); + writeln!(output, "public:"); + writeln!(output); + + for source_meta in &source_metas { + let source_pascal = &source_meta.source_pascal; + let source_name = &source_meta.source_name; + let query_struct = format!("F{module_prefix}{source_pascal}Query"); + + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|{source_pascal}\", meta=(DisplayName=\"From {source_pascal}\"))" + ); + writeln!(output, " static {query_struct} From{source_pascal}()"); + writeln!(output, " {{"); + writeln!(output, " {query_struct} Query;"); + writeln!( + output, + " Query.Sql = FString(UTF8_TO_TCHAR(F{module_prefix}QueryBuilder().From.{source_pascal}().into_sql().c_str()));" + ); + writeln!(output, " Query.ResultSourceName = TEXT(\"{source_name}\");"); + writeln!(output, " return Query;"); + writeln!(output, " }}"); + writeln!(output); + + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|{source_pascal}\", meta=(DisplayName=\"To Query\", BlueprintAutocast))" + ); + writeln!( + output, + " static {blueprint_query_struct} Conv_{source_pascal}QueryToBlueprintQuery(const {query_struct}& Query)" + ); + writeln!(output, " {{"); + writeln!(output, " {blueprint_query_struct} GenericQuery;"); + writeln!(output, " GenericQuery.Sql = Query.Sql;"); + writeln!(output, " GenericQuery.ResultSourceName = Query.ResultSourceName;"); + writeln!(output, " return GenericQuery;"); + writeln!(output, " }}"); + writeln!(output); + + for (field_name_raw, field_name_pascal, _field_type, field_ty) in &source_meta.fields { + if !supports_blueprint_query_filter(module, field_ty) { + continue; + } + let Some(kind) = blueprint_predicate_kind(field_ty) else { + continue; + }; + let column_struct = + format!("F{module_prefix}Blueprint{}Column", blueprint_predicate_kind_name(kind)); + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|{source_pascal}|Columns\", meta=(DisplayName=\"{source_pascal} {field_name_pascal}\"))" + ); + writeln!(output, " static {column_struct} {source_pascal}{field_name_pascal}(const {query_struct}& Query)"); + writeln!(output, " {{"); + writeln!(output, " {column_struct} Column;"); + writeln!( + output, + " Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT(\"{source_name}\") : Query.ResultSourceName;" + ); + writeln!(output, " Column.ColumnName = TEXT(\"{field_name_raw}\");"); + writeln!(output, " return Column;"); + writeln!(output, " }}"); + writeln!(output); + } + + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|{source_pascal}\", meta=(DisplayName=\"{source_pascal} Where\"))" + ); + writeln!( + output, + " static {query_struct} {source_pascal}Where({query_struct} Query, const {blueprint_predicate_struct}& Predicate)" + ); + writeln!(output, " {{"); + writeln!(output, " if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty())"); + writeln!(output, " {{"); + writeln!(output, " return Query;"); + writeln!(output, " }}"); + writeln!(output, " Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql);"); + writeln!(output, " return Query;"); + writeln!(output, " }}"); + writeln!(output); + } + + for kind in blueprint_predicate_kinds() { + let (blueprint_type, pass_by_value, supports_ordering) = + blueprint_predicate_kind_spec(module_prefix, module, module_name, *kind); + let kind_suffix = blueprint_predicate_kind_name(*kind); + let kind_display = blueprint_predicate_kind_name(*kind); + let column_struct = format!("F{module_prefix}Blueprint{kind_suffix}Column"); + let value_param = if pass_by_value { + format!("const {blueprint_type} Value") + } else { + format!("const {blueprint_type}& Value") + }; + + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|Predicates\", meta=(DisplayName=\"{kind_display} Equal\", CompactNodeTitle=\"==\", Keywords=\"== equal\"))" + ); + writeln!( + output, + " static {blueprint_predicate_struct} {kind_suffix}Equal(const {column_struct}& Column, {value_param})" + ); + writeln!(output, " {{"); + writeln!(output, " {blueprint_predicate_struct} Predicate;"); + writeln!(output, " Predicate.ResultSourceName = Column.ResultSourceName;"); + writeln!( + output, + " Predicate.Sql = FString::Printf(TEXT(\"\\\"%s\\\".\\\"%s\\\" = %s\"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str()));" + ); + writeln!(output, " return Predicate;"); + writeln!(output, " }}"); + writeln!(output); + + if supports_ordering { + for (fn_suffix, display_name, compact_title, sql_op, keywords) in [ + ("GreaterThan", format!("{kind_display} Greater Than"), ">", ">", "> greater"), + ("GreaterEqual", format!("{kind_display} Greater Equal"), ">=", ">=" , ">= greater equal"), + ("LessThan", format!("{kind_display} Less Than"), "<", "<", "< less"), + ("LessEqual", format!("{kind_display} Less Equal"), "<=", "<=", "<= less equal"), + ] { + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|Predicates\", meta=(DisplayName=\"{display_name}\", CompactNodeTitle=\"{compact_title}\", Keywords=\"{keywords}\"))" + ); + writeln!( + output, + " static {blueprint_predicate_struct} {kind_suffix}{fn_suffix}(const {column_struct}& Column, {value_param})" + ); + writeln!(output, " {{"); + writeln!(output, " {blueprint_predicate_struct} Predicate;"); + writeln!(output, " Predicate.ResultSourceName = Column.ResultSourceName;"); + writeln!( + output, + " Predicate.Sql = FString::Printf(TEXT(\"\\\"%s\\\".\\\"%s\\\" {sql_op} %s\"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str()));" + ); + writeln!(output, " return Predicate;"); + writeln!(output, " }}"); + writeln!(output); + } + } + } + + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|Predicates\", meta=(DisplayName=\"AND\", CompactNodeTitle=\"AND\", Keywords=\"and &&\"))" + ); + writeln!( + output, + " static {blueprint_predicate_struct} And(const {blueprint_predicate_struct}& A, const {blueprint_predicate_struct}& B)" + ); + writeln!(output, " {{"); + writeln!(output, " {blueprint_predicate_struct} Predicate;"); + writeln!(output, " Predicate.ResultSourceName = A.ResultSourceName;"); + writeln!(output, " Predicate.Sql = FString::Printf(TEXT(\"(%s) AND (%s)\"), *A.Sql, *B.Sql);"); + writeln!(output, " return Predicate;"); + writeln!(output, " }}"); + writeln!(output); + + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|Predicates\", meta=(DisplayName=\"OR\", CompactNodeTitle=\"OR\", Keywords=\"or ||\"))" + ); + writeln!( + output, + " static {blueprint_predicate_struct} Or(const {blueprint_predicate_struct}& A, const {blueprint_predicate_struct}& B)" + ); + writeln!(output, " {{"); + writeln!(output, " {blueprint_predicate_struct} Predicate;"); + writeln!(output, " Predicate.ResultSourceName = A.ResultSourceName;"); + writeln!(output, " Predicate.Sql = FString::Printf(TEXT(\"(%s) OR (%s)\"), *A.Sql, *B.Sql);"); + writeln!(output, " return Predicate;"); + writeln!(output, " }}"); + writeln!(output); + + writeln!( + output, + " UFUNCTION(BlueprintPure, Category=\"SpacetimeDB|Queries|Predicates\", meta=(DisplayName=\"NOT\", CompactNodeTitle=\"NOT\", Keywords=\"not !\"))" + ); + writeln!( + output, + " static {blueprint_predicate_struct} Not(const {blueprint_predicate_struct}& A)" + ); + writeln!(output, " {{"); + writeln!(output, " {blueprint_predicate_struct} Predicate;"); + writeln!(output, " Predicate.ResultSourceName = A.ResultSourceName;"); + writeln!(output, " Predicate.Sql = FString::Printf(TEXT(\"NOT (%s)\"), *A.Sql);"); + writeln!(output, " return Predicate;"); + writeln!(output, " }}"); + writeln!(output); + + writeln!(output, "private:"); + writeln!(output, " static FString AppendPredicate(const FString& Sql, const FString& Predicate)"); + writeln!(output, " {{"); + writeln!(output, " if (Sql.Contains(TEXT(\" WHERE \")))"); + writeln!(output, " {{"); + writeln!(output, " return Sql + TEXT(\" AND (\") + Predicate + TEXT(\")\");"); + writeln!(output, " }}"); + writeln!(output, " return Sql + TEXT(\" WHERE (\") + Predicate + TEXT(\")\");"); + writeln!(output, " }}"); + writeln!(output, "}};"); + writeln!(output); +} + +fn generate_subscription_builder_class( + output: &mut UnrealCppAutogen, + module: &ModuleDef, + visibility: CodegenVisibility, + module_prefix: &str, + api_macro: &str, +) { + let blueprint_query_struct = format!("F{module_prefix}BlueprintQuery"); writeln!(output, "// SubscriptionBuilder class"); writeln!(output, "UCLASS(BlueprintType)"); writeln!( @@ -2973,14 +3659,58 @@ fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, module_pre ); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")"); + writeln!(output, " U{module_prefix}SubscriptionHandle* Subscribe();"); + writeln!(output); writeln!( output, " U{module_prefix}SubscriptionHandle* Subscribe(const TArray& SQL);" ); writeln!(output); + writeln!(output, " template"); writeln!( output, - " /** Convenience for subscribing to all rows from all tables */" + " U{module_prefix}SubscriptionBuilder* AddQuery(TFn&& Build)" + ); + writeln!(output, " {{"); + writeln!(output, " F{module_prefix}QueryBuilder Q;"); + writeln!(output, " auto Query = std::forward(Build)(Q);"); + writeln!( + output, + " static_assert(::SpacetimeDB::query_builder::QueryBuilderReturn," + ); + writeln!( + output, + " \"Typed subscription queries must return a query_builder table/query expression.\");" + ); + writeln!( + output, + " PendingSqlQueries.Add(FString(UTF8_TO_TCHAR(Query.into_sql().c_str())));" + ); + writeln!(output, " return this;"); + writeln!(output, " }}"); + writeln!(output); + writeln!(output, " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\", meta=(DisplayName=\"AddQuery\", ScriptName=\"AddQuery\"))"); + writeln!( + output, + " U{module_prefix}SubscriptionBuilder* AddBlueprintQuery(const {blueprint_query_struct}& Query);" + ); + writeln!(output); + let mut blueprint_sources = iter_tables(module, visibility) + .map(|t| t.accessor_name.deref().to_case(Case::Pascal)) + .chain(iter_views(module).map(|v| v.accessor_name.deref().to_case(Case::Pascal))) + .collect::>(); + blueprint_sources.sort(); + for source_pascal in blueprint_sources { + let query_struct = format!("F{module_prefix}{source_pascal}Query"); + writeln!( + output, + " U{module_prefix}SubscriptionBuilder* Add{source_pascal}Query(const {query_struct}& Query);" + ); + writeln!(output); + } + writeln!( + output, + " /** Convenience for subscribing to all rows from all public sources, including views */" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( @@ -2996,6 +3726,9 @@ fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, module_pre writeln!(output, " UPROPERTY()"); writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output); + writeln!(output, " UPROPERTY()"); + writeln!(output, " TArray PendingSqlQueries;"); + writeln!(output); writeln!( output, " // Delegates stored so Subscribe() can bind forwarding callbacks" @@ -3285,6 +4018,7 @@ fn generate_client_implementation( module_prefix: &str, module_name: &str, ) { + let blueprint_query_struct = format!("F{module_prefix}BlueprintQuery"); // U{module_prefix}DbConnection constructor writeln!( output, @@ -3682,6 +4416,15 @@ fn generate_client_implementation( writeln!(output, "\tOnErrorDelegateInternal = Callback;"); writeln!(output, "\treturn this;"); writeln!(output, "}}"); + writeln!( + output, + "U{module_prefix}SubscriptionHandle* U{module_prefix}SubscriptionBuilder::Subscribe()" + ); + writeln!(output, "{{"); + writeln!(output, "\tconst TArray SqlQueries = PendingSqlQueries;"); + writeln!(output, "\tPendingSqlQueries.Empty();"); + writeln!(output, "\treturn Subscribe(SqlQueries);"); + writeln!(output, "}}"); writeln!( output, "U{module_prefix}SubscriptionHandle* U{module_prefix}SubscriptionBuilder::Subscribe(const TArray& SQL)" @@ -3721,9 +4464,37 @@ fn generate_client_implementation( "U{module_prefix}SubscriptionHandle* U{module_prefix}SubscriptionBuilder::SubscribeToAllTables()" ); writeln!(output, "{{"); - writeln!(output, "\treturn Subscribe({{ \"SELECT * FROM * \" }});"); + writeln!(output, "\treturn Subscribe(F{module_prefix}QueryBuilder::AllTablesSqlQueries());"); + writeln!(output, "}}"); + writeln!(output); + writeln!( + output, + "U{module_prefix}SubscriptionBuilder* U{module_prefix}SubscriptionBuilder::AddBlueprintQuery(const {blueprint_query_struct}& Query)" + ); + writeln!(output, "{{"); + writeln!(output, "\tPendingSqlQueries.Add(Query.Sql);"); + writeln!(output, "\treturn this;"); writeln!(output, "}}"); writeln!(output); + let mut blueprint_sources = iter_tables(module, visibility) + .map(|t| t.accessor_name.deref().to_case(Case::Pascal)) + .chain(iter_views(module).map(|v| v.accessor_name.deref().to_case(Case::Pascal))) + .collect::>(); + blueprint_sources.sort(); + for source_pascal in blueprint_sources { + let query_struct = format!("F{module_prefix}{source_pascal}Query"); + writeln!( + output, + "U{module_prefix}SubscriptionBuilder* U{module_prefix}SubscriptionBuilder::Add{source_pascal}Query(const {query_struct}& Query)" + ); + writeln!(output, "{{"); + writeln!(output, "\t{blueprint_query_struct} GenericQuery;"); + writeln!(output, "\tGenericQuery.Sql = Query.Sql;"); + writeln!(output, "\tGenericQuery.ResultSourceName = Query.ResultSourceName;"); + writeln!(output, "\treturn AddBlueprintQuery(GenericQuery);"); + writeln!(output, "}}"); + writeln!(output); + } writeln!( output, "U{module_prefix}SubscriptionHandle::U{module_prefix}SubscriptionHandle(U{module_prefix}DbConnection* InConn)" @@ -3867,7 +4638,7 @@ fn generate_client_implementation( writeln!(output, "{{"); writeln!(output, "\tif (OnConnectDelegate.IsBound())"); writeln!(output, "\t{{"); - writeln!(output, "\t\tOnConnectDelegate.Execute(this, Identity, Token);"); + writeln!(output, "\t\tOnConnectDelegate.Execute(this, InIdentity, InToken);"); writeln!(output, "\t}}"); writeln!(output, "}}"); writeln!( @@ -5574,7 +6345,7 @@ fn autogen_cpp_sum( writeln!(output, " case E{name}Tag::{pas}:"); writeln!( output, - " return GetAs{variant_name}() == Other.GetAs{variant_name}();" + " return GetAs{pas}() == Other.GetAs{pas}();" ); } diff --git a/docs/docs/00200-core-concepts/00400-subscriptions.md b/docs/docs/00200-core-concepts/00400-subscriptions.md index 04f84d9e9bd..18d4f6fc6b6 100644 --- a/docs/docs/00200-core-concepts/00400-subscriptions.md +++ b/docs/docs/00200-core-concepts/00400-subscriptions.md @@ -139,11 +139,69 @@ conn.db().user().on_update(|ctx, old_user, new_user| { }); ``` + + + +```cpp +// Connect to the database +FOnConnectDelegate ConnectDelegate; +BIND_DELEGATE_SAFE(ConnectDelegate, this, AMyActor, OnConnected); + +Conn = UDbConnection::Builder() + ->WithUri(TEXT("wss://maincloud.spacetimedb.com")) + ->WithDatabaseName(TEXT("my_module")) + ->OnConnect(ConnectDelegate) + ->Build(); + +// React to new rows being inserted +Conn->Db->User->OnInsert.AddDynamic(this, &AMyActor::OnUserInsert); + +// React to rows being deleted +Conn->Db->User->OnDelete.AddDynamic(this, &AMyActor::OnUserDelete); + +// React to rows being updated +Conn->Db->User->OnUpdate.AddDynamic(this, &AMyActor::OnUserUpdate); + +void AMyActor::OnConnected(UDbConnection* Connection, FSpacetimeDBIdentity Identity, const FString& Token) +{ + FOnSubscriptionApplied SubscriptionAppliedDelegate; + BIND_DELEGATE_SAFE(SubscriptionAppliedDelegate, this, AMyActor, OnSubscriptionApplied); + + Connection->SubscriptionBuilder() + ->OnApplied(SubscriptionAppliedDelegate) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.User(); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.Message(); + }) + ->Subscribe(); +} + +void AMyActor::OnSubscriptionApplied(const FSubscriptionEventContext& Context) +{ + UE_LOG(LogTemp, Log, TEXT("Subscription ready!")); + + // Initial data is now in the client cache + for (const FUserType& User : Context.Db->User->Iter()) + { + UE_LOG(LogTemp, Log, TEXT("User: %s"), *User.Name); + } +} +``` + + + + +![Unreal Blueprint quick start subscription graph](/images/unreal/subscriptions/ue-blueprint-quick-start.png) + :::tip Typed Query Builders -Type-safe query builders are available in TypeScript, C#, and Rust and are the recommended default. They provide auto-completion and compile-time type checking. For complete API details, see [TypeScript](./00600-clients/00700-typescript-reference.md#query-builder-api), [C#](./00600-clients/00600-csharp-reference.md#query-builder-api), and [Rust](./00600-clients/00500-rust-reference.md#query-builder-api) references. +Type-safe query builders are available in TypeScript, C#, Rust, and Unreal and are the recommended default. They provide auto-completion and compile-time type checking. For complete API details, see [TypeScript](./00600-clients/00700-typescript-reference.md#query-builder-api), [C#](./00600-clients/00600-csharp-reference.md#query-builder-api), [Rust](./00600-clients/00500-rust-reference.md#query-builder-api), and [Unreal](./00600-clients/00800-unreal-reference.md#query-builder-api) references. ::: ## How Subscriptions Work @@ -169,16 +227,20 @@ All SDKs expose a builder API for creating subscriptions: - Register an error callback: runs if subscription registration fails or a subscription later terminates with an error. - Subscribe with one or more queries. +In Unreal, inspect the initial subscribed data set in `OnApplied`. Use table callbacks like `OnInsert`, `OnDelete`, and `OnUpdate` for later live changes. + ### Query Forms -All SDKs support subscriptions. TypeScript, C#, and Rust support query builders (recommended), while Unreal uses query strings: +All SDKs support subscriptions. Query builders are the recommended default across SDKs, with raw SQL available where needed: | SDK | Typed Query Builder Support | Entry Point | | --- | --- | --- | | TypeScript | Yes | `tables..where(...)` passed to `subscribe(...)` | | C# | Yes | `SubscriptionBuilder.AddQuery(...).Subscribe()` | | Rust | Yes | `subscription_builder().add_query(...).subscribe()` | -| Unreal | No | Query strings passed to `Subscribe(...)` | +| Unreal | Yes | `SubscriptionBuilder.AddQuery(...).Subscribe()` | + +Unreal also supports raw SQL subscriptions through `Subscribe(const TArray& SQL)` when you need direct SQL control. ### Subscription Handles @@ -198,6 +260,7 @@ Subscribing returns a handle that manages an individual subscription lifecycle. - [Rust subscription API](./00600-clients/00500-rust-reference.md#subscribe-to-queries) - [Rust query builder API](./00600-clients/00500-rust-reference.md#query-builder-api) - [Unreal subscription API](./00600-clients/00800-unreal-reference.md#subscriptions) +- [Unreal query builder API](./00600-clients/00800-unreal-reference.md#query-builder-api) ## Best Practices for Optimizing Server Compute and Reducing Serialization Overhead @@ -265,7 +328,7 @@ var globalSubscriptions = conn // May unsubscribe to shop_items as player advances var shopSubscription = conn .SubscriptionBuilder() - .AddQuery(q => q.From.ShopItems().Where(r => r.RequiredLevel.Lte(5U))) + .AddQuery(q => q.From.ShopItems().Where(r => r.RequiredLevel.Lte(5))) .Subscribe(); ``` @@ -285,10 +348,45 @@ let global_subscriptions = conn // May unsubscribe to shop_items as player advances let shop_subscription = conn .subscription_builder() - .add_query(|q| q.from.shop_items().r#where(|r| r.required_level.lte(5u32))) + .add_query(|q| q.from.shop_items().r#where(|r| r.required_level.lte(5))) .subscribe(); ``` + + + +```cpp +UDbConnection* Conn = ConnectToDB(); + +// Never need to unsubscribe from global subscriptions +USubscriptionHandle* GlobalSubscriptions = Conn->SubscriptionBuilder() + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.Announcements(); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.Badges(); + }) + ->Subscribe(); + +// May unsubscribe from ShopItems as player advances +USubscriptionHandle* ShopSubscription = Conn->SubscriptionBuilder() + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.ShopItems().Where([](const FShopItemsCols& Row) + { + return Row.RequiredLevel.Lte(5); + }); + }) + ->Subscribe(); +``` + + + + +![Unreal Blueprint grouped subscriptions graph](/images/unreal/subscriptions/ue-blueprint-group-subscriptions.png) + @@ -349,14 +447,14 @@ var conn = ConnectToDB(); var shopSubscription = conn .SubscriptionBuilder() .AddQuery(q => q.From.ExchangeRates()) - .AddQuery(q => q.From.ShopItems().Where(r => r.RequiredLevel.Lte(5U))) + .AddQuery(q => q.From.ShopItems().Where(r => r.RequiredLevel.Lte(5))) .Subscribe(); // New subscription: player now at level 6, which overlaps with the previous query. var newShopSubscription = conn .SubscriptionBuilder() .AddQuery(q => q.From.ExchangeRates()) - .AddQuery(q => q.From.ShopItems().Where(r => r.RequiredLevel.Lte(6U))) + .AddQuery(q => q.From.ShopItems().Where(r => r.RequiredLevel.Lte(6))) .Subscribe(); // Unsubscribe from the old subscription once the new one is in place. @@ -376,14 +474,14 @@ let conn: DbConnection = connect_to_db(); let shop_subscription = conn .subscription_builder() .add_query(|q| q.from.exchange_rates()) - .add_query(|q| q.from.shop_items().r#where(|r| r.required_level.lte(5u32))) + .add_query(|q| q.from.shop_items().r#where(|r| r.required_level.lte(5))) .subscribe(); // New subscription: player now at level 6, which overlaps with the previous query. let new_shop_subscription = conn .subscription_builder() .add_query(|q| q.from.exchange_rates()) - .add_query(|q| q.from.shop_items().r#where(|r| r.required_level.lte(6u32))) + .add_query(|q| q.from.shop_items().r#where(|r| r.required_level.lte(6))) .subscribe(); // Unsubscribe from the old subscription once the new one is active. @@ -392,6 +490,56 @@ if shop_subscription.is_active() { } ``` + + + +```cpp +UDbConnection* Conn = ConnectToDB(); + +// Initial subscription: player at level 5. +USubscriptionHandle* ShopSubscription = Conn->SubscriptionBuilder() + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.ExchangeRates(); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.ShopItems().Where([](const FShopItemsCols& Row) + { + return Row.RequiredLevel.Lte(5); + }); + }) + ->Subscribe(); + +// New subscription: player now at level 6, which overlaps with the previous query. +USubscriptionHandle* NewShopSubscription = Conn->SubscriptionBuilder() + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.ExchangeRates(); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.ShopItems().Where([](const FShopItemsCols& Row) + { + return Row.RequiredLevel.Lte(6); + }); + }) + ->Subscribe(); + +// Unsubscribe from the old subscription once the new one is in place. +if (ShopSubscription->IsActive()) +{ + ShopSubscription->Unsubscribe(); +} +``` + + + + +![Unreal Blueprint new overlapping subscription graph](/images/unreal/subscriptions/ue-blueprint-unsubscription-1.png) + +![Unreal Blueprint unsubscribe old subscription graph](/images/unreal/subscriptions/ue-blueprint-unsubscription-2.png) + diff --git a/docs/docs/00200-core-concepts/00600-clients/00800-unreal-reference.md b/docs/docs/00200-core-concepts/00600-clients/00800-unreal-reference.md index 906d62f3b0a..3dbe63caa8e 100644 --- a/docs/docs/00200-core-concepts/00600-clients/00800-unreal-reference.md +++ b/docs/docs/00200-core-concepts/00600-clients/00800-unreal-reference.md @@ -21,6 +21,7 @@ Before diving into the reference, you may want to review: | [Access the client cache](#access-the-client-cache) | Access to your local view of the database. | | [Observe and invoke reducers](#observe-and-invoke-reducers) | Send requests to the database to run reducers, and register callbacks for reducer results on the calling connection. | | [Subscriptions](#subscriptions) | Subscribe to queries and manage subscription lifecycle. | +| [Query Builder API](#query-builder-api) | Build typed subscription queries in Unreal C++ and Blueprint. | | [Identify a client](#identify-a-client) | Types for identifying users and client connections. | ## Project setup @@ -496,6 +497,8 @@ The generated `On` delegates are the Unreal equivalent of a per-call ca Create subscriptions to receive updates for specific queries using the `USubscriptionBuilder` and `USubscriptionHandle` classes. +For Unreal C++, the recommended default is to build subscriptions with `AddQuery(...)` and then call parameterless `Subscribe()`. Raw SQL subscriptions remain available when you need to provide SQL directly. + | Name | Description | | -------------------------------------------------- | ---------------------------------- | | [USubscriptionBuilder](#type-usubscriptionbuilder) | Build and configure subscriptions. | @@ -512,6 +515,11 @@ class USubscriptionBuilder UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") USubscriptionBuilder* OnError(FOnSubscriptionError Callback); + USubscriptionBuilder* AddQuery(TFunctionRef BuildQuery); + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + USubscriptionHandle* Subscribe(); + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") USubscriptionHandle* Subscribe(const TArray& SQL); @@ -536,13 +544,29 @@ USubscriptionBuilder* OnError(FOnSubscriptionError Callback); Register a callback to run if the subscription fails. +#### Method `AddQuery` + +```cpp +USubscriptionBuilder* AddQuery(TFunctionRef BuildQuery); +``` + +Append a typed query to the builder. The callback receives an `FQueryBuilder`, typically named `Q`, and returns a generated query source or filtered query. Call `AddQuery(...)` once per table or view query you want to subscribe to, then finish with parameterless `Subscribe()`. + #### Method `Subscribe` +```cpp +USubscriptionHandle* Subscribe(); +``` + +Subscribe to the typed queries accumulated with `AddQuery(...)` and return a handle for managing the subscription. + +#### Method `Subscribe` (SQL overload) + ```cpp USubscriptionHandle* Subscribe(const TArray& SQL); ``` -Subscribe to the provided SQL queries and return a handle for managing the subscription. +Subscribe to the provided SQL queries and return a handle for managing the subscription. Use this when you need to write SQL directly instead of using the typed query builder. #### Method `SubscribeToAllTables` @@ -552,6 +576,8 @@ USubscriptionHandle* SubscribeToAllTables(); Subscribe to all public tables in the module. +`SubscribeToAllTables()` is useful for quick prototypes and small modules. Prefer typed queries for production subscriptions so the subscription set stays explicit. + ### Type `USubscriptionHandle` ```cpp @@ -614,6 +640,129 @@ TArray GetQuerySqls() const; Get the SQL queries associated with this subscription. +## Query Builder API + +Use the Unreal query builder to build typed subscriptions in C++ and Blueprint. + +In C++, a query typically starts from the generated `FQueryBuilder` passed to `AddQuery(...)`, selects a source from `Q.From`, and optionally applies `Where(...)` with generated column objects: + +```cpp +USubscriptionHandle* Handle = Conn->SubscriptionBuilder() + ->OnApplied(FOnSubscriptionApplied::CreateUObject(this, &AMyActor::OnSubscriptionApplied)) + ->OnError(FOnSubscriptionError::CreateUObject(this, &AMyActor::OnSubscriptionError)) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.Player().Where([](const FPlayerCols& Cols) + { + return Cols.Level.Gte(1).And(Cols.DisplayName.Neq(TEXT("Guest"))); + }); + }) + ->Subscribe(); +``` + +The generated query-builder surface is module-specific. Sources, column sets, and query return types are generated from your schema and views. + +### Query sources + +Each public table or subscribed query source is available under `Q.From` using a generated method: + +```cpp +Q.From.Player() +Q.From.ActivePlayerLocations() +Q.From.PlayersAtLevel0() +``` + +Event tables are not subscribed implicitly. Subscribe to them with an explicit query just like any other source: + +```cpp +Conn->SubscriptionBuilder() + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.DamageEvent(); + }) + ->Subscribe(); +``` + +### Predicates + +Generated column objects expose typed predicate methods such as: + +- `Eq` +- `Neq` +- `Gt` +- `Lt` +- `Gte` +- `Lte` + +Predicates can be combined with: + +- `And` +- `Or` +- `Not` + +Example: + +```cpp +Conn->SubscriptionBuilder() + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.Player().Where([](const FPlayerCols& Cols) + { + return Cols.Level.Gte(3).And(Cols.IsOnline.Eq(true)); + }); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.ActivePlayerLocations().Where([](const FActivePlayerLocationsCols& Cols) + { + return Cols.X.Gte(10).And(Cols.Y.Lte(400)); + }); + }) + ->Subscribe(); +``` + +### Blueprint availability + +The Unreal query builder is available in both C++ and Blueprint. + +In Blueprint, generated nodes expose the same overall flow: + +- source query nodes +- column nodes +- predicate nodes +- `Where` +- `AddQuery` +- `Subscribe` + +Blueprint uses generated source-specific query types for authoring and converts them at the `AddQuery` boundary automatically. + +For example, a Blueprint subscription to online players at level 3 or higher would follow this node flow: + +```text +From Player +├─> Player Level +│ └─> Int32 Greater Equal (3) +├─> Player IsOnline +│ └─> Bool Equal (true) +└─> Player Where + └─> AND + ├─> Int32 Greater Equal (3) + └─> Bool Equal (true) + +Player Where +└─> AddQuery + └─> Subscribe +``` + +The exact node names are generated from your schema, so `Player`, `Level`, and `IsOnline` will vary by module. + +### Notes and limitations + +- `OnApplied` is the right place to inspect the initial subscribed result set in the client cache. +- `OnInsert`, `OnUpdate`, and `OnDelete` are for subsequent live changes after the subscription is active. +- `TimeDuration` query predicates are currently unsupported. +- Raw SQL subscriptions remain available when you need manual SQL control. + ## Identify a client ### Type `FSpacetimeDBIdentity` @@ -669,7 +818,7 @@ struct FSpacetimeDBTimestamp ## Example usage -Here's a complete example of connecting to SpacetimeDB, subscribing to tables, and handling events: +Here's a complete example of connecting to SpacetimeDB, subscribing with the typed query builder, and handling events: ```cpp // In your Actor's BeginPlay() @@ -706,10 +855,22 @@ void AMyActor::OnConnected(UDbConnection* Connection, FSpacetimeDBIdentity Ident // Save token for future connections UCredentials::SaveToken(Token); - // Subscribe to all tables + // Subscribe with typed queries USubscriptionHandle* Handle = Connection->SubscriptionBuilder() ->OnApplied(FOnSubscriptionApplied::CreateUObject(this, &AMyActor::OnSubscriptionApplied)) - ->SubscribeToAllTables(); + ->OnError(FOnSubscriptionError::CreateUObject(this, &AMyActor::OnSubscriptionError)) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.User(); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.Message().Where([](const FMessageCols& Cols) + { + return Cols.ChannelId.Eq(1); + }); + }) + ->Subscribe(); } void AMyActor::OnUserInsert(const FEventContext& Context, const FUserType& NewRow) @@ -730,3 +891,11 @@ void AMyActor::SendMessage(const FString& Text) } } ``` + +For small modules or quick debugging sessions, you can still subscribe to every public table: + +```cpp +USubscriptionHandle* Handle = Conn->SubscriptionBuilder() + ->OnApplied(FOnSubscriptionApplied::CreateUObject(this, &AMyActor::OnSubscriptionApplied)) + ->SubscribeToAllTables(); +``` diff --git a/docs/docs/00300-resources/00100-how-to/00600-migrating-to-2.0.md b/docs/docs/00300-resources/00100-how-to/00600-migrating-to-2.0.md index d3de7a145c3..8f70388d274 100644 --- a/docs/docs/00300-resources/00100-how-to/00600-migrating-to-2.0.md +++ b/docs/docs/00300-resources/00100-how-to/00600-migrating-to-2.0.md @@ -399,7 +399,11 @@ Conn->Db->DamageEvent->OnInsert.AddDynamic(this, &AMyActor::OnDamageEvent); Conn->SubscriptionBuilder() ->OnApplied(OnAppliedDelegate) ->OnError(OnErrorDelegate) - ->Subscribe({ TEXT("SELECT * FROM damage_event") }); + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.DamageEvent(); + }) + ->Subscribe(); ``` @@ -585,14 +589,18 @@ ctx.subscription_builder() ```cpp -// 2.0 -- same as 1.0 today +// 2.0 -- typed query builder Conn->SubscriptionBuilder() ->OnApplied(OnAppliedDelegate) ->OnError(OnErrorDelegate) - ->Subscribe({ TEXT("SELECT * FROM person") }); + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.Person(); + }) + ->Subscribe(); ``` -The Unreal SDK does not expose typed query builders yet. For now, use SQL strings. Typed query builder support is planned. +Unreal 2.0 now supports typed query-builder subscriptions in C++. Use `AddQuery(...)` as the default for table and event-table subscriptions. @@ -640,7 +648,11 @@ ctx.subscription_builder() Conn->SubscriptionBuilder() ->OnApplied(OnAppliedDelegate) ->OnError(OnErrorDelegate) - ->Subscribe({ TEXT("SELECT * FROM damage_event") }); + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.DamageEvent(); + }) + ->Subscribe(); ``` @@ -1782,6 +1794,8 @@ spacetime sql "SELECT * FROM my_table" - Replace with `_then()` callbacks for your own reducer calls - Unreal: replace with generated `On` delegates on the calling connection - Replace with event tables + `on_insert` for cross-client notifications +- [ ] Migrate Unreal subscription SQL strings to typed queries where appropriate + - Use `Conn->SubscriptionBuilder()->AddQuery(...)->Subscribe()` instead of `Subscribe({ TEXT("SELECT ...") })` - [ ] Update `Event::UnknownTransaction` matches to `Event::Transaction` - [ ] For each reducer whose args you were observing from other clients: 1. Create an `#[table(..., event)]` on the server diff --git a/docs/static/images/unreal/subscriptions/ue-blueprint-group-subscriptions.png b/docs/static/images/unreal/subscriptions/ue-blueprint-group-subscriptions.png new file mode 100644 index 00000000000..b7f8f42e1b4 Binary files /dev/null and b/docs/static/images/unreal/subscriptions/ue-blueprint-group-subscriptions.png differ diff --git a/docs/static/images/unreal/subscriptions/ue-blueprint-quick-start.png b/docs/static/images/unreal/subscriptions/ue-blueprint-quick-start.png new file mode 100644 index 00000000000..a13d67e244f Binary files /dev/null and b/docs/static/images/unreal/subscriptions/ue-blueprint-quick-start.png differ diff --git a/docs/static/images/unreal/subscriptions/ue-blueprint-unsubscription-1.png b/docs/static/images/unreal/subscriptions/ue-blueprint-unsubscription-1.png new file mode 100644 index 00000000000..926b713ca44 Binary files /dev/null and b/docs/static/images/unreal/subscriptions/ue-blueprint-unsubscription-1.png differ diff --git a/docs/static/images/unreal/subscriptions/ue-blueprint-unsubscription-2.png b/docs/static/images/unreal/subscriptions/ue-blueprint-unsubscription-2.png new file mode 100644 index 00000000000..484492a4b9a Binary files /dev/null and b/docs/static/images/unreal/subscriptions/ue-blueprint-unsubscription-2.png differ diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h index e8c26b3a988..4510dfa1da7 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/expr.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/expr.h new file mode 100644 index 00000000000..a005a248cf9 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/expr.h @@ -0,0 +1,363 @@ +#pragma once + +#include "BSATN/Core/timestamp.h" +#include "BSATN/Core/types.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace SpacetimeDB::query_builder { + +template +class Col; + +template +class ColumnRef { +public: + constexpr ColumnRef() + : table_name_(""), column_name_("") {} + + constexpr ColumnRef(const char* table_name, const char* column_name) + : table_name_(table_name), column_name_(column_name) {} + + [[nodiscard]] std::string format() const { + return "\"" + std::string(table_name_) + "\".\"" + std::string(column_name_) + "\""; + } + + [[nodiscard]] constexpr const char* table_name() const { return table_name_; } + [[nodiscard]] constexpr const char* column_name() const { return column_name_; } + +private: + const char* table_name_; + const char* column_name_; +}; + +namespace detail { + +inline std::string quote_string(std::string_view value) { + std::string escaped; + escaped.reserve(value.size() + 2); + escaped.push_back('\''); + for (char ch : value) { + escaped.push_back(ch); + if (ch == '\'') { + escaped.push_back('\''); + } + } + escaped.push_back('\''); + return escaped; +} + +inline std::string trim_timestamp_fraction(std::string value) { + // Keep this in sync with the current Timestamp::to_string() UTC form. + // If that representation changes away from a +00:00 / Z suffix, revisit this trimming logic. + const std::size_t plus = value.rfind("+00:00"); + const std::size_t z = value.rfind('Z'); + const std::size_t dot = value.find('.'); + const std::size_t suffix = plus != std::string::npos ? plus : z; + if (suffix == std::string::npos || dot == std::string::npos || dot > suffix) { + return value; + } + + std::size_t trim = suffix; + while (trim > dot + 1 && value[trim - 1] == '0') { + --trim; + } + if (trim == dot + 1) { + value.erase(dot, suffix - dot); + } else { + value.erase(trim, suffix - trim); + } + return value; +} + +inline std::string literal_sql(const std::string& value) { return quote_string(value); } +inline std::string literal_sql(std::string_view value) { return quote_string(value); } +inline std::string literal_sql(const char* value) { return quote_string(value == nullptr ? "" : value); } +inline std::string literal_sql(bool value) { return value ? "TRUE" : "FALSE"; } +inline std::string literal_sql(const ::SpacetimeDb::Identity& value) { return "0x" + value.to_hex_string(); } +inline std::string literal_sql(const ::SpacetimeDb::ConnectionId& value) { return "0x" + value.to_string(); } +inline std::string literal_sql(const ::SpacetimeDb::Timestamp& value) { return quote_string(trim_timestamp_fraction(value.to_string())); } +#include "QueryBuilder/expr_unreal_adapters.h" + +inline std::string literal_sql(const std::vector& value) { + std::ostringstream out; + out << "0x" << std::hex << std::setfill('0'); + for (uint8_t byte : value) { + out << std::setw(2) << static_cast(byte); + } + return out.str(); +} +inline std::string literal_sql(const ::SpacetimeDb::u128& value) { return value.to_string(); } +inline std::string literal_sql(const ::SpacetimeDb::i128& value) { return value.to_string(); } +inline std::string literal_sql(const ::SpacetimeDb::u256& value) { return value.to_string(); } +inline std::string literal_sql(const ::SpacetimeDb::i256& value) { return value.to_string(); } + +template +inline std::string format_floating_point(TFloat value) { + char buffer[64]; + const auto result = std::to_chars(buffer, buffer + sizeof(buffer), value, std::chars_format::general); + if (result.ec == std::errc{}) { + return std::string(buffer, result.ptr); + } + + std::ostringstream out; + out.imbue(std::locale::classic()); + out << std::setprecision(std::numeric_limits::max_digits10); + out << value; + return out.str(); +} + +inline std::string literal_sql(float value) { + return format_floating_point(value); +} + +inline std::string literal_sql(double value) { + return format_floating_point(value); +} + +template +std::string literal_sql(const TValue& value) +requires(std::is_integral_v && !std::is_same_v, bool>) +{ + return std::to_string(value); +} + +template +class Operand { +public: + static Operand column(ColumnRef column) { return Operand(std::move(column)); } + static Operand literal(std::string sql) { return Operand(std::move(sql)); } + + [[nodiscard]] std::string format() const { + return std::holds_alternative>(value_) + ? std::get>(value_).format() + : std::get(value_); + } + +private: + explicit Operand(ColumnRef column) : value_(std::move(column)) {} + explicit Operand(std::string sql) : value_(std::move(sql)) {} + + std::variant, std::string> value_; +}; + +template +Operand to_operand(const Col& column); + +template +Operand to_operand(const TValue& value) { + return Operand::literal(literal_sql(value)); +} + +} // namespace detail + +template +class BoolExpr { +public: + enum class Kind { + Eq, + Ne, + Gt, + Lt, + Gte, + Lte, + And, + Or, + Not, + }; + + static BoolExpr compare(Kind kind, detail::Operand lhs, detail::Operand rhs) { + return BoolExpr(std::make_shared(kind, std::move(lhs), std::move(rhs))); + } + + static BoolExpr always(bool value) { + return compare( + Kind::Eq, + detail::Operand::literal(value ? "TRUE" : "FALSE"), + detail::Operand::literal("TRUE")); + } + + [[nodiscard]] std::string format() const { + return format_node(root_); + } + + [[nodiscard]] BoolExpr and_(const BoolExpr& other) const { + return BoolExpr(std::make_shared(Kind::And, root_, other.root_)); + } + [[nodiscard]] BoolExpr And(const BoolExpr& other) const { return and_(other); } + + [[nodiscard]] BoolExpr or_(const BoolExpr& other) const { + return BoolExpr(std::make_shared(Kind::Or, root_, other.root_)); + } + [[nodiscard]] BoolExpr Or(const BoolExpr& other) const { return or_(other); } + + [[nodiscard]] BoolExpr not_() const { + return BoolExpr(std::make_shared(Kind::Not, root_, nullptr)); + } + [[nodiscard]] BoolExpr Not() const { return not_(); } + +private: + struct Node; + + struct CompareData { + detail::Operand lhs; + detail::Operand rhs; + }; + + struct LogicData { + std::shared_ptr left; + std::shared_ptr right; + }; + + struct NotData { + std::shared_ptr child; + }; + + struct Node { + Node(Kind kind_in, detail::Operand lhs_in, detail::Operand rhs_in) + : kind(kind_in), data(CompareData{std::move(lhs_in), std::move(rhs_in)}) {} + + Node(Kind kind_in, std::shared_ptr left_in, std::shared_ptr right_in) + : kind(kind_in), + data(kind_in == Kind::Not + ? NodeData(NotData{std::move(left_in)}) + : NodeData(LogicData{std::move(left_in), std::move(right_in)})) {} + + Kind kind; + using NodeData = std::variant; + NodeData data; + }; + + explicit BoolExpr(std::shared_ptr root) + : root_(std::move(root)) {} + + static std::string format_node(const std::shared_ptr& node) { + switch (node->kind) { + case Kind::Eq: { + const auto& compare = std::get(node->data); + return "(" + compare.lhs.format() + " = " + compare.rhs.format() + ")"; + } + case Kind::Ne: { + const auto& compare = std::get(node->data); + return "(" + compare.lhs.format() + " <> " + compare.rhs.format() + ")"; + } + case Kind::Gt: { + const auto& compare = std::get(node->data); + return "(" + compare.lhs.format() + " > " + compare.rhs.format() + ")"; + } + case Kind::Lt: { + const auto& compare = std::get(node->data); + return "(" + compare.lhs.format() + " < " + compare.rhs.format() + ")"; + } + case Kind::Gte: { + const auto& compare = std::get(node->data); + return "(" + compare.lhs.format() + " >= " + compare.rhs.format() + ")"; + } + case Kind::Lte: { + const auto& compare = std::get(node->data); + return "(" + compare.lhs.format() + " <= " + compare.rhs.format() + ")"; + } + case Kind::And: { + const auto& logic = std::get(node->data); + return "(" + format_node(logic.left) + " AND " + format_node(logic.right) + ")"; + } + case Kind::Or: { + const auto& logic = std::get(node->data); + return "(" + format_node(logic.left) + " OR " + format_node(logic.right) + ")"; + } + case Kind::Not: { + const auto& not_data = std::get(node->data); + return "(NOT " + format_node(not_data.child) + ")"; + } + } + return {}; + } + + std::shared_ptr root_; +}; + +namespace detail { + +template +BoolExpr make_bool_expr(BoolExpr expr) { + return expr; +} + +template +BoolExpr make_bool_expr(bool value) { + return BoolExpr::always(value); +} + +template +BoolExpr make_bool_expr(const Col& column) { + return column.eq(true); +} + +} // namespace detail + +template +class Col { +public: + constexpr Col() = default; + + constexpr Col(const char* table_name, const char* column_name) + : column_(table_name, column_name) {} + + template + [[nodiscard]] BoolExpr eq(const TRhs& rhs) const { return compare(BoolExpr::Kind::Eq, rhs); } + template + [[nodiscard]] BoolExpr Eq(const TRhs& rhs) const { return eq(rhs); } + template + [[nodiscard]] BoolExpr ne(const TRhs& rhs) const { return compare(BoolExpr::Kind::Ne, rhs); } + template + [[nodiscard]] BoolExpr Neq(const TRhs& rhs) const { return ne(rhs); } + template + [[nodiscard]] BoolExpr gt(const TRhs& rhs) const { return compare(BoolExpr::Kind::Gt, rhs); } + template + [[nodiscard]] BoolExpr Gt(const TRhs& rhs) const { return gt(rhs); } + template + [[nodiscard]] BoolExpr lt(const TRhs& rhs) const { return compare(BoolExpr::Kind::Lt, rhs); } + template + [[nodiscard]] BoolExpr Lt(const TRhs& rhs) const { return lt(rhs); } + template + [[nodiscard]] BoolExpr gte(const TRhs& rhs) const { return compare(BoolExpr::Kind::Gte, rhs); } + template + [[nodiscard]] BoolExpr Gte(const TRhs& rhs) const { return gte(rhs); } + template + [[nodiscard]] BoolExpr lte(const TRhs& rhs) const { return compare(BoolExpr::Kind::Lte, rhs); } + template + [[nodiscard]] BoolExpr Lte(const TRhs& rhs) const { return lte(rhs); } + + [[nodiscard]] constexpr const ColumnRef& column_ref() const { return column_; } + +private: + template + [[nodiscard]] BoolExpr compare(typename BoolExpr::Kind kind, const TRhs& rhs) const { + return BoolExpr::compare(kind, detail::to_operand(*this), detail::to_operand(rhs)); + } + + ColumnRef column_; +}; + +namespace detail { + +template +Operand to_operand(const Col& column) { + return Operand::column(column.column_ref()); +} + +} // namespace detail + +} // namespace SpacetimeDB::query_builder diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/expr_unreal_adapters.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/expr_unreal_adapters.h new file mode 100644 index 00000000000..3c4e27d22e4 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/expr_unreal_adapters.h @@ -0,0 +1,51 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Types/Builtins.h" + +inline std::string literal_sql(const TCHAR* value) { + return quote_string(value == nullptr ? "" : TCHAR_TO_UTF8(value)); +} + +inline std::string literal_sql(const FString& value) { + return quote_string(TCHAR_TO_UTF8(*value)); +} + +inline std::string ensure_hex_prefix(std::string value) { + if (value.rfind("0x", 0) == 0 || value.rfind("0X", 0) == 0) { + return value; + } + return "0x" + value; +} + +inline std::string literal_sql(const FSpacetimeDBIdentity& value) { + return ensure_hex_prefix(std::string(TCHAR_TO_UTF8(*value.ToHex()))); +} + +inline std::string literal_sql(const FSpacetimeDBConnectionId& value) { + return ensure_hex_prefix(std::string(TCHAR_TO_UTF8(*value.ToHex()))); +} + +inline std::string literal_sql(const FSpacetimeDBUuid& value) { + return quote_string(TCHAR_TO_UTF8(*value.ToString())); +} + +inline std::string literal_sql(const FSpacetimeDBTimestamp& value) { + return quote_string(trim_timestamp_fraction(TCHAR_TO_UTF8(*value.ToString()))); +} + +std::string literal_sql(const FSpacetimeDBTimeDuration& value) = delete; + +inline std::string literal_sql(const TArray& value) { + std::ostringstream out; + out << "0x" << std::hex << std::setfill('0'); + for (uint8 byte : value) { + out << std::setw(2) << static_cast(byte); + } + return out.str(); +} + +inline std::string literal_sql(const FSpacetimeDBUInt128& value) { return TCHAR_TO_UTF8(*value.ToDecimalString()); } +inline std::string literal_sql(const FSpacetimeDBInt128& value) { return TCHAR_TO_UTF8(*value.ToDecimalString()); } +inline std::string literal_sql(const FSpacetimeDBUInt256& value) { return TCHAR_TO_UTF8(*value.ToDecimalString()); } +inline std::string literal_sql(const FSpacetimeDBInt256& value) { return TCHAR_TO_UTF8(*value.ToDecimalString()); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/join.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/join.h new file mode 100644 index 00000000000..636d9474a28 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/join.h @@ -0,0 +1,342 @@ +#pragma once + +#include "QueryBuilder/table.h" + +#include +#include +#include + +namespace SpacetimeDB::query_builder { + +template +struct IxJoinEq; + +template +class IxCol { +public: + constexpr IxCol() = default; + + constexpr IxCol(const char* table_name, const char* column_name) + : column_(table_name, column_name) {} + + template + [[nodiscard]] auto eq(const IxCol& rhs) const { + return IxJoinEq{column_, rhs.column_}; + } + template + [[nodiscard]] auto Eq(const IxCol& rhs) const { + return eq(rhs); + } + + template + [[nodiscard]] BoolExpr eq(const TRhs& rhs) const { + return compare(BoolExpr::Kind::Eq, rhs); + } + template + [[nodiscard]] BoolExpr Eq(const TRhs& rhs) const { return eq(rhs); } + template + [[nodiscard]] BoolExpr ne(const TRhs& rhs) const { + return compare(BoolExpr::Kind::Ne, rhs); + } + template + [[nodiscard]] BoolExpr Neq(const TRhs& rhs) const { return ne(rhs); } + template + [[nodiscard]] BoolExpr gt(const TRhs& rhs) const { + return compare(BoolExpr::Kind::Gt, rhs); + } + template + [[nodiscard]] BoolExpr Gt(const TRhs& rhs) const { return gt(rhs); } + template + [[nodiscard]] BoolExpr lt(const TRhs& rhs) const { + return compare(BoolExpr::Kind::Lt, rhs); + } + template + [[nodiscard]] BoolExpr Lt(const TRhs& rhs) const { return lt(rhs); } + template + [[nodiscard]] BoolExpr gte(const TRhs& rhs) const { + return compare(BoolExpr::Kind::Gte, rhs); + } + template + [[nodiscard]] BoolExpr Gte(const TRhs& rhs) const { return gte(rhs); } + template + [[nodiscard]] BoolExpr lte(const TRhs& rhs) const { + return compare(BoolExpr::Kind::Lte, rhs); + } + template + [[nodiscard]] BoolExpr Lte(const TRhs& rhs) const { return lte(rhs); } + + [[nodiscard]] constexpr const ColumnRef& column_ref() const { return column_; } + +private: + template + [[nodiscard]] BoolExpr compare(typename BoolExpr::Kind kind, const TRhs& rhs) const { + return BoolExpr::compare(kind, detail::Operand::column(column_), detail::to_operand(rhs)); + } + + ColumnRef column_; + + template + friend class IxCol; +}; + +template +struct IxJoinEq { + ColumnRef lhs; + ColumnRef rhs; +}; + +template +class LeftSemiJoin { +public: + using row_type = TLeftRow; + + LeftSemiJoin( + Table left, + Table right, + ColumnRef left_join_ref, + ColumnRef right_join_ref, + std::optional> where_expr = std::nullopt) + : left_(std::move(left)) + , right_(std::move(right)) + , left_join_ref_(left_join_ref) + , right_join_ref_(right_join_ref) + , where_expr_(std::move(where_expr)) {} + + template + [[nodiscard]] LeftSemiJoin where(TFn&& predicate) const { + auto extra = detail::make_bool_expr(std::forward(predicate)(left_.cols())); + return LeftSemiJoin(left_, right_, left_join_ref_, right_join_ref_, where_expr_ ? where_expr_->and_(extra) : std::optional>(std::move(extra))); + } + + template + [[nodiscard]] LeftSemiJoin where_ix(TFn&& predicate) const { + auto extra = detail::make_bool_expr(std::forward(predicate)(left_.cols(), left_.ix_cols())); + return LeftSemiJoin(left_, right_, left_join_ref_, right_join_ref_, where_expr_ ? where_expr_->and_(extra) : std::optional>(std::move(extra))); + } + + template + [[nodiscard]] LeftSemiJoin Where(TFn&& predicate) const { + if constexpr (std::is_invocable_v) { + return where_ix(std::forward(predicate)); + } else { + return where(std::forward(predicate)); + } + } + + template + [[nodiscard]] LeftSemiJoin filter(TFn&& predicate) const { + return where(std::forward(predicate)); + } + template + [[nodiscard]] LeftSemiJoin Filter(TFn&& predicate) const { + return Where(std::forward(predicate)); + } + + [[nodiscard]] RawQuery build() const { + std::string sql; + sql.reserve( + 48 + + (std::char_traits::length(left_.name()) * 3) + + std::char_traits::length(right_.name()) * 2 + + std::char_traits::length(left_join_ref_.column_name()) + + std::char_traits::length(right_join_ref_.column_name())); + sql += "SELECT \""; + sql += left_.name(); + sql += "\".* FROM \""; + sql += left_.name(); + sql += "\" JOIN \""; + sql += right_.name(); + sql += "\" ON "; + sql += left_join_ref_.format(); + sql += " = "; + sql += right_join_ref_.format(); + if (where_expr_) { + sql += " WHERE " + where_expr_->format(); + } + return RawQuery(std::move(sql)); + } + + [[nodiscard]] std::string into_sql() const { return build().into_sql(); } + +private: + Table left_; + Table right_; + ColumnRef left_join_ref_; + ColumnRef right_join_ref_; + std::optional> where_expr_; +}; + +template +class RightSemiJoin { +public: + using row_type = TRightRow; + + RightSemiJoin( + Table left, + Table right, + ColumnRef left_join_ref, + ColumnRef right_join_ref, + std::optional> left_where_expr = std::nullopt, + std::optional> right_where_expr = std::nullopt) + : left_(std::move(left)) + , right_(std::move(right)) + , left_join_ref_(left_join_ref) + , right_join_ref_(right_join_ref) + , left_where_expr_(std::move(left_where_expr)) + , right_where_expr_(std::move(right_where_expr)) {} + + template + [[nodiscard]] RightSemiJoin where(TFn&& predicate) const { + auto extra = detail::make_bool_expr(std::forward(predicate)(right_.cols())); + return RightSemiJoin(left_, right_, left_join_ref_, right_join_ref_, left_where_expr_, right_where_expr_ ? right_where_expr_->and_(extra) : std::optional>(std::move(extra))); + } + + template + [[nodiscard]] RightSemiJoin where_ix(TFn&& predicate) const { + auto extra = detail::make_bool_expr(std::forward(predicate)(right_.cols(), right_.ix_cols())); + return RightSemiJoin(left_, right_, left_join_ref_, right_join_ref_, left_where_expr_, right_where_expr_ ? right_where_expr_->and_(extra) : std::optional>(std::move(extra))); + } + + template + [[nodiscard]] RightSemiJoin Where(TFn&& predicate) const { + if constexpr (std::is_invocable_v) { + return where_ix(std::forward(predicate)); + } else { + return where(std::forward(predicate)); + } + } + + template + [[nodiscard]] RightSemiJoin filter(TFn&& predicate) const { + return where(std::forward(predicate)); + } + template + [[nodiscard]] RightSemiJoin Filter(TFn&& predicate) const { + return Where(std::forward(predicate)); + } + + [[nodiscard]] RawQuery build() const { + std::string sql; + sql.reserve( + 48 + + (std::char_traits::length(left_.name()) * 2) + + (std::char_traits::length(right_.name()) * 3) + + std::char_traits::length(left_join_ref_.column_name()) + + std::char_traits::length(right_join_ref_.column_name())); + sql += "SELECT \""; + sql += right_.name(); + sql += "\".* FROM \""; + sql += left_.name(); + sql += "\" JOIN \""; + sql += right_.name(); + sql += "\" ON "; + sql += left_join_ref_.format(); + sql += " = "; + sql += right_join_ref_.format(); + + if (left_where_expr_ && right_where_expr_) { + sql += " WHERE "; + sql += left_where_expr_->format(); + sql += " AND "; + sql += right_where_expr_->format(); + } else if (left_where_expr_) { + sql += " WHERE "; + sql += left_where_expr_->format(); + } else if (right_where_expr_) { + sql += " WHERE "; + sql += right_where_expr_->format(); + } + + return RawQuery(std::move(sql)); + } + + [[nodiscard]] std::string into_sql() const { return build().into_sql(); } + +private: + Table left_; + Table right_; + ColumnRef left_join_ref_; + ColumnRef right_join_ref_; + std::optional> left_where_expr_; + std::optional> right_where_expr_; +}; + +namespace detail { + +template +[[nodiscard]] auto left_semijoin_impl(const Table& left, const Table& right, TFn&& predicate) { + static_assert( + can_be_lookup_table_v>, + "Lookup side of a semijoin must opt in via CanBeLookupTable." + ); + const auto join = std::forward(predicate)(left.ix_cols(), right.ix_cols()); + return LeftSemiJoin(left, right, join.lhs, join.rhs); +} + +template +[[nodiscard]] auto left_semijoin_impl(const FromWhere& left, const Table& right, TFn&& predicate) { + static_assert( + can_be_lookup_table_v>, + "Lookup side of a semijoin must opt in via CanBeLookupTable." + ); + const auto join = std::forward(predicate)(left.table().ix_cols(), right.ix_cols()); + return LeftSemiJoin(left.table(), right, join.lhs, join.rhs, left.expr()); +} + +template +[[nodiscard]] auto right_semijoin_impl(const Table& left, const Table& right, TFn&& predicate) { + static_assert( + can_be_lookup_table_v>, + "Lookup side of a semijoin must opt in via CanBeLookupTable." + ); + const auto join = std::forward(predicate)(left.ix_cols(), right.ix_cols()); + return RightSemiJoin(left, right, join.lhs, join.rhs); +} + +template +[[nodiscard]] auto right_semijoin_impl(const FromWhere& left, const Table& right, TFn&& predicate) { + static_assert( + can_be_lookup_table_v>, + "Lookup side of a semijoin must opt in via CanBeLookupTable." + ); + const auto join = std::forward(predicate)(left.table().ix_cols(), right.ix_cols()); + return RightSemiJoin(left.table(), right, join.lhs, join.rhs, left.expr()); +} + +} // namespace detail + +template +template +[[nodiscard]] auto Table::left_semijoin(const Table& right, TFn&& predicate) const { + return detail::left_semijoin_impl(*this, right, std::forward(predicate)); +} + +template +template +[[nodiscard]] auto Table::right_semijoin(const Table& right, TFn&& predicate) const { + return detail::right_semijoin_impl(*this, right, std::forward(predicate)); +} + +template +template +[[nodiscard]] auto FromWhere::left_semijoin(const Table& right, TFn&& predicate) const { + return detail::left_semijoin_impl(*this, right, std::forward(predicate)); +} + +template +template +[[nodiscard]] auto FromWhere::right_semijoin(const Table& right, TFn&& predicate) const { + return detail::right_semijoin_impl(*this, right, std::forward(predicate)); +} + +template +struct query_row_type> { + using type = TLeftRow; +}; + +template +struct query_row_type> { + using type = TRightRow; +}; + +} // namespace SpacetimeDB::query_builder diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/query_builder.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/query_builder.h new file mode 100644 index 00000000000..8b06502e337 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/query_builder.h @@ -0,0 +1,98 @@ +#pragma once + +#include "QueryBuilder/expr.h" +#include "QueryBuilder/join.h" +#include "QueryBuilder/table.h" + +#include +#include +#include +#include + +namespace SpacetimeDB { + +template +using Query = query_builder::RawQuery; + +namespace detail { + +template +struct NamedQuerySourceTag { + using type = TRow; + const char* __table_name_internal; +}; + +struct NotAQuerySourceTag {}; + +template +struct query_source_row_type {}; + +template +concept HasQuerySourceRowType = requires { + typename query_source_row_type>::type; +}; + +template +using query_source_row_type_t = typename query_source_row_type>::type; + +template + requires query_builder::QueryBuilderReturn +struct query_source_row_type { + using type = query_builder::query_row_type_t; +}; + +template +struct query_source_row_type> { + using type = TRow; +}; + +template +struct query_source_row_type> { + using type = TRow; +}; + +template +constexpr auto MakeQuerySourceTag(const char* source_name) { + if constexpr (HasQuerySourceRowType) { + return NamedQuerySourceTag>{source_name}; + } else { + return NotAQuerySourceTag{}; + } +} + +template +constexpr const char* GetQuerySourceName(const TSourceTag& tag) { + return tag.__table_name_internal; +} + +} // namespace detail + +class QueryBuilder { +public: + template + [[nodiscard]] constexpr query_builder::Table table(const char* table_name, TCols cols, TIxCols ix_cols) const { + return query_builder::Table(table_name, std::move(cols), std::move(ix_cols)); + } + + template + [[nodiscard]] constexpr auto table(TTableTag tag) const + -> query_builder::Table< + typename std::remove_cvref_t::type, + decltype(query_builder::HasCols::type>::get(std::declval())), + decltype(query_builder::HasIxCols::type>::get(std::declval()))> { + using TRow = typename std::remove_cvref_t::type; + const char* table_name = detail::GetQuerySourceName(tag); + return table( + table_name, + query_builder::HasCols::get(table_name), + query_builder::HasIxCols::get(table_name)); + } + + template + [[nodiscard]] constexpr auto operator[](TTableTag tag) const + -> decltype(table(tag)) { + return table(tag); + } +}; + +} // namespace SpacetimeDB diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/table.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/table.h new file mode 100644 index 00000000000..e899efc396f --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/QueryBuilder/table.h @@ -0,0 +1,303 @@ +#pragma once + +#ifndef SPACETIMEDB_QUERY_BUILDER_ENABLE_BSATN +#define SPACETIMEDB_QUERY_BUILDER_ENABLE_BSATN 0 +#endif + +#if SPACETIMEDB_QUERY_BUILDER_ENABLE_BSATN +#include "BSATN/Core/traits.h" +#endif +#include "QueryBuilder/expr.h" + +#include +#include +#include +#include +#include + +namespace SpacetimeDB::query_builder { + +template +struct query_row_type; + +template +class Table; + +template +class FromWhere; + +template +struct HasCols; + +template +struct HasIxCols; + +template +struct CanBeLookupTable : std::false_type {}; + +template +using query_row_type_t = typename query_row_type>::type; + +template +class RawQuery { +public: + using row_type = TRow; + + explicit RawQuery(std::string sql) + : sql_(std::move(sql)) {} + + template + requires(!std::same_as, RawQuery> && + requires { typename query_row_type_t; } && + std::same_as, TRow> && + requires(TQuery&& query) { { std::forward(query).into_sql() } -> std::convertible_to; }) + RawQuery(TQuery&& query) + : sql_(std::forward(query).into_sql()) {} + + [[nodiscard]] const std::string& sql() const { return sql_; } + [[nodiscard]] std::string into_sql() const { return sql_; } + +private: + std::string sql_; +}; + +template +concept QueryLike = requires(const T& query) { + { query.into_sql() } -> std::convertible_to; +}; + +template +concept QueryBuilderReturn = requires { + typename query_row_type_t; +} && QueryLike>; + +namespace detail { + +template +struct row_tag {}; + +inline std::false_type lookup_table_allowed(...); + +template +auto adl_lookup_table_allowed(int) -> decltype(lookup_table_allowed(row_tag{})); + +template +std::false_type adl_lookup_table_allowed(...); + +} // namespace detail + +template +inline constexpr bool can_be_lookup_row_v = + CanBeLookupTable::value || decltype(detail::adl_lookup_table_allowed(0))::value; + +template +inline constexpr bool can_be_lookup_table_v = CanBeLookupTable>::value; + +template +struct CanBeLookupTable> : std::bool_constant> {}; + +template +class Table { +public: + using row_type = TRow; + using cols_type = TCols; + using ix_cols_type = TIxCols; + + constexpr Table(const char* table_name, TCols cols, TIxCols ix_cols) + : table_name_(table_name), cols_(std::move(cols)), ix_cols_(std::move(ix_cols)) {} + + [[nodiscard]] constexpr const char* name() const { return table_name_; } + [[nodiscard]] constexpr const TCols& cols() const { return cols_; } + [[nodiscard]] constexpr const TIxCols& ix_cols() const { return ix_cols_; } + + [[nodiscard]] RawQuery build() const { + std::string sql; + sql.reserve(16 + std::char_traits::length(table_name_)); + sql += "SELECT * FROM \""; + sql += table_name_; + sql += "\""; + return RawQuery(std::move(sql)); + } + + [[nodiscard]] std::string into_sql() const { + return build().into_sql(); + } + + template + [[nodiscard]] auto where(TFn&& predicate) const { + auto expr = detail::make_bool_expr(std::forward(predicate)(cols_)); + return FromWhere(*this, std::move(expr)); + } + + template + [[nodiscard]] auto where_ix(TFn&& predicate) const { + auto expr = detail::make_bool_expr(std::forward(predicate)(cols_, ix_cols_)); + return FromWhere(*this, std::move(expr)); + } + + template + [[nodiscard]] auto Where(TFn&& predicate) const { + if constexpr (std::is_invocable_v) { + return where_ix(std::forward(predicate)); + } else { + return where(std::forward(predicate)); + } + } + + template + [[nodiscard]] auto filter(TFn&& predicate) const { + return where(std::forward(predicate)); + } + template + [[nodiscard]] auto Filter(TFn&& predicate) const { + return Where(std::forward(predicate)); + } + + template + [[nodiscard]] auto left_semijoin(const Table& right, TFn&& predicate) const; + template + [[nodiscard]] auto LeftSemijoin(const Table& right, TFn&& predicate) const { + return left_semijoin(right, std::forward(predicate)); + } + + template + [[nodiscard]] auto right_semijoin(const Table& right, TFn&& predicate) const; + template + [[nodiscard]] auto RightSemijoin(const Table& right, TFn&& predicate) const { + return right_semijoin(right, std::forward(predicate)); + } + +private: + const char* table_name_; + TCols cols_; + TIxCols ix_cols_; +}; + +template +class FromWhere { +public: + using row_type = TRow; + using cols_type = TCols; + using ix_cols_type = TIxCols; + + constexpr FromWhere(Table table, BoolExpr expr) + : table_(std::move(table)), expr_(std::move(expr)) {} + + [[nodiscard]] constexpr const char* table_name() const { return table_.name(); } + [[nodiscard]] const BoolExpr& expr() const { return expr_; } + [[nodiscard]] constexpr const Table& table() const { return table_; } + + [[nodiscard]] RawQuery build() const { + std::string predicate = expr_.format(); + std::string sql; + sql.reserve(24 + std::char_traits::length(table_.name()) + predicate.size()); + sql += "SELECT * FROM \""; + sql += table_.name(); + sql += "\" WHERE "; + sql += predicate; + return RawQuery(std::move(sql)); + } + + [[nodiscard]] std::string into_sql() const { + return build().into_sql(); + } + + template + [[nodiscard]] FromWhere where(TFn&& predicate) const { + auto extra = detail::make_bool_expr(std::forward(predicate)(table_.cols())); + return FromWhere(table_, expr_.and_(extra)); + } + + template + [[nodiscard]] FromWhere where_ix(TFn&& predicate) const { + auto extra = detail::make_bool_expr(std::forward(predicate)(table_.cols(), table_.ix_cols())); + return FromWhere(table_, expr_.and_(extra)); + } + + template + [[nodiscard]] FromWhere Where(TFn&& predicate) const { + if constexpr (std::is_invocable_v) { + return where_ix(std::forward(predicate)); + } else { + return where(std::forward(predicate)); + } + } + + template + [[nodiscard]] FromWhere filter(TFn&& predicate) const { + return where(std::forward(predicate)); + } + template + [[nodiscard]] FromWhere Filter(TFn&& predicate) const { + return Where(std::forward(predicate)); + } + + template + [[nodiscard]] auto left_semijoin(const Table& right, TFn&& predicate) const; + template + [[nodiscard]] auto LeftSemijoin(const Table& right, TFn&& predicate) const { + return left_semijoin(right, std::forward(predicate)); + } + + template + [[nodiscard]] auto right_semijoin(const Table& right, TFn&& predicate) const; + template + [[nodiscard]] auto RightSemijoin(const Table& right, TFn&& predicate) const { + return right_semijoin(right, std::forward(predicate)); + } + +private: + Table table_; + BoolExpr expr_; +}; + +template +struct query_row_type> { + using type = TRow; +}; + +template +struct query_row_type> { + using type = TRow; +}; + +template +struct query_row_type> { + using type = TRow; +}; + +} // namespace SpacetimeDB::query_builder + +#if SPACETIMEDB_QUERY_BUILDER_ENABLE_BSATN +namespace SpacetimeDB::bsatn { +template +struct algebraic_type_of<::SpacetimeDB::query_builder::RawQuery> { + static AlgebraicType get() { + std::vector elements; + elements.emplace_back(std::string("__query__"), algebraic_type_of::get()); + return AlgebraicType::make_product(std::make_unique(std::move(elements))); + } +}; + +template +struct bsatn_traits<::SpacetimeDB::query_builder::RawQuery> { + static void serialize(Writer&, const ::SpacetimeDB::query_builder::RawQuery&) { + std::fputs("SpacetimeDB bindings-cpp internal error: attempted to BSATN-serialize query_builder::RawQuery. " + "RawQuery is only valid as a view return type and should not be serialized directly.\n", + stderr); + std::abort(); + } + + static ::SpacetimeDB::query_builder::RawQuery deserialize(Reader&) { + std::fputs("SpacetimeDB bindings-cpp internal error: attempted to BSATN-deserialize query_builder::RawQuery. " + "RawQuery should only appear in query-view metadata handling.\n", + stderr); + std::abort(); + } + + static AlgebraicType algebraic_type() { + return algebraic_type_of<::SpacetimeDB::query_builder::RawQuery>::get(); + } +}; +} // namespace SpacetimeDB::bsatn +#endif diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp index 22169073be0..259fc04d14c 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -10921,6 +10921,12 @@ USubscriptionBuilder* USubscriptionBuilder::OnError(FOnSubscriptionError Callbac OnErrorDelegateInternal = Callback; return this; } +USubscriptionHandle* USubscriptionBuilder::Subscribe() +{ + const TArray SqlQueries = PendingSqlQueries; + PendingSqlQueries.Empty(); + return Subscribe(SqlQueries); +} USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL) { USubscriptionHandle* Handle = NewObject(); @@ -10948,7 +10954,869 @@ USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL) } USubscriptionHandle* USubscriptionBuilder::SubscribeToAllTables() { - return Subscribe({ "SELECT * FROM * " }); + return Subscribe(FQueryBuilder::AllTablesSqlQueries()); +} + +USubscriptionBuilder* USubscriptionBuilder::AddBlueprintQuery(const FBlueprintQuery& Query) +{ + PendingSqlQueries.Add(Query.Sql); + return this; +} + +USubscriptionBuilder* USubscriptionBuilder::AddBtreeU32Query(const FBtreeU32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddIndexedSimpleEnumQuery(const FIndexedSimpleEnumQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddLargeTableQuery(const FLargeTableQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneBoolQuery(const FOneBoolQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneByteStructQuery(const FOneByteStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneConnectionIdQuery(const FOneConnectionIdQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneEnumWithPayloadQuery(const FOneEnumWithPayloadQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneEveryPrimitiveStructQuery(const FOneEveryPrimitiveStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneEveryVecStructQuery(const FOneEveryVecStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneF32Query(const FOneF32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneF64Query(const FOneF64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneI128Query(const FOneI128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneI16Query(const FOneI16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneI256Query(const FOneI256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneI32Query(const FOneI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneI64Query(const FOneI64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneI8Query(const FOneI8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneIdentityQuery(const FOneIdentityQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneSimpleEnumQuery(const FOneSimpleEnumQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneStringQuery(const FOneStringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneTimestampQuery(const FOneTimestampQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneU128Query(const FOneU128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneU16Query(const FOneU16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneU256Query(const FOneU256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneU32Query(const FOneU32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneU64Query(const FOneU64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneU8Query(const FOneU8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneUnitStructQuery(const FOneUnitStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOneUuidQuery(const FOneUuidQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOptionEveryPrimitiveStructQuery(const FOptionEveryPrimitiveStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOptionI32Query(const FOptionI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOptionIdentityQuery(const FOptionIdentityQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOptionSimpleEnumQuery(const FOptionSimpleEnumQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOptionStringQuery(const FOptionStringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOptionUuidQuery(const FOptionUuidQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddOptionVecOptionI32Query(const FOptionVecOptionI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkBoolQuery(const FPkBoolQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkConnectionIdQuery(const FPkConnectionIdQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkI128Query(const FPkI128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkI16Query(const FPkI16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkI256Query(const FPkI256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkI32Query(const FPkI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkI64Query(const FPkI64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkI8Query(const FPkI8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkIdentityQuery(const FPkIdentityQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkSimpleEnumQuery(const FPkSimpleEnumQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkStringQuery(const FPkStringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkU128Query(const FPkU128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkU16Query(const FPkU16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkU256Query(const FPkU256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkU32Query(const FPkU32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkU32TwoQuery(const FPkU32TwoQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkU64Query(const FPkU64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkU8Query(const FPkU8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkUuidQuery(const FPkUuidQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddResultEveryPrimitiveStructStringQuery(const FResultEveryPrimitiveStructStringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddResultI32StringQuery(const FResultI32StringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddResultIdentityStringQuery(const FResultIdentityStringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddResultSimpleEnumI32Query(const FResultSimpleEnumI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddResultStringI32Query(const FResultStringI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddResultVecI32StringQuery(const FResultVecI32StringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddScheduledTableQuery(const FScheduledTableQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddTableHoldsTableQuery(const FTableHoldsTableQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueBoolQuery(const FUniqueBoolQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueConnectionIdQuery(const FUniqueConnectionIdQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueI128Query(const FUniqueI128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueI16Query(const FUniqueI16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueI256Query(const FUniqueI256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueI32Query(const FUniqueI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueI64Query(const FUniqueI64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueI8Query(const FUniqueI8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueIdentityQuery(const FUniqueIdentityQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueStringQuery(const FUniqueStringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueU128Query(const FUniqueU128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueU16Query(const FUniqueU16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueU256Query(const FUniqueU256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueU32Query(const FUniqueU32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueU64Query(const FUniqueU64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueU8Query(const FUniqueU8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUniqueUuidQuery(const FUniqueUuidQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddUsersQuery(const FUsersQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecBoolQuery(const FVecBoolQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecByteStructQuery(const FVecByteStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecConnectionIdQuery(const FVecConnectionIdQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecEnumWithPayloadQuery(const FVecEnumWithPayloadQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecEveryPrimitiveStructQuery(const FVecEveryPrimitiveStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecEveryVecStructQuery(const FVecEveryVecStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecF32Query(const FVecF32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecF64Query(const FVecF64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecI128Query(const FVecI128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecI16Query(const FVecI16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecI256Query(const FVecI256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecI32Query(const FVecI32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecI64Query(const FVecI64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecI8Query(const FVecI8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecIdentityQuery(const FVecIdentityQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecSimpleEnumQuery(const FVecSimpleEnumQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecStringQuery(const FVecStringQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecTimestampQuery(const FVecTimestampQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecU128Query(const FVecU128Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecU16Query(const FVecU16Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecU256Query(const FVecU256Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecU32Query(const FVecU32Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecU64Query(const FVecU64Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecU8Query(const FVecU8Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecUnitStructQuery(const FVecUnitStructQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddVecUuidQuery(const FVecUuidQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); } USubscriptionHandle::USubscriptionHandle(UDbConnection* InConn) @@ -11031,7 +11899,7 @@ void UDbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpaceti { if (OnConnectDelegate.IsBound()) { - OnConnectDelegate.Execute(this, Identity, Token); + OnConnectDelegate.Execute(this, InIdentity, InToken); } } void UDbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error) diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/SpacetimeFullClientTests.cpp b/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/SpacetimeFullClientTests.cpp index 4d201baeee3..21651bd0f54 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/SpacetimeFullClientTests.cpp +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/SpacetimeFullClientTests.cpp @@ -102,6 +102,109 @@ static FString NormalizeDuration(const FSpacetimeDBTimeDuration &Dur) const double Seconds = static_cast(Dur.GetMicroseconds()) / 1'000'000.0; return TrimFloat(Seconds); } + +static void CompileTypedQueryBuilderSmoke(UDbConnection* Conn) +{ + Conn->SubscriptionBuilder() + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.OneU8().Where([](const FOneU8Cols& Cols) + { + return Cols.N.Eq(static_cast(1)); + }); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.OneString().Where([](const FOneStringCols& Cols) + { + return Cols.S.Eq(TEXT("typed-query-builder")); + }); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.OneTimestamp().Where([](const FOneTimestampCols& Cols) + { + return Cols.T.Gte(FSpacetimeDBTimestamp(1)); + }); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.PkU32().LeftSemijoin(Q.From.UniqueU32(), [](const FPkU32IxCols& Left, const FUniqueU32IxCols& Right) + { + return Left.N.Eq(Right.N); + }); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.UniqueU32().Where([](const FUniqueU32Cols&, const FUniqueU32IxCols& Ix) + { + return Ix.N.Eq(static_cast(7)); + }); + }); +} + +bool FBlueprintQueryBuilderBasicFlowTest::RunTest(const FString& Parameters) +{ + FOneU8Query Query = UQueryBuilderBlueprintLibrary::FromOneU8(); + TestEqual(TEXT("blueprint one_u_8 base sql"), Query.Sql, TEXT("SELECT * FROM \"one_u_8\"")); + + const FBlueprintPredicate Predicate = UQueryBuilderBlueprintLibrary::UInt8Equal( + UQueryBuilderBlueprintLibrary::OneU8N(Query), + static_cast(1)); + Query = UQueryBuilderBlueprintLibrary::OneU8Where(Query, Predicate); + TestEqual( + TEXT("blueprint one_u_8 filtered sql"), + Query.Sql, + TEXT("SELECT * FROM \"one_u_8\" WHERE (\"one_u_8\".\"n\" = 1)") + ); + + USubscriptionBuilder* Builder = NewObject(); + USubscriptionHandle* Handle = Builder->AddOneU8Query(Query)->Subscribe(); + TestNotNull(TEXT("blueprint one_u_8 handle"), Handle); + TestEqual(TEXT("blueprint one_u_8 builder sql count"), Handle->GetQuerySqls().Num(), 1); + TestEqual(TEXT("blueprint one_u_8 builder sql"), Handle->GetQuerySqls()[0], Query.Sql); + + const FString TypedDoubleSql = FString( + UTF8_TO_TCHAR( + FQueryBuilder() + .From.OneF64() + .Where([](const FOneF64Cols& Cols) + { + return Cols.F.Eq(0.123456789); + }) + .into_sql() + .c_str())); + TestEqual( + TEXT("typed one_f_64 precise sql"), + TypedDoubleSql, + TEXT("SELECT * FROM \"one_f_64\" WHERE (\"one_f_64\".\"f\" = 0.123456789)") + ); + + FOneF64Query DoubleQuery = UQueryBuilderBlueprintLibrary::FromOneF64(); + DoubleQuery = UQueryBuilderBlueprintLibrary::OneF64Where( + DoubleQuery, + UQueryBuilderBlueprintLibrary::DoubleEqual( + UQueryBuilderBlueprintLibrary::OneF64F(DoubleQuery), + 0.123456789)); + TestEqual( + TEXT("blueprint one_f_64 precise sql"), + DoubleQuery.Sql, + TEXT("SELECT * FROM \"one_f_64\" WHERE (\"one_f_64\".\"f\" = 0.123456789)") + ); + + FOneStringQuery StringQuery = UQueryBuilderBlueprintLibrary::FromOneString(); + StringQuery = UQueryBuilderBlueprintLibrary::OneStringWhere( + StringQuery, + UQueryBuilderBlueprintLibrary::StringEqual( + UQueryBuilderBlueprintLibrary::OneStringS(StringQuery), + TEXT("reuse-check"))); + USubscriptionHandle* SecondHandle = Builder->AddOneStringQuery(StringQuery)->Subscribe(); + TestNotNull(TEXT("second subscribe handle"), SecondHandle); + TestEqual(TEXT("second subscribe builder sql count"), SecondHandle->GetQuerySqls().Num(), 1); + TestEqual(TEXT("second subscribe builder sql"), SecondHandle->GetQuerySqls()[0], StringQuery.Sql); + + return true; +} // bool FInsertPrimitiveTest::RunTest(const FString &Parameters) diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h index 1fb7d093579..a24a3ff403f 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 2.0.3 (commit b6045fcc908d2846f8fb26570c2f300f5d685996). +// This was generated using spacetimedb cli version 2.0.5 (commit 047dac974526f5c5aff873026e90177270b10f38). #pragma once #include "CoreMinimal.h" @@ -227,11 +227,115 @@ #include "ModuleBindings/Types/EnumWithPayloadType.g.h" #include "ModuleBindings/Types/EveryPrimitiveStructType.g.h" #include "ModuleBindings/Types/EveryVecStructType.g.h" +#include "ModuleBindings/Types/IndexedSimpleEnumType.g.h" +#include "ModuleBindings/Types/LargeTableType.g.h" +#include "ModuleBindings/Types/OneBoolType.g.h" +#include "ModuleBindings/Types/OneByteStructType.g.h" +#include "ModuleBindings/Types/OneConnectionIdType.g.h" +#include "ModuleBindings/Types/OneEnumWithPayloadType.g.h" +#include "ModuleBindings/Types/OneEveryPrimitiveStructType.g.h" +#include "ModuleBindings/Types/OneEveryVecStructType.g.h" +#include "ModuleBindings/Types/OneF32Type.g.h" +#include "ModuleBindings/Types/OneF64Type.g.h" +#include "ModuleBindings/Types/OneI128Type.g.h" +#include "ModuleBindings/Types/OneI16Type.g.h" +#include "ModuleBindings/Types/OneI256Type.g.h" +#include "ModuleBindings/Types/OneI32Type.g.h" +#include "ModuleBindings/Types/OneI64Type.g.h" +#include "ModuleBindings/Types/OneI8Type.g.h" +#include "ModuleBindings/Types/OneIdentityType.g.h" +#include "ModuleBindings/Types/OneSimpleEnumType.g.h" +#include "ModuleBindings/Types/OneStringType.g.h" +#include "ModuleBindings/Types/OneTimestampType.g.h" +#include "ModuleBindings/Types/OneU128Type.g.h" +#include "ModuleBindings/Types/OneU16Type.g.h" +#include "ModuleBindings/Types/OneU256Type.g.h" +#include "ModuleBindings/Types/OneU32Type.g.h" +#include "ModuleBindings/Types/OneU64Type.g.h" #include "ModuleBindings/Types/OneU8Type.g.h" +#include "ModuleBindings/Types/OneUnitStructType.g.h" +#include "ModuleBindings/Types/OneUuidType.g.h" +#include "ModuleBindings/Types/OptionEveryPrimitiveStructType.g.h" +#include "ModuleBindings/Types/OptionI32Type.g.h" +#include "ModuleBindings/Types/OptionIdentityType.g.h" +#include "ModuleBindings/Types/OptionSimpleEnumType.g.h" +#include "ModuleBindings/Types/OptionStringType.g.h" +#include "ModuleBindings/Types/OptionUuidType.g.h" +#include "ModuleBindings/Types/OptionVecOptionI32Type.g.h" +#include "ModuleBindings/Types/PkBoolType.g.h" +#include "ModuleBindings/Types/PkConnectionIdType.g.h" +#include "ModuleBindings/Types/PkI128Type.g.h" +#include "ModuleBindings/Types/PkI16Type.g.h" +#include "ModuleBindings/Types/PkI256Type.g.h" +#include "ModuleBindings/Types/PkI32Type.g.h" +#include "ModuleBindings/Types/PkI64Type.g.h" +#include "ModuleBindings/Types/PkI8Type.g.h" +#include "ModuleBindings/Types/PkIdentityType.g.h" +#include "ModuleBindings/Types/PkSimpleEnumType.g.h" +#include "ModuleBindings/Types/PkStringType.g.h" +#include "ModuleBindings/Types/PkU128Type.g.h" +#include "ModuleBindings/Types/PkU16Type.g.h" +#include "ModuleBindings/Types/PkU256Type.g.h" +#include "ModuleBindings/Types/PkU32TwoType.g.h" #include "ModuleBindings/Types/PkU32Type.g.h" +#include "ModuleBindings/Types/PkU64Type.g.h" +#include "ModuleBindings/Types/PkU8Type.g.h" +#include "ModuleBindings/Types/PkUuidType.g.h" +#include "ModuleBindings/Types/ResultEveryPrimitiveStructStringType.g.h" +#include "ModuleBindings/Types/ResultI32StringType.g.h" +#include "ModuleBindings/Types/ResultIdentityStringType.g.h" +#include "ModuleBindings/Types/ResultSimpleEnumI32Type.g.h" +#include "ModuleBindings/Types/ResultStringI32Type.g.h" +#include "ModuleBindings/Types/ResultVecI32StringType.g.h" +#include "ModuleBindings/Types/ScheduledTableType.g.h" #include "ModuleBindings/Types/SimpleEnumType.g.h" +#include "ModuleBindings/Types/TableHoldsTableType.g.h" +#include "ModuleBindings/Types/UniqueBoolType.g.h" +#include "ModuleBindings/Types/UniqueConnectionIdType.g.h" +#include "ModuleBindings/Types/UniqueI128Type.g.h" +#include "ModuleBindings/Types/UniqueI16Type.g.h" +#include "ModuleBindings/Types/UniqueI256Type.g.h" +#include "ModuleBindings/Types/UniqueI32Type.g.h" +#include "ModuleBindings/Types/UniqueI64Type.g.h" +#include "ModuleBindings/Types/UniqueI8Type.g.h" +#include "ModuleBindings/Types/UniqueIdentityType.g.h" +#include "ModuleBindings/Types/UniqueStringType.g.h" +#include "ModuleBindings/Types/UniqueU128Type.g.h" +#include "ModuleBindings/Types/UniqueU16Type.g.h" +#include "ModuleBindings/Types/UniqueU256Type.g.h" +#include "ModuleBindings/Types/UniqueU32Type.g.h" +#include "ModuleBindings/Types/UniqueU64Type.g.h" +#include "ModuleBindings/Types/UniqueU8Type.g.h" +#include "ModuleBindings/Types/UniqueUuidType.g.h" #include "ModuleBindings/Types/UnitStructType.g.h" +#include "ModuleBindings/Types/UsersType.g.h" +#include "ModuleBindings/Types/VecBoolType.g.h" +#include "ModuleBindings/Types/VecByteStructType.g.h" +#include "ModuleBindings/Types/VecConnectionIdType.g.h" +#include "ModuleBindings/Types/VecEnumWithPayloadType.g.h" +#include "ModuleBindings/Types/VecEveryPrimitiveStructType.g.h" +#include "ModuleBindings/Types/VecEveryVecStructType.g.h" +#include "ModuleBindings/Types/VecF32Type.g.h" +#include "ModuleBindings/Types/VecF64Type.g.h" +#include "ModuleBindings/Types/VecI128Type.g.h" +#include "ModuleBindings/Types/VecI16Type.g.h" +#include "ModuleBindings/Types/VecI256Type.g.h" +#include "ModuleBindings/Types/VecI32Type.g.h" +#include "ModuleBindings/Types/VecI64Type.g.h" +#include "ModuleBindings/Types/VecI8Type.g.h" +#include "ModuleBindings/Types/VecIdentityType.g.h" +#include "ModuleBindings/Types/VecSimpleEnumType.g.h" +#include "ModuleBindings/Types/VecStringType.g.h" +#include "ModuleBindings/Types/VecTimestampType.g.h" +#include "ModuleBindings/Types/VecU128Type.g.h" +#include "ModuleBindings/Types/VecU16Type.g.h" +#include "ModuleBindings/Types/VecU256Type.g.h" +#include "ModuleBindings/Types/VecU32Type.g.h" +#include "ModuleBindings/Types/VecU64Type.g.h" #include "ModuleBindings/Types/VecU8Type.g.h" +#include "ModuleBindings/Types/VecUnitStructType.g.h" +#include "ModuleBindings/Types/VecUuidType.g.h" +#include "QueryBuilder/query_builder.h" #include "Types/Builtins.h" #include "SpacetimeDBClient.g.generated.h" @@ -10365,6 +10469,8369 @@ class TESTCLIENT_API URemoteProcedures : public UObject class UDbConnection* Conn; }; +// QueryBuilder types +struct TESTCLIENT_API FBTreeU32Cols; +struct TESTCLIENT_API FBTreeU32IxCols; +struct TESTCLIENT_API FIndexedSimpleEnumCols; +struct TESTCLIENT_API FIndexedSimpleEnumIxCols; +struct TESTCLIENT_API FLargeTableCols; +struct TESTCLIENT_API FLargeTableIxCols; +struct TESTCLIENT_API FOneBoolCols; +struct TESTCLIENT_API FOneBoolIxCols; +struct TESTCLIENT_API FOneByteStructCols; +struct TESTCLIENT_API FOneByteStructIxCols; +struct TESTCLIENT_API FOneConnectionIdCols; +struct TESTCLIENT_API FOneConnectionIdIxCols; +struct TESTCLIENT_API FOneEnumWithPayloadCols; +struct TESTCLIENT_API FOneEnumWithPayloadIxCols; +struct TESTCLIENT_API FOneEveryPrimitiveStructCols; +struct TESTCLIENT_API FOneEveryPrimitiveStructIxCols; +struct TESTCLIENT_API FOneEveryVecStructCols; +struct TESTCLIENT_API FOneEveryVecStructIxCols; +struct TESTCLIENT_API FOneF32Cols; +struct TESTCLIENT_API FOneF32IxCols; +struct TESTCLIENT_API FOneF64Cols; +struct TESTCLIENT_API FOneF64IxCols; +struct TESTCLIENT_API FOneI128Cols; +struct TESTCLIENT_API FOneI128IxCols; +struct TESTCLIENT_API FOneI16Cols; +struct TESTCLIENT_API FOneI16IxCols; +struct TESTCLIENT_API FOneI256Cols; +struct TESTCLIENT_API FOneI256IxCols; +struct TESTCLIENT_API FOneI32Cols; +struct TESTCLIENT_API FOneI32IxCols; +struct TESTCLIENT_API FOneI64Cols; +struct TESTCLIENT_API FOneI64IxCols; +struct TESTCLIENT_API FOneI8Cols; +struct TESTCLIENT_API FOneI8IxCols; +struct TESTCLIENT_API FOneIdentityCols; +struct TESTCLIENT_API FOneIdentityIxCols; +struct TESTCLIENT_API FOneSimpleEnumCols; +struct TESTCLIENT_API FOneSimpleEnumIxCols; +struct TESTCLIENT_API FOneStringCols; +struct TESTCLIENT_API FOneStringIxCols; +struct TESTCLIENT_API FOneTimestampCols; +struct TESTCLIENT_API FOneTimestampIxCols; +struct TESTCLIENT_API FOneU128Cols; +struct TESTCLIENT_API FOneU128IxCols; +struct TESTCLIENT_API FOneU16Cols; +struct TESTCLIENT_API FOneU16IxCols; +struct TESTCLIENT_API FOneU256Cols; +struct TESTCLIENT_API FOneU256IxCols; +struct TESTCLIENT_API FOneU32Cols; +struct TESTCLIENT_API FOneU32IxCols; +struct TESTCLIENT_API FOneU64Cols; +struct TESTCLIENT_API FOneU64IxCols; +struct TESTCLIENT_API FOneU8Cols; +struct TESTCLIENT_API FOneU8IxCols; +struct TESTCLIENT_API FOneUnitStructCols; +struct TESTCLIENT_API FOneUnitStructIxCols; +struct TESTCLIENT_API FOneUuidCols; +struct TESTCLIENT_API FOneUuidIxCols; +struct TESTCLIENT_API FOptionEveryPrimitiveStructCols; +struct TESTCLIENT_API FOptionEveryPrimitiveStructIxCols; +struct TESTCLIENT_API FOptionI32Cols; +struct TESTCLIENT_API FOptionI32IxCols; +struct TESTCLIENT_API FOptionIdentityCols; +struct TESTCLIENT_API FOptionIdentityIxCols; +struct TESTCLIENT_API FOptionSimpleEnumCols; +struct TESTCLIENT_API FOptionSimpleEnumIxCols; +struct TESTCLIENT_API FOptionStringCols; +struct TESTCLIENT_API FOptionStringIxCols; +struct TESTCLIENT_API FOptionUuidCols; +struct TESTCLIENT_API FOptionUuidIxCols; +struct TESTCLIENT_API FOptionVecOptionI32Cols; +struct TESTCLIENT_API FOptionVecOptionI32IxCols; +struct TESTCLIENT_API FPkBoolCols; +struct TESTCLIENT_API FPkBoolIxCols; +struct TESTCLIENT_API FPkConnectionIdCols; +struct TESTCLIENT_API FPkConnectionIdIxCols; +struct TESTCLIENT_API FPkI128Cols; +struct TESTCLIENT_API FPkI128IxCols; +struct TESTCLIENT_API FPkI16Cols; +struct TESTCLIENT_API FPkI16IxCols; +struct TESTCLIENT_API FPkI256Cols; +struct TESTCLIENT_API FPkI256IxCols; +struct TESTCLIENT_API FPkI32Cols; +struct TESTCLIENT_API FPkI32IxCols; +struct TESTCLIENT_API FPkI64Cols; +struct TESTCLIENT_API FPkI64IxCols; +struct TESTCLIENT_API FPkI8Cols; +struct TESTCLIENT_API FPkI8IxCols; +struct TESTCLIENT_API FPkIdentityCols; +struct TESTCLIENT_API FPkIdentityIxCols; +struct TESTCLIENT_API FPkSimpleEnumCols; +struct TESTCLIENT_API FPkSimpleEnumIxCols; +struct TESTCLIENT_API FPkStringCols; +struct TESTCLIENT_API FPkStringIxCols; +struct TESTCLIENT_API FPkU128Cols; +struct TESTCLIENT_API FPkU128IxCols; +struct TESTCLIENT_API FPkU16Cols; +struct TESTCLIENT_API FPkU16IxCols; +struct TESTCLIENT_API FPkU256Cols; +struct TESTCLIENT_API FPkU256IxCols; +struct TESTCLIENT_API FPkU32Cols; +struct TESTCLIENT_API FPkU32IxCols; +struct TESTCLIENT_API FPkU32TwoCols; +struct TESTCLIENT_API FPkU32TwoIxCols; +struct TESTCLIENT_API FPkU64Cols; +struct TESTCLIENT_API FPkU64IxCols; +struct TESTCLIENT_API FPkU8Cols; +struct TESTCLIENT_API FPkU8IxCols; +struct TESTCLIENT_API FPkUuidCols; +struct TESTCLIENT_API FPkUuidIxCols; +struct TESTCLIENT_API FResultEveryPrimitiveStructStringCols; +struct TESTCLIENT_API FResultEveryPrimitiveStructStringIxCols; +struct TESTCLIENT_API FResultI32StringCols; +struct TESTCLIENT_API FResultI32StringIxCols; +struct TESTCLIENT_API FResultIdentityStringCols; +struct TESTCLIENT_API FResultIdentityStringIxCols; +struct TESTCLIENT_API FResultSimpleEnumI32Cols; +struct TESTCLIENT_API FResultSimpleEnumI32IxCols; +struct TESTCLIENT_API FResultStringI32Cols; +struct TESTCLIENT_API FResultStringI32IxCols; +struct TESTCLIENT_API FResultVecI32StringCols; +struct TESTCLIENT_API FResultVecI32StringIxCols; +struct TESTCLIENT_API FScheduledTableCols; +struct TESTCLIENT_API FScheduledTableIxCols; +struct TESTCLIENT_API FTableHoldsTableCols; +struct TESTCLIENT_API FTableHoldsTableIxCols; +struct TESTCLIENT_API FUniqueBoolCols; +struct TESTCLIENT_API FUniqueBoolIxCols; +struct TESTCLIENT_API FUniqueConnectionIdCols; +struct TESTCLIENT_API FUniqueConnectionIdIxCols; +struct TESTCLIENT_API FUniqueI128Cols; +struct TESTCLIENT_API FUniqueI128IxCols; +struct TESTCLIENT_API FUniqueI16Cols; +struct TESTCLIENT_API FUniqueI16IxCols; +struct TESTCLIENT_API FUniqueI256Cols; +struct TESTCLIENT_API FUniqueI256IxCols; +struct TESTCLIENT_API FUniqueI32Cols; +struct TESTCLIENT_API FUniqueI32IxCols; +struct TESTCLIENT_API FUniqueI64Cols; +struct TESTCLIENT_API FUniqueI64IxCols; +struct TESTCLIENT_API FUniqueI8Cols; +struct TESTCLIENT_API FUniqueI8IxCols; +struct TESTCLIENT_API FUniqueIdentityCols; +struct TESTCLIENT_API FUniqueIdentityIxCols; +struct TESTCLIENT_API FUniqueStringCols; +struct TESTCLIENT_API FUniqueStringIxCols; +struct TESTCLIENT_API FUniqueU128Cols; +struct TESTCLIENT_API FUniqueU128IxCols; +struct TESTCLIENT_API FUniqueU16Cols; +struct TESTCLIENT_API FUniqueU16IxCols; +struct TESTCLIENT_API FUniqueU256Cols; +struct TESTCLIENT_API FUniqueU256IxCols; +struct TESTCLIENT_API FUniqueU32Cols; +struct TESTCLIENT_API FUniqueU32IxCols; +struct TESTCLIENT_API FUniqueU64Cols; +struct TESTCLIENT_API FUniqueU64IxCols; +struct TESTCLIENT_API FUniqueU8Cols; +struct TESTCLIENT_API FUniqueU8IxCols; +struct TESTCLIENT_API FUniqueUuidCols; +struct TESTCLIENT_API FUniqueUuidIxCols; +struct TESTCLIENT_API FUsersCols; +struct TESTCLIENT_API FUsersIxCols; +struct TESTCLIENT_API FVecBoolCols; +struct TESTCLIENT_API FVecBoolIxCols; +struct TESTCLIENT_API FVecByteStructCols; +struct TESTCLIENT_API FVecByteStructIxCols; +struct TESTCLIENT_API FVecConnectionIdCols; +struct TESTCLIENT_API FVecConnectionIdIxCols; +struct TESTCLIENT_API FVecEnumWithPayloadCols; +struct TESTCLIENT_API FVecEnumWithPayloadIxCols; +struct TESTCLIENT_API FVecEveryPrimitiveStructCols; +struct TESTCLIENT_API FVecEveryPrimitiveStructIxCols; +struct TESTCLIENT_API FVecEveryVecStructCols; +struct TESTCLIENT_API FVecEveryVecStructIxCols; +struct TESTCLIENT_API FVecF32Cols; +struct TESTCLIENT_API FVecF32IxCols; +struct TESTCLIENT_API FVecF64Cols; +struct TESTCLIENT_API FVecF64IxCols; +struct TESTCLIENT_API FVecI128Cols; +struct TESTCLIENT_API FVecI128IxCols; +struct TESTCLIENT_API FVecI16Cols; +struct TESTCLIENT_API FVecI16IxCols; +struct TESTCLIENT_API FVecI256Cols; +struct TESTCLIENT_API FVecI256IxCols; +struct TESTCLIENT_API FVecI32Cols; +struct TESTCLIENT_API FVecI32IxCols; +struct TESTCLIENT_API FVecI64Cols; +struct TESTCLIENT_API FVecI64IxCols; +struct TESTCLIENT_API FVecI8Cols; +struct TESTCLIENT_API FVecI8IxCols; +struct TESTCLIENT_API FVecIdentityCols; +struct TESTCLIENT_API FVecIdentityIxCols; +struct TESTCLIENT_API FVecSimpleEnumCols; +struct TESTCLIENT_API FVecSimpleEnumIxCols; +struct TESTCLIENT_API FVecStringCols; +struct TESTCLIENT_API FVecStringIxCols; +struct TESTCLIENT_API FVecTimestampCols; +struct TESTCLIENT_API FVecTimestampIxCols; +struct TESTCLIENT_API FVecU128Cols; +struct TESTCLIENT_API FVecU128IxCols; +struct TESTCLIENT_API FVecU16Cols; +struct TESTCLIENT_API FVecU16IxCols; +struct TESTCLIENT_API FVecU256Cols; +struct TESTCLIENT_API FVecU256IxCols; +struct TESTCLIENT_API FVecU32Cols; +struct TESTCLIENT_API FVecU32IxCols; +struct TESTCLIENT_API FVecU64Cols; +struct TESTCLIENT_API FVecU64IxCols; +struct TESTCLIENT_API FVecU8Cols; +struct TESTCLIENT_API FVecU8IxCols; +struct TESTCLIENT_API FVecUnitStructCols; +struct TESTCLIENT_API FVecUnitStructIxCols; +struct TESTCLIENT_API FVecUuidCols; +struct TESTCLIENT_API FVecUuidIxCols; + +struct TESTCLIENT_API FBTreeU32Cols +{ + explicit FBTreeU32Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FBTreeU32IxCols +{ + explicit FBTreeU32IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FIndexedSimpleEnumCols +{ + explicit FIndexedSimpleEnumCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FIndexedSimpleEnumIxCols +{ + explicit FIndexedSimpleEnumIxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FLargeTableCols +{ + explicit FLargeTableCols(const char* TableName) + : A(TableName, "a"), B(TableName, "b"), C(TableName, "c"), D(TableName, "d"), E(TableName, "e"), F(TableName, "f"), G(TableName, "g"), H(TableName, "h"), I(TableName, "i"), J(TableName, "j"), K(TableName, "k"), L(TableName, "l"), M(TableName, "m"), N(TableName, "n"), O(TableName, "o"), P(TableName, "p"), Q(TableName, "q"), R(TableName, "r"), S(TableName, "s"), T(TableName, "t"), U(TableName, "u"), V(TableName, "v") {} + + ::SpacetimeDB::query_builder::Col A; + ::SpacetimeDB::query_builder::Col B; + ::SpacetimeDB::query_builder::Col C; + ::SpacetimeDB::query_builder::Col D; + ::SpacetimeDB::query_builder::Col E; + ::SpacetimeDB::query_builder::Col F; + ::SpacetimeDB::query_builder::Col G; + ::SpacetimeDB::query_builder::Col H; + ::SpacetimeDB::query_builder::Col I; + ::SpacetimeDB::query_builder::Col J; + ::SpacetimeDB::query_builder::Col K; + ::SpacetimeDB::query_builder::Col L; + ::SpacetimeDB::query_builder::Col M; + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col O; + ::SpacetimeDB::query_builder::Col P; + ::SpacetimeDB::query_builder::Col Q; + ::SpacetimeDB::query_builder::Col R; + ::SpacetimeDB::query_builder::Col S; + ::SpacetimeDB::query_builder::Col T; + ::SpacetimeDB::query_builder::Col U; + ::SpacetimeDB::query_builder::Col V; +}; + +struct TESTCLIENT_API FLargeTableIxCols +{ + explicit FLargeTableIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneBoolCols +{ + explicit FOneBoolCols(const char* TableName) + : B(TableName, "b") {} + + ::SpacetimeDB::query_builder::Col B; +}; + +struct TESTCLIENT_API FOneBoolIxCols +{ + explicit FOneBoolIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneByteStructCols +{ + explicit FOneByteStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col S; +}; + +struct TESTCLIENT_API FOneByteStructIxCols +{ + explicit FOneByteStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneConnectionIdCols +{ + explicit FOneConnectionIdCols(const char* TableName) + : A(TableName, "a") {} + + ::SpacetimeDB::query_builder::Col A; +}; + +struct TESTCLIENT_API FOneConnectionIdIxCols +{ + explicit FOneConnectionIdIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneEnumWithPayloadCols +{ + explicit FOneEnumWithPayloadCols(const char* TableName) + : E(TableName, "e") {} + + ::SpacetimeDB::query_builder::Col E; +}; + +struct TESTCLIENT_API FOneEnumWithPayloadIxCols +{ + explicit FOneEnumWithPayloadIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneEveryPrimitiveStructCols +{ + explicit FOneEveryPrimitiveStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col S; +}; + +struct TESTCLIENT_API FOneEveryPrimitiveStructIxCols +{ + explicit FOneEveryPrimitiveStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneEveryVecStructCols +{ + explicit FOneEveryVecStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col S; +}; + +struct TESTCLIENT_API FOneEveryVecStructIxCols +{ + explicit FOneEveryVecStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneF32Cols +{ + explicit FOneF32Cols(const char* TableName) + : F(TableName, "f") {} + + ::SpacetimeDB::query_builder::Col F; +}; + +struct TESTCLIENT_API FOneF32IxCols +{ + explicit FOneF32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneF64Cols +{ + explicit FOneF64Cols(const char* TableName) + : F(TableName, "f") {} + + ::SpacetimeDB::query_builder::Col F; +}; + +struct TESTCLIENT_API FOneF64IxCols +{ + explicit FOneF64IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneI128Cols +{ + explicit FOneI128Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneI128IxCols +{ + explicit FOneI128IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneI16Cols +{ + explicit FOneI16Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneI16IxCols +{ + explicit FOneI16IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneI256Cols +{ + explicit FOneI256Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneI256IxCols +{ + explicit FOneI256IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneI32Cols +{ + explicit FOneI32Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneI32IxCols +{ + explicit FOneI32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneI64Cols +{ + explicit FOneI64Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneI64IxCols +{ + explicit FOneI64IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneI8Cols +{ + explicit FOneI8Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneI8IxCols +{ + explicit FOneI8IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneIdentityCols +{ + explicit FOneIdentityCols(const char* TableName) + : I(TableName, "i") {} + + ::SpacetimeDB::query_builder::Col I; +}; + +struct TESTCLIENT_API FOneIdentityIxCols +{ + explicit FOneIdentityIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneSimpleEnumCols +{ + explicit FOneSimpleEnumCols(const char* TableName) + : E(TableName, "e") {} + + ::SpacetimeDB::query_builder::Col E; +}; + +struct TESTCLIENT_API FOneSimpleEnumIxCols +{ + explicit FOneSimpleEnumIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneStringCols +{ + explicit FOneStringCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col S; +}; + +struct TESTCLIENT_API FOneStringIxCols +{ + explicit FOneStringIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneTimestampCols +{ + explicit FOneTimestampCols(const char* TableName) + : T(TableName, "t") {} + + ::SpacetimeDB::query_builder::Col T; +}; + +struct TESTCLIENT_API FOneTimestampIxCols +{ + explicit FOneTimestampIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneU128Cols +{ + explicit FOneU128Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneU128IxCols +{ + explicit FOneU128IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneU16Cols +{ + explicit FOneU16Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneU16IxCols +{ + explicit FOneU16IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneU256Cols +{ + explicit FOneU256Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneU256IxCols +{ + explicit FOneU256IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneU32Cols +{ + explicit FOneU32Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneU32IxCols +{ + explicit FOneU32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneU64Cols +{ + explicit FOneU64Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneU64IxCols +{ + explicit FOneU64IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneU8Cols +{ + explicit FOneU8Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOneU8IxCols +{ + explicit FOneU8IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneUnitStructCols +{ + explicit FOneUnitStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col S; +}; + +struct TESTCLIENT_API FOneUnitStructIxCols +{ + explicit FOneUnitStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOneUuidCols +{ + explicit FOneUuidCols(const char* TableName) + : U(TableName, "u") {} + + ::SpacetimeDB::query_builder::Col U; +}; + +struct TESTCLIENT_API FOneUuidIxCols +{ + explicit FOneUuidIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOptionEveryPrimitiveStructCols +{ + explicit FOptionEveryPrimitiveStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col S; +}; + +struct TESTCLIENT_API FOptionEveryPrimitiveStructIxCols +{ + explicit FOptionEveryPrimitiveStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOptionI32Cols +{ + explicit FOptionI32Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col N; +}; + +struct TESTCLIENT_API FOptionI32IxCols +{ + explicit FOptionI32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOptionIdentityCols +{ + explicit FOptionIdentityCols(const char* TableName) + : I(TableName, "i") {} + + ::SpacetimeDB::query_builder::Col I; +}; + +struct TESTCLIENT_API FOptionIdentityIxCols +{ + explicit FOptionIdentityIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOptionSimpleEnumCols +{ + explicit FOptionSimpleEnumCols(const char* TableName) + : E(TableName, "e") {} + + ::SpacetimeDB::query_builder::Col E; +}; + +struct TESTCLIENT_API FOptionSimpleEnumIxCols +{ + explicit FOptionSimpleEnumIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOptionStringCols +{ + explicit FOptionStringCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col S; +}; + +struct TESTCLIENT_API FOptionStringIxCols +{ + explicit FOptionStringIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOptionUuidCols +{ + explicit FOptionUuidCols(const char* TableName) + : U(TableName, "u") {} + + ::SpacetimeDB::query_builder::Col U; +}; + +struct TESTCLIENT_API FOptionUuidIxCols +{ + explicit FOptionUuidIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FOptionVecOptionI32Cols +{ + explicit FOptionVecOptionI32Cols(const char* TableName) + : V(TableName, "v") {} + + ::SpacetimeDB::query_builder::Col V; +}; + +struct TESTCLIENT_API FOptionVecOptionI32IxCols +{ + explicit FOptionVecOptionI32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkBoolCols +{ + explicit FPkBoolCols(const char* TableName) + : B(TableName, "b"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col B; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkBoolIxCols +{ + explicit FPkBoolIxCols(const char* TableName) + : B(TableName, "b") {} + + ::SpacetimeDB::query_builder::IxCol B; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkConnectionIdCols +{ + explicit FPkConnectionIdCols(const char* TableName) + : A(TableName, "a"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col A; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkConnectionIdIxCols +{ + explicit FPkConnectionIdIxCols(const char* TableName) + : A(TableName, "a") {} + + ::SpacetimeDB::query_builder::IxCol A; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkI128Cols +{ + explicit FPkI128Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkI128IxCols +{ + explicit FPkI128IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkI16Cols +{ + explicit FPkI16Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkI16IxCols +{ + explicit FPkI16IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkI256Cols +{ + explicit FPkI256Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkI256IxCols +{ + explicit FPkI256IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkI32Cols +{ + explicit FPkI32Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkI32IxCols +{ + explicit FPkI32IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkI64Cols +{ + explicit FPkI64Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkI64IxCols +{ + explicit FPkI64IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkI8Cols +{ + explicit FPkI8Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkI8IxCols +{ + explicit FPkI8IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkIdentityCols +{ + explicit FPkIdentityCols(const char* TableName) + : I(TableName, "i"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col I; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkIdentityIxCols +{ + explicit FPkIdentityIxCols(const char* TableName) + : I(TableName, "i") {} + + ::SpacetimeDB::query_builder::IxCol I; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkSimpleEnumCols +{ + explicit FPkSimpleEnumCols(const char* TableName) + : A(TableName, "a"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col A; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkSimpleEnumIxCols +{ + explicit FPkSimpleEnumIxCols(const char* TableName) + : A(TableName, "a") {} + + ::SpacetimeDB::query_builder::IxCol A; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkStringCols +{ + explicit FPkStringCols(const char* TableName) + : S(TableName, "s"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col S; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkStringIxCols +{ + explicit FPkStringIxCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::IxCol S; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkU128Cols +{ + explicit FPkU128Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkU128IxCols +{ + explicit FPkU128IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkU16Cols +{ + explicit FPkU16Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkU16IxCols +{ + explicit FPkU16IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkU256Cols +{ + explicit FPkU256Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkU256IxCols +{ + explicit FPkU256IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkU32Cols +{ + explicit FPkU32Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkU32IxCols +{ + explicit FPkU32IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkU32TwoCols +{ + explicit FPkU32TwoCols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkU32TwoIxCols +{ + explicit FPkU32TwoIxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkU64Cols +{ + explicit FPkU64Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkU64IxCols +{ + explicit FPkU64IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkU8Cols +{ + explicit FPkU8Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkU8IxCols +{ + explicit FPkU8IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FPkUuidCols +{ + explicit FPkUuidCols(const char* TableName) + : U(TableName, "u"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col U; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FPkUuidIxCols +{ + explicit FPkUuidIxCols(const char* TableName) + : U(TableName, "u") {} + + ::SpacetimeDB::query_builder::IxCol U; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FResultEveryPrimitiveStructStringCols +{ + explicit FResultEveryPrimitiveStructStringCols(const char* TableName) + : R(TableName, "r") {} + + ::SpacetimeDB::query_builder::Col R; +}; + +struct TESTCLIENT_API FResultEveryPrimitiveStructStringIxCols +{ + explicit FResultEveryPrimitiveStructStringIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FResultI32StringCols +{ + explicit FResultI32StringCols(const char* TableName) + : R(TableName, "r") {} + + ::SpacetimeDB::query_builder::Col R; +}; + +struct TESTCLIENT_API FResultI32StringIxCols +{ + explicit FResultI32StringIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FResultIdentityStringCols +{ + explicit FResultIdentityStringCols(const char* TableName) + : R(TableName, "r") {} + + ::SpacetimeDB::query_builder::Col R; +}; + +struct TESTCLIENT_API FResultIdentityStringIxCols +{ + explicit FResultIdentityStringIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FResultSimpleEnumI32Cols +{ + explicit FResultSimpleEnumI32Cols(const char* TableName) + : R(TableName, "r") {} + + ::SpacetimeDB::query_builder::Col R; +}; + +struct TESTCLIENT_API FResultSimpleEnumI32IxCols +{ + explicit FResultSimpleEnumI32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FResultStringI32Cols +{ + explicit FResultStringI32Cols(const char* TableName) + : R(TableName, "r") {} + + ::SpacetimeDB::query_builder::Col R; +}; + +struct TESTCLIENT_API FResultStringI32IxCols +{ + explicit FResultStringI32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FResultVecI32StringCols +{ + explicit FResultVecI32StringCols(const char* TableName) + : R(TableName, "r") {} + + ::SpacetimeDB::query_builder::Col R; +}; + +struct TESTCLIENT_API FResultVecI32StringIxCols +{ + explicit FResultVecI32StringIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FScheduledTableCols +{ + explicit FScheduledTableCols(const char* TableName) + : ScheduledId(TableName, "scheduled_id"), ScheduledAt(TableName, "scheduled_at"), Text(TableName, "text") {} + + ::SpacetimeDB::query_builder::Col ScheduledId; + ::SpacetimeDB::query_builder::Col ScheduledAt; + ::SpacetimeDB::query_builder::Col Text; +}; + +struct TESTCLIENT_API FScheduledTableIxCols +{ + explicit FScheduledTableIxCols(const char* TableName) + : ScheduledId(TableName, "scheduled_id") {} + + ::SpacetimeDB::query_builder::IxCol ScheduledId; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FTableHoldsTableCols +{ + explicit FTableHoldsTableCols(const char* TableName) + : A(TableName, "a"), B(TableName, "b") {} + + ::SpacetimeDB::query_builder::Col A; + ::SpacetimeDB::query_builder::Col B; +}; + +struct TESTCLIENT_API FTableHoldsTableIxCols +{ + explicit FTableHoldsTableIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueBoolCols +{ + explicit FUniqueBoolCols(const char* TableName) + : B(TableName, "b"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col B; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueBoolIxCols +{ + explicit FUniqueBoolIxCols(const char* TableName) + : B(TableName, "b") {} + + ::SpacetimeDB::query_builder::IxCol B; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueConnectionIdCols +{ + explicit FUniqueConnectionIdCols(const char* TableName) + : A(TableName, "a"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col A; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueConnectionIdIxCols +{ + explicit FUniqueConnectionIdIxCols(const char* TableName) + : A(TableName, "a") {} + + ::SpacetimeDB::query_builder::IxCol A; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueI128Cols +{ + explicit FUniqueI128Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueI128IxCols +{ + explicit FUniqueI128IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueI16Cols +{ + explicit FUniqueI16Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueI16IxCols +{ + explicit FUniqueI16IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueI256Cols +{ + explicit FUniqueI256Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueI256IxCols +{ + explicit FUniqueI256IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueI32Cols +{ + explicit FUniqueI32Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueI32IxCols +{ + explicit FUniqueI32IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueI64Cols +{ + explicit FUniqueI64Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueI64IxCols +{ + explicit FUniqueI64IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueI8Cols +{ + explicit FUniqueI8Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueI8IxCols +{ + explicit FUniqueI8IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueIdentityCols +{ + explicit FUniqueIdentityCols(const char* TableName) + : I(TableName, "i"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col I; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueIdentityIxCols +{ + explicit FUniqueIdentityIxCols(const char* TableName) + : I(TableName, "i") {} + + ::SpacetimeDB::query_builder::IxCol I; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueStringCols +{ + explicit FUniqueStringCols(const char* TableName) + : S(TableName, "s"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col S; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueStringIxCols +{ + explicit FUniqueStringIxCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::IxCol S; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueU128Cols +{ + explicit FUniqueU128Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueU128IxCols +{ + explicit FUniqueU128IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueU16Cols +{ + explicit FUniqueU16Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueU16IxCols +{ + explicit FUniqueU16IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueU256Cols +{ + explicit FUniqueU256Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueU256IxCols +{ + explicit FUniqueU256IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueU32Cols +{ + explicit FUniqueU32Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueU32IxCols +{ + explicit FUniqueU32IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueU64Cols +{ + explicit FUniqueU64Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueU64IxCols +{ + explicit FUniqueU64IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueU8Cols +{ + explicit FUniqueU8Cols(const char* TableName) + : N(TableName, "n"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col N; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueU8IxCols +{ + explicit FUniqueU8IxCols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::IxCol N; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUniqueUuidCols +{ + explicit FUniqueUuidCols(const char* TableName) + : U(TableName, "u"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col U; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTCLIENT_API FUniqueUuidIxCols +{ + explicit FUniqueUuidIxCols(const char* TableName) + : U(TableName, "u") {} + + ::SpacetimeDB::query_builder::IxCol U; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FUsersCols +{ + explicit FUsersCols(const char* TableName) + : Identity(TableName, "identity"), Name(TableName, "name") {} + + ::SpacetimeDB::query_builder::Col Identity; + ::SpacetimeDB::query_builder::Col Name; +}; + +struct TESTCLIENT_API FUsersIxCols +{ + explicit FUsersIxCols(const char* TableName) + : Identity(TableName, "identity") {} + + ::SpacetimeDB::query_builder::IxCol Identity; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecBoolCols +{ + explicit FVecBoolCols(const char* TableName) + : B(TableName, "b") {} + + ::SpacetimeDB::query_builder::Col> B; +}; + +struct TESTCLIENT_API FVecBoolIxCols +{ + explicit FVecBoolIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecByteStructCols +{ + explicit FVecByteStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col> S; +}; + +struct TESTCLIENT_API FVecByteStructIxCols +{ + explicit FVecByteStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecConnectionIdCols +{ + explicit FVecConnectionIdCols(const char* TableName) + : A(TableName, "a") {} + + ::SpacetimeDB::query_builder::Col> A; +}; + +struct TESTCLIENT_API FVecConnectionIdIxCols +{ + explicit FVecConnectionIdIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecEnumWithPayloadCols +{ + explicit FVecEnumWithPayloadCols(const char* TableName) + : E(TableName, "e") {} + + ::SpacetimeDB::query_builder::Col> E; +}; + +struct TESTCLIENT_API FVecEnumWithPayloadIxCols +{ + explicit FVecEnumWithPayloadIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecEveryPrimitiveStructCols +{ + explicit FVecEveryPrimitiveStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col> S; +}; + +struct TESTCLIENT_API FVecEveryPrimitiveStructIxCols +{ + explicit FVecEveryPrimitiveStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecEveryVecStructCols +{ + explicit FVecEveryVecStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col> S; +}; + +struct TESTCLIENT_API FVecEveryVecStructIxCols +{ + explicit FVecEveryVecStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecF32Cols +{ + explicit FVecF32Cols(const char* TableName) + : F(TableName, "f") {} + + ::SpacetimeDB::query_builder::Col> F; +}; + +struct TESTCLIENT_API FVecF32IxCols +{ + explicit FVecF32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecF64Cols +{ + explicit FVecF64Cols(const char* TableName) + : F(TableName, "f") {} + + ::SpacetimeDB::query_builder::Col> F; +}; + +struct TESTCLIENT_API FVecF64IxCols +{ + explicit FVecF64IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecI128Cols +{ + explicit FVecI128Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecI128IxCols +{ + explicit FVecI128IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecI16Cols +{ + explicit FVecI16Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecI16IxCols +{ + explicit FVecI16IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecI256Cols +{ + explicit FVecI256Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecI256IxCols +{ + explicit FVecI256IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecI32Cols +{ + explicit FVecI32Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecI32IxCols +{ + explicit FVecI32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecI64Cols +{ + explicit FVecI64Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecI64IxCols +{ + explicit FVecI64IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecI8Cols +{ + explicit FVecI8Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecI8IxCols +{ + explicit FVecI8IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecIdentityCols +{ + explicit FVecIdentityCols(const char* TableName) + : I(TableName, "i") {} + + ::SpacetimeDB::query_builder::Col> I; +}; + +struct TESTCLIENT_API FVecIdentityIxCols +{ + explicit FVecIdentityIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecSimpleEnumCols +{ + explicit FVecSimpleEnumCols(const char* TableName) + : E(TableName, "e") {} + + ::SpacetimeDB::query_builder::Col> E; +}; + +struct TESTCLIENT_API FVecSimpleEnumIxCols +{ + explicit FVecSimpleEnumIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecStringCols +{ + explicit FVecStringCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col> S; +}; + +struct TESTCLIENT_API FVecStringIxCols +{ + explicit FVecStringIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecTimestampCols +{ + explicit FVecTimestampCols(const char* TableName) + : T(TableName, "t") {} + + ::SpacetimeDB::query_builder::Col> T; +}; + +struct TESTCLIENT_API FVecTimestampIxCols +{ + explicit FVecTimestampIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecU128Cols +{ + explicit FVecU128Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecU128IxCols +{ + explicit FVecU128IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecU16Cols +{ + explicit FVecU16Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecU16IxCols +{ + explicit FVecU16IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecU256Cols +{ + explicit FVecU256Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecU256IxCols +{ + explicit FVecU256IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecU32Cols +{ + explicit FVecU32Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecU32IxCols +{ + explicit FVecU32IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecU64Cols +{ + explicit FVecU64Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecU64IxCols +{ + explicit FVecU64IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecU8Cols +{ + explicit FVecU8Cols(const char* TableName) + : N(TableName, "n") {} + + ::SpacetimeDB::query_builder::Col> N; +}; + +struct TESTCLIENT_API FVecU8IxCols +{ + explicit FVecU8IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecUnitStructCols +{ + explicit FVecUnitStructCols(const char* TableName) + : S(TableName, "s") {} + + ::SpacetimeDB::query_builder::Col> S; +}; + +struct TESTCLIENT_API FVecUnitStructIxCols +{ + explicit FVecUnitStructIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FVecUuidCols +{ + explicit FVecUuidCols(const char* TableName) + : U(TableName, "u") {} + + ::SpacetimeDB::query_builder::Col> U; +}; + +struct TESTCLIENT_API FVecUuidIxCols +{ + explicit FVecUuidIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTCLIENT_API FFrom +{ + [[nodiscard]] ::SpacetimeDB::query_builder::Table BtreeU32() const { return ::SpacetimeDB::query_builder::Table("btree_u_32", FBTreeU32Cols("btree_u_32"), FBTreeU32IxCols("btree_u_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table IndexedSimpleEnum() const { return ::SpacetimeDB::query_builder::Table("indexed_simple_enum", FIndexedSimpleEnumCols("indexed_simple_enum"), FIndexedSimpleEnumIxCols("indexed_simple_enum")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table LargeTable() const { return ::SpacetimeDB::query_builder::Table("large_table", FLargeTableCols("large_table"), FLargeTableIxCols("large_table")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneBool() const { return ::SpacetimeDB::query_builder::Table("one_bool", FOneBoolCols("one_bool"), FOneBoolIxCols("one_bool")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneByteStruct() const { return ::SpacetimeDB::query_builder::Table("one_byte_struct", FOneByteStructCols("one_byte_struct"), FOneByteStructIxCols("one_byte_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneConnectionId() const { return ::SpacetimeDB::query_builder::Table("one_connection_id", FOneConnectionIdCols("one_connection_id"), FOneConnectionIdIxCols("one_connection_id")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneEnumWithPayload() const { return ::SpacetimeDB::query_builder::Table("one_enum_with_payload", FOneEnumWithPayloadCols("one_enum_with_payload"), FOneEnumWithPayloadIxCols("one_enum_with_payload")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneEveryPrimitiveStruct() const { return ::SpacetimeDB::query_builder::Table("one_every_primitive_struct", FOneEveryPrimitiveStructCols("one_every_primitive_struct"), FOneEveryPrimitiveStructIxCols("one_every_primitive_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneEveryVecStruct() const { return ::SpacetimeDB::query_builder::Table("one_every_vec_struct", FOneEveryVecStructCols("one_every_vec_struct"), FOneEveryVecStructIxCols("one_every_vec_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneF32() const { return ::SpacetimeDB::query_builder::Table("one_f_32", FOneF32Cols("one_f_32"), FOneF32IxCols("one_f_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneF64() const { return ::SpacetimeDB::query_builder::Table("one_f_64", FOneF64Cols("one_f_64"), FOneF64IxCols("one_f_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneI128() const { return ::SpacetimeDB::query_builder::Table("one_i_128", FOneI128Cols("one_i_128"), FOneI128IxCols("one_i_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneI16() const { return ::SpacetimeDB::query_builder::Table("one_i_16", FOneI16Cols("one_i_16"), FOneI16IxCols("one_i_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneI256() const { return ::SpacetimeDB::query_builder::Table("one_i_256", FOneI256Cols("one_i_256"), FOneI256IxCols("one_i_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneI32() const { return ::SpacetimeDB::query_builder::Table("one_i_32", FOneI32Cols("one_i_32"), FOneI32IxCols("one_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneI64() const { return ::SpacetimeDB::query_builder::Table("one_i_64", FOneI64Cols("one_i_64"), FOneI64IxCols("one_i_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneI8() const { return ::SpacetimeDB::query_builder::Table("one_i_8", FOneI8Cols("one_i_8"), FOneI8IxCols("one_i_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneIdentity() const { return ::SpacetimeDB::query_builder::Table("one_identity", FOneIdentityCols("one_identity"), FOneIdentityIxCols("one_identity")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneSimpleEnum() const { return ::SpacetimeDB::query_builder::Table("one_simple_enum", FOneSimpleEnumCols("one_simple_enum"), FOneSimpleEnumIxCols("one_simple_enum")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneString() const { return ::SpacetimeDB::query_builder::Table("one_string", FOneStringCols("one_string"), FOneStringIxCols("one_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneTimestamp() const { return ::SpacetimeDB::query_builder::Table("one_timestamp", FOneTimestampCols("one_timestamp"), FOneTimestampIxCols("one_timestamp")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneU128() const { return ::SpacetimeDB::query_builder::Table("one_u_128", FOneU128Cols("one_u_128"), FOneU128IxCols("one_u_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneU16() const { return ::SpacetimeDB::query_builder::Table("one_u_16", FOneU16Cols("one_u_16"), FOneU16IxCols("one_u_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneU256() const { return ::SpacetimeDB::query_builder::Table("one_u_256", FOneU256Cols("one_u_256"), FOneU256IxCols("one_u_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneU32() const { return ::SpacetimeDB::query_builder::Table("one_u_32", FOneU32Cols("one_u_32"), FOneU32IxCols("one_u_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneU64() const { return ::SpacetimeDB::query_builder::Table("one_u_64", FOneU64Cols("one_u_64"), FOneU64IxCols("one_u_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneU8() const { return ::SpacetimeDB::query_builder::Table("one_u_8", FOneU8Cols("one_u_8"), FOneU8IxCols("one_u_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneUnitStruct() const { return ::SpacetimeDB::query_builder::Table("one_unit_struct", FOneUnitStructCols("one_unit_struct"), FOneUnitStructIxCols("one_unit_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OneUuid() const { return ::SpacetimeDB::query_builder::Table("one_uuid", FOneUuidCols("one_uuid"), FOneUuidIxCols("one_uuid")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OptionEveryPrimitiveStruct() const { return ::SpacetimeDB::query_builder::Table("option_every_primitive_struct", FOptionEveryPrimitiveStructCols("option_every_primitive_struct"), FOptionEveryPrimitiveStructIxCols("option_every_primitive_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OptionI32() const { return ::SpacetimeDB::query_builder::Table("option_i_32", FOptionI32Cols("option_i_32"), FOptionI32IxCols("option_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OptionIdentity() const { return ::SpacetimeDB::query_builder::Table("option_identity", FOptionIdentityCols("option_identity"), FOptionIdentityIxCols("option_identity")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OptionSimpleEnum() const { return ::SpacetimeDB::query_builder::Table("option_simple_enum", FOptionSimpleEnumCols("option_simple_enum"), FOptionSimpleEnumIxCols("option_simple_enum")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OptionString() const { return ::SpacetimeDB::query_builder::Table("option_string", FOptionStringCols("option_string"), FOptionStringIxCols("option_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OptionUuid() const { return ::SpacetimeDB::query_builder::Table("option_uuid", FOptionUuidCols("option_uuid"), FOptionUuidIxCols("option_uuid")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table OptionVecOptionI32() const { return ::SpacetimeDB::query_builder::Table("option_vec_option_i_32", FOptionVecOptionI32Cols("option_vec_option_i_32"), FOptionVecOptionI32IxCols("option_vec_option_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkBool() const { return ::SpacetimeDB::query_builder::Table("pk_bool", FPkBoolCols("pk_bool"), FPkBoolIxCols("pk_bool")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkConnectionId() const { return ::SpacetimeDB::query_builder::Table("pk_connection_id", FPkConnectionIdCols("pk_connection_id"), FPkConnectionIdIxCols("pk_connection_id")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkI128() const { return ::SpacetimeDB::query_builder::Table("pk_i_128", FPkI128Cols("pk_i_128"), FPkI128IxCols("pk_i_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkI16() const { return ::SpacetimeDB::query_builder::Table("pk_i_16", FPkI16Cols("pk_i_16"), FPkI16IxCols("pk_i_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkI256() const { return ::SpacetimeDB::query_builder::Table("pk_i_256", FPkI256Cols("pk_i_256"), FPkI256IxCols("pk_i_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkI32() const { return ::SpacetimeDB::query_builder::Table("pk_i_32", FPkI32Cols("pk_i_32"), FPkI32IxCols("pk_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkI64() const { return ::SpacetimeDB::query_builder::Table("pk_i_64", FPkI64Cols("pk_i_64"), FPkI64IxCols("pk_i_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkI8() const { return ::SpacetimeDB::query_builder::Table("pk_i_8", FPkI8Cols("pk_i_8"), FPkI8IxCols("pk_i_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkIdentity() const { return ::SpacetimeDB::query_builder::Table("pk_identity", FPkIdentityCols("pk_identity"), FPkIdentityIxCols("pk_identity")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkSimpleEnum() const { return ::SpacetimeDB::query_builder::Table("pk_simple_enum", FPkSimpleEnumCols("pk_simple_enum"), FPkSimpleEnumIxCols("pk_simple_enum")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkString() const { return ::SpacetimeDB::query_builder::Table("pk_string", FPkStringCols("pk_string"), FPkStringIxCols("pk_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkU128() const { return ::SpacetimeDB::query_builder::Table("pk_u_128", FPkU128Cols("pk_u_128"), FPkU128IxCols("pk_u_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkU16() const { return ::SpacetimeDB::query_builder::Table("pk_u_16", FPkU16Cols("pk_u_16"), FPkU16IxCols("pk_u_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkU256() const { return ::SpacetimeDB::query_builder::Table("pk_u_256", FPkU256Cols("pk_u_256"), FPkU256IxCols("pk_u_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkU32() const { return ::SpacetimeDB::query_builder::Table("pk_u_32", FPkU32Cols("pk_u_32"), FPkU32IxCols("pk_u_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkU32Two() const { return ::SpacetimeDB::query_builder::Table("pk_u_32_two", FPkU32TwoCols("pk_u_32_two"), FPkU32TwoIxCols("pk_u_32_two")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkU64() const { return ::SpacetimeDB::query_builder::Table("pk_u_64", FPkU64Cols("pk_u_64"), FPkU64IxCols("pk_u_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkU8() const { return ::SpacetimeDB::query_builder::Table("pk_u_8", FPkU8Cols("pk_u_8"), FPkU8IxCols("pk_u_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkUuid() const { return ::SpacetimeDB::query_builder::Table("pk_uuid", FPkUuidCols("pk_uuid"), FPkUuidIxCols("pk_uuid")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ResultEveryPrimitiveStructString() const { return ::SpacetimeDB::query_builder::Table("result_every_primitive_struct_string", FResultEveryPrimitiveStructStringCols("result_every_primitive_struct_string"), FResultEveryPrimitiveStructStringIxCols("result_every_primitive_struct_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ResultI32String() const { return ::SpacetimeDB::query_builder::Table("result_i_32_string", FResultI32StringCols("result_i_32_string"), FResultI32StringIxCols("result_i_32_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ResultIdentityString() const { return ::SpacetimeDB::query_builder::Table("result_identity_string", FResultIdentityStringCols("result_identity_string"), FResultIdentityStringIxCols("result_identity_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ResultSimpleEnumI32() const { return ::SpacetimeDB::query_builder::Table("result_simple_enum_i_32", FResultSimpleEnumI32Cols("result_simple_enum_i_32"), FResultSimpleEnumI32IxCols("result_simple_enum_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ResultStringI32() const { return ::SpacetimeDB::query_builder::Table("result_string_i_32", FResultStringI32Cols("result_string_i_32"), FResultStringI32IxCols("result_string_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ResultVecI32String() const { return ::SpacetimeDB::query_builder::Table("result_vec_i_32_string", FResultVecI32StringCols("result_vec_i_32_string"), FResultVecI32StringIxCols("result_vec_i_32_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ScheduledTable() const { return ::SpacetimeDB::query_builder::Table("scheduled_table", FScheduledTableCols("scheduled_table"), FScheduledTableIxCols("scheduled_table")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table TableHoldsTable() const { return ::SpacetimeDB::query_builder::Table("table_holds_table", FTableHoldsTableCols("table_holds_table"), FTableHoldsTableIxCols("table_holds_table")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueBool() const { return ::SpacetimeDB::query_builder::Table("unique_bool", FUniqueBoolCols("unique_bool"), FUniqueBoolIxCols("unique_bool")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueConnectionId() const { return ::SpacetimeDB::query_builder::Table("unique_connection_id", FUniqueConnectionIdCols("unique_connection_id"), FUniqueConnectionIdIxCols("unique_connection_id")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueI128() const { return ::SpacetimeDB::query_builder::Table("unique_i_128", FUniqueI128Cols("unique_i_128"), FUniqueI128IxCols("unique_i_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueI16() const { return ::SpacetimeDB::query_builder::Table("unique_i_16", FUniqueI16Cols("unique_i_16"), FUniqueI16IxCols("unique_i_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueI256() const { return ::SpacetimeDB::query_builder::Table("unique_i_256", FUniqueI256Cols("unique_i_256"), FUniqueI256IxCols("unique_i_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueI32() const { return ::SpacetimeDB::query_builder::Table("unique_i_32", FUniqueI32Cols("unique_i_32"), FUniqueI32IxCols("unique_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueI64() const { return ::SpacetimeDB::query_builder::Table("unique_i_64", FUniqueI64Cols("unique_i_64"), FUniqueI64IxCols("unique_i_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueI8() const { return ::SpacetimeDB::query_builder::Table("unique_i_8", FUniqueI8Cols("unique_i_8"), FUniqueI8IxCols("unique_i_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueIdentity() const { return ::SpacetimeDB::query_builder::Table("unique_identity", FUniqueIdentityCols("unique_identity"), FUniqueIdentityIxCols("unique_identity")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueString() const { return ::SpacetimeDB::query_builder::Table("unique_string", FUniqueStringCols("unique_string"), FUniqueStringIxCols("unique_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueU128() const { return ::SpacetimeDB::query_builder::Table("unique_u_128", FUniqueU128Cols("unique_u_128"), FUniqueU128IxCols("unique_u_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueU16() const { return ::SpacetimeDB::query_builder::Table("unique_u_16", FUniqueU16Cols("unique_u_16"), FUniqueU16IxCols("unique_u_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueU256() const { return ::SpacetimeDB::query_builder::Table("unique_u_256", FUniqueU256Cols("unique_u_256"), FUniqueU256IxCols("unique_u_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueU32() const { return ::SpacetimeDB::query_builder::Table("unique_u_32", FUniqueU32Cols("unique_u_32"), FUniqueU32IxCols("unique_u_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueU64() const { return ::SpacetimeDB::query_builder::Table("unique_u_64", FUniqueU64Cols("unique_u_64"), FUniqueU64IxCols("unique_u_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueU8() const { return ::SpacetimeDB::query_builder::Table("unique_u_8", FUniqueU8Cols("unique_u_8"), FUniqueU8IxCols("unique_u_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table UniqueUuid() const { return ::SpacetimeDB::query_builder::Table("unique_uuid", FUniqueUuidCols("unique_uuid"), FUniqueUuidIxCols("unique_uuid")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table Users() const { return ::SpacetimeDB::query_builder::Table("users", FUsersCols("users"), FUsersIxCols("users")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecBool() const { return ::SpacetimeDB::query_builder::Table("vec_bool", FVecBoolCols("vec_bool"), FVecBoolIxCols("vec_bool")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecByteStruct() const { return ::SpacetimeDB::query_builder::Table("vec_byte_struct", FVecByteStructCols("vec_byte_struct"), FVecByteStructIxCols("vec_byte_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecConnectionId() const { return ::SpacetimeDB::query_builder::Table("vec_connection_id", FVecConnectionIdCols("vec_connection_id"), FVecConnectionIdIxCols("vec_connection_id")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecEnumWithPayload() const { return ::SpacetimeDB::query_builder::Table("vec_enum_with_payload", FVecEnumWithPayloadCols("vec_enum_with_payload"), FVecEnumWithPayloadIxCols("vec_enum_with_payload")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecEveryPrimitiveStruct() const { return ::SpacetimeDB::query_builder::Table("vec_every_primitive_struct", FVecEveryPrimitiveStructCols("vec_every_primitive_struct"), FVecEveryPrimitiveStructIxCols("vec_every_primitive_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecEveryVecStruct() const { return ::SpacetimeDB::query_builder::Table("vec_every_vec_struct", FVecEveryVecStructCols("vec_every_vec_struct"), FVecEveryVecStructIxCols("vec_every_vec_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecF32() const { return ::SpacetimeDB::query_builder::Table("vec_f_32", FVecF32Cols("vec_f_32"), FVecF32IxCols("vec_f_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecF64() const { return ::SpacetimeDB::query_builder::Table("vec_f_64", FVecF64Cols("vec_f_64"), FVecF64IxCols("vec_f_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecI128() const { return ::SpacetimeDB::query_builder::Table("vec_i_128", FVecI128Cols("vec_i_128"), FVecI128IxCols("vec_i_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecI16() const { return ::SpacetimeDB::query_builder::Table("vec_i_16", FVecI16Cols("vec_i_16"), FVecI16IxCols("vec_i_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecI256() const { return ::SpacetimeDB::query_builder::Table("vec_i_256", FVecI256Cols("vec_i_256"), FVecI256IxCols("vec_i_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecI32() const { return ::SpacetimeDB::query_builder::Table("vec_i_32", FVecI32Cols("vec_i_32"), FVecI32IxCols("vec_i_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecI64() const { return ::SpacetimeDB::query_builder::Table("vec_i_64", FVecI64Cols("vec_i_64"), FVecI64IxCols("vec_i_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecI8() const { return ::SpacetimeDB::query_builder::Table("vec_i_8", FVecI8Cols("vec_i_8"), FVecI8IxCols("vec_i_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecIdentity() const { return ::SpacetimeDB::query_builder::Table("vec_identity", FVecIdentityCols("vec_identity"), FVecIdentityIxCols("vec_identity")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecSimpleEnum() const { return ::SpacetimeDB::query_builder::Table("vec_simple_enum", FVecSimpleEnumCols("vec_simple_enum"), FVecSimpleEnumIxCols("vec_simple_enum")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecString() const { return ::SpacetimeDB::query_builder::Table("vec_string", FVecStringCols("vec_string"), FVecStringIxCols("vec_string")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecTimestamp() const { return ::SpacetimeDB::query_builder::Table("vec_timestamp", FVecTimestampCols("vec_timestamp"), FVecTimestampIxCols("vec_timestamp")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecU128() const { return ::SpacetimeDB::query_builder::Table("vec_u_128", FVecU128Cols("vec_u_128"), FVecU128IxCols("vec_u_128")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecU16() const { return ::SpacetimeDB::query_builder::Table("vec_u_16", FVecU16Cols("vec_u_16"), FVecU16IxCols("vec_u_16")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecU256() const { return ::SpacetimeDB::query_builder::Table("vec_u_256", FVecU256Cols("vec_u_256"), FVecU256IxCols("vec_u_256")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecU32() const { return ::SpacetimeDB::query_builder::Table("vec_u_32", FVecU32Cols("vec_u_32"), FVecU32IxCols("vec_u_32")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecU64() const { return ::SpacetimeDB::query_builder::Table("vec_u_64", FVecU64Cols("vec_u_64"), FVecU64IxCols("vec_u_64")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecU8() const { return ::SpacetimeDB::query_builder::Table("vec_u_8", FVecU8Cols("vec_u_8"), FVecU8IxCols("vec_u_8")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecUnitStruct() const { return ::SpacetimeDB::query_builder::Table("vec_unit_struct", FVecUnitStructCols("vec_unit_struct"), FVecUnitStructIxCols("vec_unit_struct")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table VecUuid() const { return ::SpacetimeDB::query_builder::Table("vec_uuid", FVecUuidCols("vec_uuid"), FVecUuidIxCols("vec_uuid")); } +}; + +struct TESTCLIENT_API FQueryBuilder +{ + FFrom From; + + static TArray AllTablesSqlQueries() + { + TArray Sql; + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.BtreeU32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.IndexedSimpleEnum().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.LargeTable().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneBool().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneByteStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneConnectionId().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneEnumWithPayload().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneEveryPrimitiveStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneEveryVecStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneF32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneF64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneIdentity().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneSimpleEnum().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneString().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneTimestamp().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneUnitStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneUuid().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionEveryPrimitiveStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionIdentity().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionSimpleEnum().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionString().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionUuid().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionVecOptionI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkBool().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkConnectionId().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkIdentity().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkSimpleEnum().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkString().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU32Two().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkUuid().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultEveryPrimitiveStructString().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultI32String().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultIdentityString().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultSimpleEnumI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultStringI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultVecI32String().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ScheduledTable().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.TableHoldsTable().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueBool().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueConnectionId().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueIdentity().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueString().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueUuid().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.Users().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecBool().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecByteStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecConnectionId().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecEnumWithPayload().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecEveryPrimitiveStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecEveryVecStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecF32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecF64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecIdentity().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecSimpleEnum().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecString().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecTimestamp().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU128().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU16().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU256().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU32().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU64().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU8().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecUnitStruct().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecUuid().into_sql().c_str()))); + return Sql; + } +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintPredicate +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBtreeU32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FIndexedSimpleEnumQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FLargeTableQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneBoolQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneByteStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneConnectionIdQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneEnumWithPayloadQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneEveryPrimitiveStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneEveryVecStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneF32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneF64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneI128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneI16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneI256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneI64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneI8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneIdentityQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneSimpleEnumQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneStringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneTimestampQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneU128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneU16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneU256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneU32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneU64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneU8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneUnitStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOneUuidQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOptionEveryPrimitiveStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOptionI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOptionIdentityQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOptionSimpleEnumQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOptionStringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOptionUuidQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FOptionVecOptionI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkBoolQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkConnectionIdQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkI128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkI16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkI256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkI64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkI8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkIdentityQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkSimpleEnumQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkStringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkU128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkU16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkU256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkU32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkU32TwoQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkU64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkU8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FPkUuidQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FResultEveryPrimitiveStructStringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FResultI32StringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FResultIdentityStringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FResultSimpleEnumI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FResultStringI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FResultVecI32StringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FScheduledTableQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FTableHoldsTableQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueBoolQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueConnectionIdQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueI128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueI16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueI256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueI64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueI8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueIdentityQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueStringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueU128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueU16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueU256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueU32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueU64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueU8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUniqueUuidQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FUsersQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecBoolQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecByteStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecConnectionIdQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecEnumWithPayloadQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecEveryPrimitiveStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecEveryVecStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecF32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecF64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecI128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecI16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecI256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecI32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecI64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecI8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecIdentityQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecSimpleEnumQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecStringQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecTimestampQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecU128Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecU16Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecU256Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecU32Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecU64Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecU8Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecUnitStructQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FVecUuidQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintBoolColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintUInt8Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintInt32Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintInt64Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintFloatColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintDoubleColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintStringColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintIdentityColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintConnectionIdColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintTimestampColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTCLIENT_API FBlueprintUuidColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +UCLASS(BlueprintType) +class TESTCLIENT_API UQueryBuilderBlueprintLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|BtreeU32", meta=(DisplayName="From BtreeU32")) + static FBtreeU32Query FromBtreeU32() + { + FBtreeU32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.BtreeU32().into_sql().c_str())); + Query.ResultSourceName = TEXT("btree_u_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|BtreeU32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_BtreeU32QueryToBlueprintQuery(const FBtreeU32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|BtreeU32|Columns", meta=(DisplayName="BtreeU32 Data")) + static FBlueprintInt32Column BtreeU32Data(const FBtreeU32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("btree_u_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|BtreeU32", meta=(DisplayName="BtreeU32 Where")) + static FBtreeU32Query BtreeU32Where(FBtreeU32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|IndexedSimpleEnum", meta=(DisplayName="From IndexedSimpleEnum")) + static FIndexedSimpleEnumQuery FromIndexedSimpleEnum() + { + FIndexedSimpleEnumQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.IndexedSimpleEnum().into_sql().c_str())); + Query.ResultSourceName = TEXT("indexed_simple_enum"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|IndexedSimpleEnum", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_IndexedSimpleEnumQueryToBlueprintQuery(const FIndexedSimpleEnumQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|IndexedSimpleEnum", meta=(DisplayName="IndexedSimpleEnum Where")) + static FIndexedSimpleEnumQuery IndexedSimpleEnumWhere(FIndexedSimpleEnumQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable", meta=(DisplayName="From LargeTable")) + static FLargeTableQuery FromLargeTable() + { + FLargeTableQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.LargeTable().into_sql().c_str())); + Query.ResultSourceName = TEXT("large_table"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_LargeTableQueryToBlueprintQuery(const FLargeTableQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable|Columns", meta=(DisplayName="LargeTable A")) + static FBlueprintUInt8Column LargeTableA(const FLargeTableQuery& Query) + { + FBlueprintUInt8Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("large_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("a"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable|Columns", meta=(DisplayName="LargeTable I")) + static FBlueprintInt32Column LargeTableI(const FLargeTableQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("large_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("i"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable|Columns", meta=(DisplayName="LargeTable J")) + static FBlueprintInt64Column LargeTableJ(const FLargeTableQuery& Query) + { + FBlueprintInt64Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("large_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("j"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable|Columns", meta=(DisplayName="LargeTable M")) + static FBlueprintBoolColumn LargeTableM(const FLargeTableQuery& Query) + { + FBlueprintBoolColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("large_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("m"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable|Columns", meta=(DisplayName="LargeTable N")) + static FBlueprintFloatColumn LargeTableN(const FLargeTableQuery& Query) + { + FBlueprintFloatColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("large_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable|Columns", meta=(DisplayName="LargeTable O")) + static FBlueprintDoubleColumn LargeTableO(const FLargeTableQuery& Query) + { + FBlueprintDoubleColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("large_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("o"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable|Columns", meta=(DisplayName="LargeTable P")) + static FBlueprintStringColumn LargeTableP(const FLargeTableQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("large_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("p"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|LargeTable", meta=(DisplayName="LargeTable Where")) + static FLargeTableQuery LargeTableWhere(FLargeTableQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneBool", meta=(DisplayName="From OneBool")) + static FOneBoolQuery FromOneBool() + { + FOneBoolQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneBool().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_bool"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneBool", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneBoolQueryToBlueprintQuery(const FOneBoolQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneBool|Columns", meta=(DisplayName="OneBool B")) + static FBlueprintBoolColumn OneBoolB(const FOneBoolQuery& Query) + { + FBlueprintBoolColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_bool") : Query.ResultSourceName; + Column.ColumnName = TEXT("b"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneBool", meta=(DisplayName="OneBool Where")) + static FOneBoolQuery OneBoolWhere(FOneBoolQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneByteStruct", meta=(DisplayName="From OneByteStruct")) + static FOneByteStructQuery FromOneByteStruct() + { + FOneByteStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneByteStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_byte_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneByteStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneByteStructQueryToBlueprintQuery(const FOneByteStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneByteStruct", meta=(DisplayName="OneByteStruct Where")) + static FOneByteStructQuery OneByteStructWhere(FOneByteStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneConnectionId", meta=(DisplayName="From OneConnectionId")) + static FOneConnectionIdQuery FromOneConnectionId() + { + FOneConnectionIdQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneConnectionId().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_connection_id"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneConnectionId", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneConnectionIdQueryToBlueprintQuery(const FOneConnectionIdQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneConnectionId|Columns", meta=(DisplayName="OneConnectionId A")) + static FBlueprintConnectionIdColumn OneConnectionIdA(const FOneConnectionIdQuery& Query) + { + FBlueprintConnectionIdColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_connection_id") : Query.ResultSourceName; + Column.ColumnName = TEXT("a"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneConnectionId", meta=(DisplayName="OneConnectionId Where")) + static FOneConnectionIdQuery OneConnectionIdWhere(FOneConnectionIdQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEnumWithPayload", meta=(DisplayName="From OneEnumWithPayload")) + static FOneEnumWithPayloadQuery FromOneEnumWithPayload() + { + FOneEnumWithPayloadQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneEnumWithPayload().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_enum_with_payload"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEnumWithPayload", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneEnumWithPayloadQueryToBlueprintQuery(const FOneEnumWithPayloadQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEnumWithPayload", meta=(DisplayName="OneEnumWithPayload Where")) + static FOneEnumWithPayloadQuery OneEnumWithPayloadWhere(FOneEnumWithPayloadQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEveryPrimitiveStruct", meta=(DisplayName="From OneEveryPrimitiveStruct")) + static FOneEveryPrimitiveStructQuery FromOneEveryPrimitiveStruct() + { + FOneEveryPrimitiveStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneEveryPrimitiveStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_every_primitive_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEveryPrimitiveStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneEveryPrimitiveStructQueryToBlueprintQuery(const FOneEveryPrimitiveStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEveryPrimitiveStruct", meta=(DisplayName="OneEveryPrimitiveStruct Where")) + static FOneEveryPrimitiveStructQuery OneEveryPrimitiveStructWhere(FOneEveryPrimitiveStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEveryVecStruct", meta=(DisplayName="From OneEveryVecStruct")) + static FOneEveryVecStructQuery FromOneEveryVecStruct() + { + FOneEveryVecStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneEveryVecStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_every_vec_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEveryVecStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneEveryVecStructQueryToBlueprintQuery(const FOneEveryVecStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneEveryVecStruct", meta=(DisplayName="OneEveryVecStruct Where")) + static FOneEveryVecStructQuery OneEveryVecStructWhere(FOneEveryVecStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF32", meta=(DisplayName="From OneF32")) + static FOneF32Query FromOneF32() + { + FOneF32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneF32().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_f_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneF32QueryToBlueprintQuery(const FOneF32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF32|Columns", meta=(DisplayName="OneF32 F")) + static FBlueprintFloatColumn OneF32F(const FOneF32Query& Query) + { + FBlueprintFloatColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_f_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("f"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF32", meta=(DisplayName="OneF32 Where")) + static FOneF32Query OneF32Where(FOneF32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF64", meta=(DisplayName="From OneF64")) + static FOneF64Query FromOneF64() + { + FOneF64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneF64().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_f_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneF64QueryToBlueprintQuery(const FOneF64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF64|Columns", meta=(DisplayName="OneF64 F")) + static FBlueprintDoubleColumn OneF64F(const FOneF64Query& Query) + { + FBlueprintDoubleColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_f_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("f"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneF64", meta=(DisplayName="OneF64 Where")) + static FOneF64Query OneF64Where(FOneF64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI128", meta=(DisplayName="From OneI128")) + static FOneI128Query FromOneI128() + { + FOneI128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI128().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_i_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneI128QueryToBlueprintQuery(const FOneI128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI128", meta=(DisplayName="OneI128 Where")) + static FOneI128Query OneI128Where(FOneI128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI16", meta=(DisplayName="From OneI16")) + static FOneI16Query FromOneI16() + { + FOneI16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI16().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_i_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneI16QueryToBlueprintQuery(const FOneI16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI16", meta=(DisplayName="OneI16 Where")) + static FOneI16Query OneI16Where(FOneI16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI256", meta=(DisplayName="From OneI256")) + static FOneI256Query FromOneI256() + { + FOneI256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI256().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_i_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneI256QueryToBlueprintQuery(const FOneI256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI256", meta=(DisplayName="OneI256 Where")) + static FOneI256Query OneI256Where(FOneI256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI32", meta=(DisplayName="From OneI32")) + static FOneI32Query FromOneI32() + { + FOneI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneI32QueryToBlueprintQuery(const FOneI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI32|Columns", meta=(DisplayName="OneI32 N")) + static FBlueprintInt32Column OneI32N(const FOneI32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_i_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI32", meta=(DisplayName="OneI32 Where")) + static FOneI32Query OneI32Where(FOneI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI64", meta=(DisplayName="From OneI64")) + static FOneI64Query FromOneI64() + { + FOneI64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI64().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_i_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneI64QueryToBlueprintQuery(const FOneI64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI64|Columns", meta=(DisplayName="OneI64 N")) + static FBlueprintInt64Column OneI64N(const FOneI64Query& Query) + { + FBlueprintInt64Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_i_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI64", meta=(DisplayName="OneI64 Where")) + static FOneI64Query OneI64Where(FOneI64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI8", meta=(DisplayName="From OneI8")) + static FOneI8Query FromOneI8() + { + FOneI8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneI8().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_i_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneI8QueryToBlueprintQuery(const FOneI8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneI8", meta=(DisplayName="OneI8 Where")) + static FOneI8Query OneI8Where(FOneI8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneIdentity", meta=(DisplayName="From OneIdentity")) + static FOneIdentityQuery FromOneIdentity() + { + FOneIdentityQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneIdentity().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_identity"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneIdentity", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneIdentityQueryToBlueprintQuery(const FOneIdentityQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneIdentity|Columns", meta=(DisplayName="OneIdentity I")) + static FBlueprintIdentityColumn OneIdentityI(const FOneIdentityQuery& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_identity") : Query.ResultSourceName; + Column.ColumnName = TEXT("i"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneIdentity", meta=(DisplayName="OneIdentity Where")) + static FOneIdentityQuery OneIdentityWhere(FOneIdentityQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneSimpleEnum", meta=(DisplayName="From OneSimpleEnum")) + static FOneSimpleEnumQuery FromOneSimpleEnum() + { + FOneSimpleEnumQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneSimpleEnum().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_simple_enum"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneSimpleEnum", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneSimpleEnumQueryToBlueprintQuery(const FOneSimpleEnumQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneSimpleEnum", meta=(DisplayName="OneSimpleEnum Where")) + static FOneSimpleEnumQuery OneSimpleEnumWhere(FOneSimpleEnumQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneString", meta=(DisplayName="From OneString")) + static FOneStringQuery FromOneString() + { + FOneStringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneString().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneString", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneStringQueryToBlueprintQuery(const FOneStringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneString|Columns", meta=(DisplayName="OneString S")) + static FBlueprintStringColumn OneStringS(const FOneStringQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_string") : Query.ResultSourceName; + Column.ColumnName = TEXT("s"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneString", meta=(DisplayName="OneString Where")) + static FOneStringQuery OneStringWhere(FOneStringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneTimestamp", meta=(DisplayName="From OneTimestamp")) + static FOneTimestampQuery FromOneTimestamp() + { + FOneTimestampQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneTimestamp().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_timestamp"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneTimestamp", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneTimestampQueryToBlueprintQuery(const FOneTimestampQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneTimestamp|Columns", meta=(DisplayName="OneTimestamp T")) + static FBlueprintTimestampColumn OneTimestampT(const FOneTimestampQuery& Query) + { + FBlueprintTimestampColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_timestamp") : Query.ResultSourceName; + Column.ColumnName = TEXT("t"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneTimestamp", meta=(DisplayName="OneTimestamp Where")) + static FOneTimestampQuery OneTimestampWhere(FOneTimestampQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU128", meta=(DisplayName="From OneU128")) + static FOneU128Query FromOneU128() + { + FOneU128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU128().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_u_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneU128QueryToBlueprintQuery(const FOneU128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU128", meta=(DisplayName="OneU128 Where")) + static FOneU128Query OneU128Where(FOneU128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU16", meta=(DisplayName="From OneU16")) + static FOneU16Query FromOneU16() + { + FOneU16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU16().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_u_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneU16QueryToBlueprintQuery(const FOneU16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU16", meta=(DisplayName="OneU16 Where")) + static FOneU16Query OneU16Where(FOneU16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU256", meta=(DisplayName="From OneU256")) + static FOneU256Query FromOneU256() + { + FOneU256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU256().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_u_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneU256QueryToBlueprintQuery(const FOneU256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU256", meta=(DisplayName="OneU256 Where")) + static FOneU256Query OneU256Where(FOneU256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU32", meta=(DisplayName="From OneU32")) + static FOneU32Query FromOneU32() + { + FOneU32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU32().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_u_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneU32QueryToBlueprintQuery(const FOneU32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU32", meta=(DisplayName="OneU32 Where")) + static FOneU32Query OneU32Where(FOneU32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU64", meta=(DisplayName="From OneU64")) + static FOneU64Query FromOneU64() + { + FOneU64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU64().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_u_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneU64QueryToBlueprintQuery(const FOneU64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU64", meta=(DisplayName="OneU64 Where")) + static FOneU64Query OneU64Where(FOneU64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU8", meta=(DisplayName="From OneU8")) + static FOneU8Query FromOneU8() + { + FOneU8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneU8().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_u_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneU8QueryToBlueprintQuery(const FOneU8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU8|Columns", meta=(DisplayName="OneU8 N")) + static FBlueprintUInt8Column OneU8N(const FOneU8Query& Query) + { + FBlueprintUInt8Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_u_8") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneU8", meta=(DisplayName="OneU8 Where")) + static FOneU8Query OneU8Where(FOneU8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneUnitStruct", meta=(DisplayName="From OneUnitStruct")) + static FOneUnitStructQuery FromOneUnitStruct() + { + FOneUnitStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneUnitStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_unit_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneUnitStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneUnitStructQueryToBlueprintQuery(const FOneUnitStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneUnitStruct", meta=(DisplayName="OneUnitStruct Where")) + static FOneUnitStructQuery OneUnitStructWhere(FOneUnitStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneUuid", meta=(DisplayName="From OneUuid")) + static FOneUuidQuery FromOneUuid() + { + FOneUuidQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OneUuid().into_sql().c_str())); + Query.ResultSourceName = TEXT("one_uuid"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneUuid", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OneUuidQueryToBlueprintQuery(const FOneUuidQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneUuid|Columns", meta=(DisplayName="OneUuid U")) + static FBlueprintUuidColumn OneUuidU(const FOneUuidQuery& Query) + { + FBlueprintUuidColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("one_uuid") : Query.ResultSourceName; + Column.ColumnName = TEXT("u"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OneUuid", meta=(DisplayName="OneUuid Where")) + static FOneUuidQuery OneUuidWhere(FOneUuidQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionEveryPrimitiveStruct", meta=(DisplayName="From OptionEveryPrimitiveStruct")) + static FOptionEveryPrimitiveStructQuery FromOptionEveryPrimitiveStruct() + { + FOptionEveryPrimitiveStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionEveryPrimitiveStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("option_every_primitive_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionEveryPrimitiveStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OptionEveryPrimitiveStructQueryToBlueprintQuery(const FOptionEveryPrimitiveStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionEveryPrimitiveStruct", meta=(DisplayName="OptionEveryPrimitiveStruct Where")) + static FOptionEveryPrimitiveStructQuery OptionEveryPrimitiveStructWhere(FOptionEveryPrimitiveStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionI32", meta=(DisplayName="From OptionI32")) + static FOptionI32Query FromOptionI32() + { + FOptionI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("option_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OptionI32QueryToBlueprintQuery(const FOptionI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionI32", meta=(DisplayName="OptionI32 Where")) + static FOptionI32Query OptionI32Where(FOptionI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionIdentity", meta=(DisplayName="From OptionIdentity")) + static FOptionIdentityQuery FromOptionIdentity() + { + FOptionIdentityQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionIdentity().into_sql().c_str())); + Query.ResultSourceName = TEXT("option_identity"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionIdentity", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OptionIdentityQueryToBlueprintQuery(const FOptionIdentityQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionIdentity", meta=(DisplayName="OptionIdentity Where")) + static FOptionIdentityQuery OptionIdentityWhere(FOptionIdentityQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionSimpleEnum", meta=(DisplayName="From OptionSimpleEnum")) + static FOptionSimpleEnumQuery FromOptionSimpleEnum() + { + FOptionSimpleEnumQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionSimpleEnum().into_sql().c_str())); + Query.ResultSourceName = TEXT("option_simple_enum"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionSimpleEnum", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OptionSimpleEnumQueryToBlueprintQuery(const FOptionSimpleEnumQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionSimpleEnum", meta=(DisplayName="OptionSimpleEnum Where")) + static FOptionSimpleEnumQuery OptionSimpleEnumWhere(FOptionSimpleEnumQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionString", meta=(DisplayName="From OptionString")) + static FOptionStringQuery FromOptionString() + { + FOptionStringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionString().into_sql().c_str())); + Query.ResultSourceName = TEXT("option_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionString", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OptionStringQueryToBlueprintQuery(const FOptionStringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionString", meta=(DisplayName="OptionString Where")) + static FOptionStringQuery OptionStringWhere(FOptionStringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionUuid", meta=(DisplayName="From OptionUuid")) + static FOptionUuidQuery FromOptionUuid() + { + FOptionUuidQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionUuid().into_sql().c_str())); + Query.ResultSourceName = TEXT("option_uuid"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionUuid", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OptionUuidQueryToBlueprintQuery(const FOptionUuidQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionUuid", meta=(DisplayName="OptionUuid Where")) + static FOptionUuidQuery OptionUuidWhere(FOptionUuidQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionVecOptionI32", meta=(DisplayName="From OptionVecOptionI32")) + static FOptionVecOptionI32Query FromOptionVecOptionI32() + { + FOptionVecOptionI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.OptionVecOptionI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("option_vec_option_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionVecOptionI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_OptionVecOptionI32QueryToBlueprintQuery(const FOptionVecOptionI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|OptionVecOptionI32", meta=(DisplayName="OptionVecOptionI32 Where")) + static FOptionVecOptionI32Query OptionVecOptionI32Where(FOptionVecOptionI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkBool", meta=(DisplayName="From PkBool")) + static FPkBoolQuery FromPkBool() + { + FPkBoolQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkBool().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_bool"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkBool", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkBoolQueryToBlueprintQuery(const FPkBoolQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkBool|Columns", meta=(DisplayName="PkBool B")) + static FBlueprintBoolColumn PkBoolB(const FPkBoolQuery& Query) + { + FBlueprintBoolColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_bool") : Query.ResultSourceName; + Column.ColumnName = TEXT("b"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkBool|Columns", meta=(DisplayName="PkBool Data")) + static FBlueprintInt32Column PkBoolData(const FPkBoolQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_bool") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkBool", meta=(DisplayName="PkBool Where")) + static FPkBoolQuery PkBoolWhere(FPkBoolQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkConnectionId", meta=(DisplayName="From PkConnectionId")) + static FPkConnectionIdQuery FromPkConnectionId() + { + FPkConnectionIdQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkConnectionId().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_connection_id"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkConnectionId", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkConnectionIdQueryToBlueprintQuery(const FPkConnectionIdQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkConnectionId|Columns", meta=(DisplayName="PkConnectionId A")) + static FBlueprintConnectionIdColumn PkConnectionIdA(const FPkConnectionIdQuery& Query) + { + FBlueprintConnectionIdColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_connection_id") : Query.ResultSourceName; + Column.ColumnName = TEXT("a"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkConnectionId|Columns", meta=(DisplayName="PkConnectionId Data")) + static FBlueprintInt32Column PkConnectionIdData(const FPkConnectionIdQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_connection_id") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkConnectionId", meta=(DisplayName="PkConnectionId Where")) + static FPkConnectionIdQuery PkConnectionIdWhere(FPkConnectionIdQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI128", meta=(DisplayName="From PkI128")) + static FPkI128Query FromPkI128() + { + FPkI128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI128().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_i_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkI128QueryToBlueprintQuery(const FPkI128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI128|Columns", meta=(DisplayName="PkI128 Data")) + static FBlueprintInt32Column PkI128Data(const FPkI128Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_128") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI128", meta=(DisplayName="PkI128 Where")) + static FPkI128Query PkI128Where(FPkI128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI16", meta=(DisplayName="From PkI16")) + static FPkI16Query FromPkI16() + { + FPkI16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI16().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_i_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkI16QueryToBlueprintQuery(const FPkI16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI16|Columns", meta=(DisplayName="PkI16 Data")) + static FBlueprintInt32Column PkI16Data(const FPkI16Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_16") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI16", meta=(DisplayName="PkI16 Where")) + static FPkI16Query PkI16Where(FPkI16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI256", meta=(DisplayName="From PkI256")) + static FPkI256Query FromPkI256() + { + FPkI256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI256().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_i_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkI256QueryToBlueprintQuery(const FPkI256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI256|Columns", meta=(DisplayName="PkI256 Data")) + static FBlueprintInt32Column PkI256Data(const FPkI256Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_256") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI256", meta=(DisplayName="PkI256 Where")) + static FPkI256Query PkI256Where(FPkI256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI32", meta=(DisplayName="From PkI32")) + static FPkI32Query FromPkI32() + { + FPkI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkI32QueryToBlueprintQuery(const FPkI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI32|Columns", meta=(DisplayName="PkI32 N")) + static FBlueprintInt32Column PkI32N(const FPkI32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI32|Columns", meta=(DisplayName="PkI32 Data")) + static FBlueprintInt32Column PkI32Data(const FPkI32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI32", meta=(DisplayName="PkI32 Where")) + static FPkI32Query PkI32Where(FPkI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI64", meta=(DisplayName="From PkI64")) + static FPkI64Query FromPkI64() + { + FPkI64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI64().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_i_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkI64QueryToBlueprintQuery(const FPkI64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI64|Columns", meta=(DisplayName="PkI64 N")) + static FBlueprintInt64Column PkI64N(const FPkI64Query& Query) + { + FBlueprintInt64Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI64|Columns", meta=(DisplayName="PkI64 Data")) + static FBlueprintInt32Column PkI64Data(const FPkI64Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI64", meta=(DisplayName="PkI64 Where")) + static FPkI64Query PkI64Where(FPkI64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI8", meta=(DisplayName="From PkI8")) + static FPkI8Query FromPkI8() + { + FPkI8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkI8().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_i_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkI8QueryToBlueprintQuery(const FPkI8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI8|Columns", meta=(DisplayName="PkI8 Data")) + static FBlueprintInt32Column PkI8Data(const FPkI8Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_i_8") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkI8", meta=(DisplayName="PkI8 Where")) + static FPkI8Query PkI8Where(FPkI8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkIdentity", meta=(DisplayName="From PkIdentity")) + static FPkIdentityQuery FromPkIdentity() + { + FPkIdentityQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkIdentity().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_identity"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkIdentity", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkIdentityQueryToBlueprintQuery(const FPkIdentityQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkIdentity|Columns", meta=(DisplayName="PkIdentity I")) + static FBlueprintIdentityColumn PkIdentityI(const FPkIdentityQuery& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_identity") : Query.ResultSourceName; + Column.ColumnName = TEXT("i"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkIdentity|Columns", meta=(DisplayName="PkIdentity Data")) + static FBlueprintInt32Column PkIdentityData(const FPkIdentityQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_identity") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkIdentity", meta=(DisplayName="PkIdentity Where")) + static FPkIdentityQuery PkIdentityWhere(FPkIdentityQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkSimpleEnum", meta=(DisplayName="From PkSimpleEnum")) + static FPkSimpleEnumQuery FromPkSimpleEnum() + { + FPkSimpleEnumQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkSimpleEnum().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_simple_enum"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkSimpleEnum", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkSimpleEnumQueryToBlueprintQuery(const FPkSimpleEnumQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkSimpleEnum|Columns", meta=(DisplayName="PkSimpleEnum Data")) + static FBlueprintInt32Column PkSimpleEnumData(const FPkSimpleEnumQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_simple_enum") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkSimpleEnum", meta=(DisplayName="PkSimpleEnum Where")) + static FPkSimpleEnumQuery PkSimpleEnumWhere(FPkSimpleEnumQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkString", meta=(DisplayName="From PkString")) + static FPkStringQuery FromPkString() + { + FPkStringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkString().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkString", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkStringQueryToBlueprintQuery(const FPkStringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkString|Columns", meta=(DisplayName="PkString S")) + static FBlueprintStringColumn PkStringS(const FPkStringQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_string") : Query.ResultSourceName; + Column.ColumnName = TEXT("s"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkString|Columns", meta=(DisplayName="PkString Data")) + static FBlueprintInt32Column PkStringData(const FPkStringQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_string") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkString", meta=(DisplayName="PkString Where")) + static FPkStringQuery PkStringWhere(FPkStringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU128", meta=(DisplayName="From PkU128")) + static FPkU128Query FromPkU128() + { + FPkU128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU128().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_u_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkU128QueryToBlueprintQuery(const FPkU128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU128|Columns", meta=(DisplayName="PkU128 Data")) + static FBlueprintInt32Column PkU128Data(const FPkU128Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_128") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU128", meta=(DisplayName="PkU128 Where")) + static FPkU128Query PkU128Where(FPkU128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU16", meta=(DisplayName="From PkU16")) + static FPkU16Query FromPkU16() + { + FPkU16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU16().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_u_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkU16QueryToBlueprintQuery(const FPkU16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU16|Columns", meta=(DisplayName="PkU16 Data")) + static FBlueprintInt32Column PkU16Data(const FPkU16Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_16") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU16", meta=(DisplayName="PkU16 Where")) + static FPkU16Query PkU16Where(FPkU16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU256", meta=(DisplayName="From PkU256")) + static FPkU256Query FromPkU256() + { + FPkU256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU256().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_u_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkU256QueryToBlueprintQuery(const FPkU256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU256|Columns", meta=(DisplayName="PkU256 Data")) + static FBlueprintInt32Column PkU256Data(const FPkU256Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_256") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU256", meta=(DisplayName="PkU256 Where")) + static FPkU256Query PkU256Where(FPkU256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32", meta=(DisplayName="From PkU32")) + static FPkU32Query FromPkU32() + { + FPkU32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU32().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_u_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkU32QueryToBlueprintQuery(const FPkU32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32|Columns", meta=(DisplayName="PkU32 Data")) + static FBlueprintInt32Column PkU32Data(const FPkU32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32", meta=(DisplayName="PkU32 Where")) + static FPkU32Query PkU32Where(FPkU32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32Two", meta=(DisplayName="From PkU32Two")) + static FPkU32TwoQuery FromPkU32Two() + { + FPkU32TwoQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU32Two().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_u_32_two"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32Two", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkU32TwoQueryToBlueprintQuery(const FPkU32TwoQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32Two|Columns", meta=(DisplayName="PkU32Two Data")) + static FBlueprintInt32Column PkU32TwoData(const FPkU32TwoQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_32_two") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU32Two", meta=(DisplayName="PkU32Two Where")) + static FPkU32TwoQuery PkU32TwoWhere(FPkU32TwoQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU64", meta=(DisplayName="From PkU64")) + static FPkU64Query FromPkU64() + { + FPkU64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU64().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_u_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkU64QueryToBlueprintQuery(const FPkU64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU64|Columns", meta=(DisplayName="PkU64 Data")) + static FBlueprintInt32Column PkU64Data(const FPkU64Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU64", meta=(DisplayName="PkU64 Where")) + static FPkU64Query PkU64Where(FPkU64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU8", meta=(DisplayName="From PkU8")) + static FPkU8Query FromPkU8() + { + FPkU8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkU8().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_u_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkU8QueryToBlueprintQuery(const FPkU8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU8|Columns", meta=(DisplayName="PkU8 N")) + static FBlueprintUInt8Column PkU8N(const FPkU8Query& Query) + { + FBlueprintUInt8Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_8") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU8|Columns", meta=(DisplayName="PkU8 Data")) + static FBlueprintInt32Column PkU8Data(const FPkU8Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_u_8") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkU8", meta=(DisplayName="PkU8 Where")) + static FPkU8Query PkU8Where(FPkU8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid", meta=(DisplayName="From PkUuid")) + static FPkUuidQuery FromPkUuid() + { + FPkUuidQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkUuid().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_uuid"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkUuidQueryToBlueprintQuery(const FPkUuidQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid|Columns", meta=(DisplayName="PkUuid U")) + static FBlueprintUuidColumn PkUuidU(const FPkUuidQuery& Query) + { + FBlueprintUuidColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_uuid") : Query.ResultSourceName; + Column.ColumnName = TEXT("u"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid|Columns", meta=(DisplayName="PkUuid Data")) + static FBlueprintInt32Column PkUuidData(const FPkUuidQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_uuid") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid", meta=(DisplayName="PkUuid Where")) + static FPkUuidQuery PkUuidWhere(FPkUuidQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultEveryPrimitiveStructString", meta=(DisplayName="From ResultEveryPrimitiveStructString")) + static FResultEveryPrimitiveStructStringQuery FromResultEveryPrimitiveStructString() + { + FResultEveryPrimitiveStructStringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultEveryPrimitiveStructString().into_sql().c_str())); + Query.ResultSourceName = TEXT("result_every_primitive_struct_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultEveryPrimitiveStructString", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ResultEveryPrimitiveStructStringQueryToBlueprintQuery(const FResultEveryPrimitiveStructStringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultEveryPrimitiveStructString", meta=(DisplayName="ResultEveryPrimitiveStructString Where")) + static FResultEveryPrimitiveStructStringQuery ResultEveryPrimitiveStructStringWhere(FResultEveryPrimitiveStructStringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultI32String", meta=(DisplayName="From ResultI32String")) + static FResultI32StringQuery FromResultI32String() + { + FResultI32StringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultI32String().into_sql().c_str())); + Query.ResultSourceName = TEXT("result_i_32_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultI32String", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ResultI32StringQueryToBlueprintQuery(const FResultI32StringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultI32String", meta=(DisplayName="ResultI32String Where")) + static FResultI32StringQuery ResultI32StringWhere(FResultI32StringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultIdentityString", meta=(DisplayName="From ResultIdentityString")) + static FResultIdentityStringQuery FromResultIdentityString() + { + FResultIdentityStringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultIdentityString().into_sql().c_str())); + Query.ResultSourceName = TEXT("result_identity_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultIdentityString", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ResultIdentityStringQueryToBlueprintQuery(const FResultIdentityStringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultIdentityString", meta=(DisplayName="ResultIdentityString Where")) + static FResultIdentityStringQuery ResultIdentityStringWhere(FResultIdentityStringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultSimpleEnumI32", meta=(DisplayName="From ResultSimpleEnumI32")) + static FResultSimpleEnumI32Query FromResultSimpleEnumI32() + { + FResultSimpleEnumI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultSimpleEnumI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("result_simple_enum_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultSimpleEnumI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ResultSimpleEnumI32QueryToBlueprintQuery(const FResultSimpleEnumI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultSimpleEnumI32", meta=(DisplayName="ResultSimpleEnumI32 Where")) + static FResultSimpleEnumI32Query ResultSimpleEnumI32Where(FResultSimpleEnumI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultStringI32", meta=(DisplayName="From ResultStringI32")) + static FResultStringI32Query FromResultStringI32() + { + FResultStringI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultStringI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("result_string_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultStringI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ResultStringI32QueryToBlueprintQuery(const FResultStringI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultStringI32", meta=(DisplayName="ResultStringI32 Where")) + static FResultStringI32Query ResultStringI32Where(FResultStringI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultVecI32String", meta=(DisplayName="From ResultVecI32String")) + static FResultVecI32StringQuery FromResultVecI32String() + { + FResultVecI32StringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ResultVecI32String().into_sql().c_str())); + Query.ResultSourceName = TEXT("result_vec_i_32_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultVecI32String", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ResultVecI32StringQueryToBlueprintQuery(const FResultVecI32StringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ResultVecI32String", meta=(DisplayName="ResultVecI32String Where")) + static FResultVecI32StringQuery ResultVecI32StringWhere(FResultVecI32StringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ScheduledTable", meta=(DisplayName="From ScheduledTable")) + static FScheduledTableQuery FromScheduledTable() + { + FScheduledTableQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ScheduledTable().into_sql().c_str())); + Query.ResultSourceName = TEXT("scheduled_table"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ScheduledTable", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ScheduledTableQueryToBlueprintQuery(const FScheduledTableQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ScheduledTable|Columns", meta=(DisplayName="ScheduledTable Text")) + static FBlueprintStringColumn ScheduledTableText(const FScheduledTableQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("scheduled_table") : Query.ResultSourceName; + Column.ColumnName = TEXT("text"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ScheduledTable", meta=(DisplayName="ScheduledTable Where")) + static FScheduledTableQuery ScheduledTableWhere(FScheduledTableQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|TableHoldsTable", meta=(DisplayName="From TableHoldsTable")) + static FTableHoldsTableQuery FromTableHoldsTable() + { + FTableHoldsTableQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.TableHoldsTable().into_sql().c_str())); + Query.ResultSourceName = TEXT("table_holds_table"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|TableHoldsTable", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_TableHoldsTableQueryToBlueprintQuery(const FTableHoldsTableQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|TableHoldsTable", meta=(DisplayName="TableHoldsTable Where")) + static FTableHoldsTableQuery TableHoldsTableWhere(FTableHoldsTableQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueBool", meta=(DisplayName="From UniqueBool")) + static FUniqueBoolQuery FromUniqueBool() + { + FUniqueBoolQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueBool().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_bool"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueBool", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueBoolQueryToBlueprintQuery(const FUniqueBoolQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueBool|Columns", meta=(DisplayName="UniqueBool B")) + static FBlueprintBoolColumn UniqueBoolB(const FUniqueBoolQuery& Query) + { + FBlueprintBoolColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_bool") : Query.ResultSourceName; + Column.ColumnName = TEXT("b"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueBool|Columns", meta=(DisplayName="UniqueBool Data")) + static FBlueprintInt32Column UniqueBoolData(const FUniqueBoolQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_bool") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueBool", meta=(DisplayName="UniqueBool Where")) + static FUniqueBoolQuery UniqueBoolWhere(FUniqueBoolQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueConnectionId", meta=(DisplayName="From UniqueConnectionId")) + static FUniqueConnectionIdQuery FromUniqueConnectionId() + { + FUniqueConnectionIdQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueConnectionId().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_connection_id"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueConnectionId", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueConnectionIdQueryToBlueprintQuery(const FUniqueConnectionIdQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueConnectionId|Columns", meta=(DisplayName="UniqueConnectionId A")) + static FBlueprintConnectionIdColumn UniqueConnectionIdA(const FUniqueConnectionIdQuery& Query) + { + FBlueprintConnectionIdColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_connection_id") : Query.ResultSourceName; + Column.ColumnName = TEXT("a"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueConnectionId|Columns", meta=(DisplayName="UniqueConnectionId Data")) + static FBlueprintInt32Column UniqueConnectionIdData(const FUniqueConnectionIdQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_connection_id") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueConnectionId", meta=(DisplayName="UniqueConnectionId Where")) + static FUniqueConnectionIdQuery UniqueConnectionIdWhere(FUniqueConnectionIdQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI128", meta=(DisplayName="From UniqueI128")) + static FUniqueI128Query FromUniqueI128() + { + FUniqueI128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI128().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_i_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueI128QueryToBlueprintQuery(const FUniqueI128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI128|Columns", meta=(DisplayName="UniqueI128 Data")) + static FBlueprintInt32Column UniqueI128Data(const FUniqueI128Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_128") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI128", meta=(DisplayName="UniqueI128 Where")) + static FUniqueI128Query UniqueI128Where(FUniqueI128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI16", meta=(DisplayName="From UniqueI16")) + static FUniqueI16Query FromUniqueI16() + { + FUniqueI16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI16().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_i_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueI16QueryToBlueprintQuery(const FUniqueI16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI16|Columns", meta=(DisplayName="UniqueI16 Data")) + static FBlueprintInt32Column UniqueI16Data(const FUniqueI16Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_16") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI16", meta=(DisplayName="UniqueI16 Where")) + static FUniqueI16Query UniqueI16Where(FUniqueI16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI256", meta=(DisplayName="From UniqueI256")) + static FUniqueI256Query FromUniqueI256() + { + FUniqueI256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI256().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_i_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueI256QueryToBlueprintQuery(const FUniqueI256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI256|Columns", meta=(DisplayName="UniqueI256 Data")) + static FBlueprintInt32Column UniqueI256Data(const FUniqueI256Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_256") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI256", meta=(DisplayName="UniqueI256 Where")) + static FUniqueI256Query UniqueI256Where(FUniqueI256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI32", meta=(DisplayName="From UniqueI32")) + static FUniqueI32Query FromUniqueI32() + { + FUniqueI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueI32QueryToBlueprintQuery(const FUniqueI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI32|Columns", meta=(DisplayName="UniqueI32 N")) + static FBlueprintInt32Column UniqueI32N(const FUniqueI32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI32|Columns", meta=(DisplayName="UniqueI32 Data")) + static FBlueprintInt32Column UniqueI32Data(const FUniqueI32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI32", meta=(DisplayName="UniqueI32 Where")) + static FUniqueI32Query UniqueI32Where(FUniqueI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI64", meta=(DisplayName="From UniqueI64")) + static FUniqueI64Query FromUniqueI64() + { + FUniqueI64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI64().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_i_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueI64QueryToBlueprintQuery(const FUniqueI64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI64|Columns", meta=(DisplayName="UniqueI64 N")) + static FBlueprintInt64Column UniqueI64N(const FUniqueI64Query& Query) + { + FBlueprintInt64Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI64|Columns", meta=(DisplayName="UniqueI64 Data")) + static FBlueprintInt32Column UniqueI64Data(const FUniqueI64Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI64", meta=(DisplayName="UniqueI64 Where")) + static FUniqueI64Query UniqueI64Where(FUniqueI64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI8", meta=(DisplayName="From UniqueI8")) + static FUniqueI8Query FromUniqueI8() + { + FUniqueI8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueI8().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_i_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueI8QueryToBlueprintQuery(const FUniqueI8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI8|Columns", meta=(DisplayName="UniqueI8 Data")) + static FBlueprintInt32Column UniqueI8Data(const FUniqueI8Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_i_8") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueI8", meta=(DisplayName="UniqueI8 Where")) + static FUniqueI8Query UniqueI8Where(FUniqueI8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueIdentity", meta=(DisplayName="From UniqueIdentity")) + static FUniqueIdentityQuery FromUniqueIdentity() + { + FUniqueIdentityQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueIdentity().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_identity"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueIdentity", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueIdentityQueryToBlueprintQuery(const FUniqueIdentityQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueIdentity|Columns", meta=(DisplayName="UniqueIdentity I")) + static FBlueprintIdentityColumn UniqueIdentityI(const FUniqueIdentityQuery& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_identity") : Query.ResultSourceName; + Column.ColumnName = TEXT("i"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueIdentity|Columns", meta=(DisplayName="UniqueIdentity Data")) + static FBlueprintInt32Column UniqueIdentityData(const FUniqueIdentityQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_identity") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueIdentity", meta=(DisplayName="UniqueIdentity Where")) + static FUniqueIdentityQuery UniqueIdentityWhere(FUniqueIdentityQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueString", meta=(DisplayName="From UniqueString")) + static FUniqueStringQuery FromUniqueString() + { + FUniqueStringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueString().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueString", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueStringQueryToBlueprintQuery(const FUniqueStringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueString|Columns", meta=(DisplayName="UniqueString S")) + static FBlueprintStringColumn UniqueStringS(const FUniqueStringQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_string") : Query.ResultSourceName; + Column.ColumnName = TEXT("s"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueString|Columns", meta=(DisplayName="UniqueString Data")) + static FBlueprintInt32Column UniqueStringData(const FUniqueStringQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_string") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueString", meta=(DisplayName="UniqueString Where")) + static FUniqueStringQuery UniqueStringWhere(FUniqueStringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU128", meta=(DisplayName="From UniqueU128")) + static FUniqueU128Query FromUniqueU128() + { + FUniqueU128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU128().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_u_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueU128QueryToBlueprintQuery(const FUniqueU128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU128|Columns", meta=(DisplayName="UniqueU128 Data")) + static FBlueprintInt32Column UniqueU128Data(const FUniqueU128Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_u_128") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU128", meta=(DisplayName="UniqueU128 Where")) + static FUniqueU128Query UniqueU128Where(FUniqueU128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU16", meta=(DisplayName="From UniqueU16")) + static FUniqueU16Query FromUniqueU16() + { + FUniqueU16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU16().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_u_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueU16QueryToBlueprintQuery(const FUniqueU16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU16|Columns", meta=(DisplayName="UniqueU16 Data")) + static FBlueprintInt32Column UniqueU16Data(const FUniqueU16Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_u_16") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU16", meta=(DisplayName="UniqueU16 Where")) + static FUniqueU16Query UniqueU16Where(FUniqueU16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU256", meta=(DisplayName="From UniqueU256")) + static FUniqueU256Query FromUniqueU256() + { + FUniqueU256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU256().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_u_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueU256QueryToBlueprintQuery(const FUniqueU256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU256|Columns", meta=(DisplayName="UniqueU256 Data")) + static FBlueprintInt32Column UniqueU256Data(const FUniqueU256Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_u_256") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU256", meta=(DisplayName="UniqueU256 Where")) + static FUniqueU256Query UniqueU256Where(FUniqueU256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU32", meta=(DisplayName="From UniqueU32")) + static FUniqueU32Query FromUniqueU32() + { + FUniqueU32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU32().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_u_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueU32QueryToBlueprintQuery(const FUniqueU32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU32|Columns", meta=(DisplayName="UniqueU32 Data")) + static FBlueprintInt32Column UniqueU32Data(const FUniqueU32Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_u_32") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU32", meta=(DisplayName="UniqueU32 Where")) + static FUniqueU32Query UniqueU32Where(FUniqueU32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU64", meta=(DisplayName="From UniqueU64")) + static FUniqueU64Query FromUniqueU64() + { + FUniqueU64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU64().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_u_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueU64QueryToBlueprintQuery(const FUniqueU64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU64|Columns", meta=(DisplayName="UniqueU64 Data")) + static FBlueprintInt32Column UniqueU64Data(const FUniqueU64Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_u_64") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU64", meta=(DisplayName="UniqueU64 Where")) + static FUniqueU64Query UniqueU64Where(FUniqueU64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU8", meta=(DisplayName="From UniqueU8")) + static FUniqueU8Query FromUniqueU8() + { + FUniqueU8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueU8().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_u_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueU8QueryToBlueprintQuery(const FUniqueU8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU8|Columns", meta=(DisplayName="UniqueU8 N")) + static FBlueprintUInt8Column UniqueU8N(const FUniqueU8Query& Query) + { + FBlueprintUInt8Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_u_8") : Query.ResultSourceName; + Column.ColumnName = TEXT("n"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU8|Columns", meta=(DisplayName="UniqueU8 Data")) + static FBlueprintInt32Column UniqueU8Data(const FUniqueU8Query& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_u_8") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueU8", meta=(DisplayName="UniqueU8 Where")) + static FUniqueU8Query UniqueU8Where(FUniqueU8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueUuid", meta=(DisplayName="From UniqueUuid")) + static FUniqueUuidQuery FromUniqueUuid() + { + FUniqueUuidQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.UniqueUuid().into_sql().c_str())); + Query.ResultSourceName = TEXT("unique_uuid"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueUuid", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UniqueUuidQueryToBlueprintQuery(const FUniqueUuidQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueUuid|Columns", meta=(DisplayName="UniqueUuid U")) + static FBlueprintUuidColumn UniqueUuidU(const FUniqueUuidQuery& Query) + { + FBlueprintUuidColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_uuid") : Query.ResultSourceName; + Column.ColumnName = TEXT("u"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueUuid|Columns", meta=(DisplayName="UniqueUuid Data")) + static FBlueprintInt32Column UniqueUuidData(const FUniqueUuidQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("unique_uuid") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|UniqueUuid", meta=(DisplayName="UniqueUuid Where")) + static FUniqueUuidQuery UniqueUuidWhere(FUniqueUuidQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Users", meta=(DisplayName="From Users")) + static FUsersQuery FromUsers() + { + FUsersQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.Users().into_sql().c_str())); + Query.ResultSourceName = TEXT("users"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Users", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_UsersQueryToBlueprintQuery(const FUsersQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Users|Columns", meta=(DisplayName="Users Identity")) + static FBlueprintIdentityColumn UsersIdentity(const FUsersQuery& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("users") : Query.ResultSourceName; + Column.ColumnName = TEXT("identity"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Users|Columns", meta=(DisplayName="Users Name")) + static FBlueprintStringColumn UsersName(const FUsersQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("users") : Query.ResultSourceName; + Column.ColumnName = TEXT("name"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Users", meta=(DisplayName="Users Where")) + static FUsersQuery UsersWhere(FUsersQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecBool", meta=(DisplayName="From VecBool")) + static FVecBoolQuery FromVecBool() + { + FVecBoolQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecBool().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_bool"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecBool", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecBoolQueryToBlueprintQuery(const FVecBoolQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecBool", meta=(DisplayName="VecBool Where")) + static FVecBoolQuery VecBoolWhere(FVecBoolQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecByteStruct", meta=(DisplayName="From VecByteStruct")) + static FVecByteStructQuery FromVecByteStruct() + { + FVecByteStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecByteStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_byte_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecByteStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecByteStructQueryToBlueprintQuery(const FVecByteStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecByteStruct", meta=(DisplayName="VecByteStruct Where")) + static FVecByteStructQuery VecByteStructWhere(FVecByteStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecConnectionId", meta=(DisplayName="From VecConnectionId")) + static FVecConnectionIdQuery FromVecConnectionId() + { + FVecConnectionIdQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecConnectionId().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_connection_id"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecConnectionId", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecConnectionIdQueryToBlueprintQuery(const FVecConnectionIdQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecConnectionId", meta=(DisplayName="VecConnectionId Where")) + static FVecConnectionIdQuery VecConnectionIdWhere(FVecConnectionIdQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEnumWithPayload", meta=(DisplayName="From VecEnumWithPayload")) + static FVecEnumWithPayloadQuery FromVecEnumWithPayload() + { + FVecEnumWithPayloadQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecEnumWithPayload().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_enum_with_payload"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEnumWithPayload", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecEnumWithPayloadQueryToBlueprintQuery(const FVecEnumWithPayloadQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEnumWithPayload", meta=(DisplayName="VecEnumWithPayload Where")) + static FVecEnumWithPayloadQuery VecEnumWithPayloadWhere(FVecEnumWithPayloadQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEveryPrimitiveStruct", meta=(DisplayName="From VecEveryPrimitiveStruct")) + static FVecEveryPrimitiveStructQuery FromVecEveryPrimitiveStruct() + { + FVecEveryPrimitiveStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecEveryPrimitiveStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_every_primitive_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEveryPrimitiveStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecEveryPrimitiveStructQueryToBlueprintQuery(const FVecEveryPrimitiveStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEveryPrimitiveStruct", meta=(DisplayName="VecEveryPrimitiveStruct Where")) + static FVecEveryPrimitiveStructQuery VecEveryPrimitiveStructWhere(FVecEveryPrimitiveStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEveryVecStruct", meta=(DisplayName="From VecEveryVecStruct")) + static FVecEveryVecStructQuery FromVecEveryVecStruct() + { + FVecEveryVecStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecEveryVecStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_every_vec_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEveryVecStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecEveryVecStructQueryToBlueprintQuery(const FVecEveryVecStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecEveryVecStruct", meta=(DisplayName="VecEveryVecStruct Where")) + static FVecEveryVecStructQuery VecEveryVecStructWhere(FVecEveryVecStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecF32", meta=(DisplayName="From VecF32")) + static FVecF32Query FromVecF32() + { + FVecF32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecF32().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_f_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecF32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecF32QueryToBlueprintQuery(const FVecF32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecF32", meta=(DisplayName="VecF32 Where")) + static FVecF32Query VecF32Where(FVecF32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecF64", meta=(DisplayName="From VecF64")) + static FVecF64Query FromVecF64() + { + FVecF64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecF64().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_f_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecF64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecF64QueryToBlueprintQuery(const FVecF64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecF64", meta=(DisplayName="VecF64 Where")) + static FVecF64Query VecF64Where(FVecF64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI128", meta=(DisplayName="From VecI128")) + static FVecI128Query FromVecI128() + { + FVecI128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI128().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_i_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecI128QueryToBlueprintQuery(const FVecI128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI128", meta=(DisplayName="VecI128 Where")) + static FVecI128Query VecI128Where(FVecI128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI16", meta=(DisplayName="From VecI16")) + static FVecI16Query FromVecI16() + { + FVecI16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI16().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_i_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecI16QueryToBlueprintQuery(const FVecI16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI16", meta=(DisplayName="VecI16 Where")) + static FVecI16Query VecI16Where(FVecI16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI256", meta=(DisplayName="From VecI256")) + static FVecI256Query FromVecI256() + { + FVecI256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI256().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_i_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecI256QueryToBlueprintQuery(const FVecI256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI256", meta=(DisplayName="VecI256 Where")) + static FVecI256Query VecI256Where(FVecI256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI32", meta=(DisplayName="From VecI32")) + static FVecI32Query FromVecI32() + { + FVecI32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI32().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_i_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecI32QueryToBlueprintQuery(const FVecI32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI32", meta=(DisplayName="VecI32 Where")) + static FVecI32Query VecI32Where(FVecI32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI64", meta=(DisplayName="From VecI64")) + static FVecI64Query FromVecI64() + { + FVecI64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI64().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_i_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecI64QueryToBlueprintQuery(const FVecI64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI64", meta=(DisplayName="VecI64 Where")) + static FVecI64Query VecI64Where(FVecI64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI8", meta=(DisplayName="From VecI8")) + static FVecI8Query FromVecI8() + { + FVecI8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecI8().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_i_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecI8QueryToBlueprintQuery(const FVecI8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecI8", meta=(DisplayName="VecI8 Where")) + static FVecI8Query VecI8Where(FVecI8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecIdentity", meta=(DisplayName="From VecIdentity")) + static FVecIdentityQuery FromVecIdentity() + { + FVecIdentityQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecIdentity().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_identity"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecIdentity", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecIdentityQueryToBlueprintQuery(const FVecIdentityQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecIdentity", meta=(DisplayName="VecIdentity Where")) + static FVecIdentityQuery VecIdentityWhere(FVecIdentityQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecSimpleEnum", meta=(DisplayName="From VecSimpleEnum")) + static FVecSimpleEnumQuery FromVecSimpleEnum() + { + FVecSimpleEnumQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecSimpleEnum().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_simple_enum"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecSimpleEnum", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecSimpleEnumQueryToBlueprintQuery(const FVecSimpleEnumQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecSimpleEnum", meta=(DisplayName="VecSimpleEnum Where")) + static FVecSimpleEnumQuery VecSimpleEnumWhere(FVecSimpleEnumQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecString", meta=(DisplayName="From VecString")) + static FVecStringQuery FromVecString() + { + FVecStringQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecString().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_string"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecString", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecStringQueryToBlueprintQuery(const FVecStringQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecString", meta=(DisplayName="VecString Where")) + static FVecStringQuery VecStringWhere(FVecStringQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecTimestamp", meta=(DisplayName="From VecTimestamp")) + static FVecTimestampQuery FromVecTimestamp() + { + FVecTimestampQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecTimestamp().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_timestamp"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecTimestamp", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecTimestampQueryToBlueprintQuery(const FVecTimestampQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecTimestamp", meta=(DisplayName="VecTimestamp Where")) + static FVecTimestampQuery VecTimestampWhere(FVecTimestampQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU128", meta=(DisplayName="From VecU128")) + static FVecU128Query FromVecU128() + { + FVecU128Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU128().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_u_128"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU128", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecU128QueryToBlueprintQuery(const FVecU128Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU128", meta=(DisplayName="VecU128 Where")) + static FVecU128Query VecU128Where(FVecU128Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU16", meta=(DisplayName="From VecU16")) + static FVecU16Query FromVecU16() + { + FVecU16Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU16().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_u_16"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU16", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecU16QueryToBlueprintQuery(const FVecU16Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU16", meta=(DisplayName="VecU16 Where")) + static FVecU16Query VecU16Where(FVecU16Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU256", meta=(DisplayName="From VecU256")) + static FVecU256Query FromVecU256() + { + FVecU256Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU256().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_u_256"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU256", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecU256QueryToBlueprintQuery(const FVecU256Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU256", meta=(DisplayName="VecU256 Where")) + static FVecU256Query VecU256Where(FVecU256Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU32", meta=(DisplayName="From VecU32")) + static FVecU32Query FromVecU32() + { + FVecU32Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU32().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_u_32"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU32", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecU32QueryToBlueprintQuery(const FVecU32Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU32", meta=(DisplayName="VecU32 Where")) + static FVecU32Query VecU32Where(FVecU32Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU64", meta=(DisplayName="From VecU64")) + static FVecU64Query FromVecU64() + { + FVecU64Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU64().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_u_64"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU64", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecU64QueryToBlueprintQuery(const FVecU64Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU64", meta=(DisplayName="VecU64 Where")) + static FVecU64Query VecU64Where(FVecU64Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU8", meta=(DisplayName="From VecU8")) + static FVecU8Query FromVecU8() + { + FVecU8Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecU8().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_u_8"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU8", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecU8QueryToBlueprintQuery(const FVecU8Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecU8", meta=(DisplayName="VecU8 Where")) + static FVecU8Query VecU8Where(FVecU8Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecUnitStruct", meta=(DisplayName="From VecUnitStruct")) + static FVecUnitStructQuery FromVecUnitStruct() + { + FVecUnitStructQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecUnitStruct().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_unit_struct"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecUnitStruct", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecUnitStructQueryToBlueprintQuery(const FVecUnitStructQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecUnitStruct", meta=(DisplayName="VecUnitStruct Where")) + static FVecUnitStructQuery VecUnitStructWhere(FVecUnitStructQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecUuid", meta=(DisplayName="From VecUuid")) + static FVecUuidQuery FromVecUuid() + { + FVecUuidQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.VecUuid().into_sql().c_str())); + Query.ResultSourceName = TEXT("vec_uuid"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecUuid", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_VecUuidQueryToBlueprintQuery(const FVecUuidQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|VecUuid", meta=(DisplayName="VecUuid Where")) + static FVecUuidQuery VecUuidWhere(FVecUuidQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Bool Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate BoolEqual(const FBlueprintBoolColumn& Column, const bool Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UInt8Equal(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate UInt8GreaterThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate UInt8GreaterEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate UInt8LessThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate UInt8LessEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int32Equal(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int32GreaterThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int32GreaterEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int32LessThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int32LessEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int64Equal(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int64GreaterThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int64GreaterEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int64LessThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int64LessEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate FloatEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate FloatGreaterThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate FloatGreaterEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate FloatLessThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate FloatLessEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate DoubleEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate DoubleGreaterThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate DoubleGreaterEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate DoubleLessThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate DoubleLessEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="String Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate StringEqual(const FBlueprintStringColumn& Column, const FString& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Identity Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate IdentityEqual(const FBlueprintIdentityColumn& Column, const FSpacetimeDBIdentity& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="ConnectionId Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate ConnectionIdEqual(const FBlueprintConnectionIdColumn& Column, const FSpacetimeDBConnectionId& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate TimestampEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate TimestampGreaterThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate TimestampGreaterEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate TimestampLessThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate TimestampLessEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Uuid Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UuidEqual(const FBlueprintUuidColumn& Column, const FSpacetimeDBUuid& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="AND", CompactNodeTitle="AND", Keywords="and &&")) + static FBlueprintPredicate And(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) AND (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="OR", CompactNodeTitle="OR", Keywords="or ||")) + static FBlueprintPredicate Or(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) OR (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="NOT", CompactNodeTitle="NOT", Keywords="not !")) + static FBlueprintPredicate Not(const FBlueprintPredicate& A) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("NOT (%s)"), *A.Sql); + return Predicate; + } + +private: + static FString AppendPredicate(const FString& Sql, const FString& Predicate) + { + if (Sql.Contains(TEXT(" WHERE "))) + { + return Sql + TEXT(" AND (") + Predicate + TEXT(")"); + } + return Sql + TEXT(" WHERE (") + Predicate + TEXT(")"); + } +}; + // SubscriptionBuilder class UCLASS(BlueprintType) class TESTCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase @@ -10380,9 +18847,239 @@ class TESTCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase USubscriptionBuilder* OnError(FOnSubscriptionError Callback); UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + USubscriptionHandle* Subscribe(); + USubscriptionHandle* Subscribe(const TArray& SQL); - /** Convenience for subscribing to all rows from all tables */ + template + USubscriptionBuilder* AddQuery(TFn&& Build) + { + FQueryBuilder Q; + auto Query = std::forward(Build)(Q); + static_assert(::SpacetimeDB::query_builder::QueryBuilderReturn, + "Typed subscription queries must return a query_builder table/query expression."); + PendingSqlQueries.Add(FString(UTF8_TO_TCHAR(Query.into_sql().c_str()))); + return this; + } + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB", meta=(DisplayName="AddQuery", ScriptName="AddQuery")) + USubscriptionBuilder* AddBlueprintQuery(const FBlueprintQuery& Query); + + USubscriptionBuilder* AddBtreeU32Query(const FBtreeU32Query& Query); + + USubscriptionBuilder* AddIndexedSimpleEnumQuery(const FIndexedSimpleEnumQuery& Query); + + USubscriptionBuilder* AddLargeTableQuery(const FLargeTableQuery& Query); + + USubscriptionBuilder* AddOneBoolQuery(const FOneBoolQuery& Query); + + USubscriptionBuilder* AddOneByteStructQuery(const FOneByteStructQuery& Query); + + USubscriptionBuilder* AddOneConnectionIdQuery(const FOneConnectionIdQuery& Query); + + USubscriptionBuilder* AddOneEnumWithPayloadQuery(const FOneEnumWithPayloadQuery& Query); + + USubscriptionBuilder* AddOneEveryPrimitiveStructQuery(const FOneEveryPrimitiveStructQuery& Query); + + USubscriptionBuilder* AddOneEveryVecStructQuery(const FOneEveryVecStructQuery& Query); + + USubscriptionBuilder* AddOneF32Query(const FOneF32Query& Query); + + USubscriptionBuilder* AddOneF64Query(const FOneF64Query& Query); + + USubscriptionBuilder* AddOneI128Query(const FOneI128Query& Query); + + USubscriptionBuilder* AddOneI16Query(const FOneI16Query& Query); + + USubscriptionBuilder* AddOneI256Query(const FOneI256Query& Query); + + USubscriptionBuilder* AddOneI32Query(const FOneI32Query& Query); + + USubscriptionBuilder* AddOneI64Query(const FOneI64Query& Query); + + USubscriptionBuilder* AddOneI8Query(const FOneI8Query& Query); + + USubscriptionBuilder* AddOneIdentityQuery(const FOneIdentityQuery& Query); + + USubscriptionBuilder* AddOneSimpleEnumQuery(const FOneSimpleEnumQuery& Query); + + USubscriptionBuilder* AddOneStringQuery(const FOneStringQuery& Query); + + USubscriptionBuilder* AddOneTimestampQuery(const FOneTimestampQuery& Query); + + USubscriptionBuilder* AddOneU128Query(const FOneU128Query& Query); + + USubscriptionBuilder* AddOneU16Query(const FOneU16Query& Query); + + USubscriptionBuilder* AddOneU256Query(const FOneU256Query& Query); + + USubscriptionBuilder* AddOneU32Query(const FOneU32Query& Query); + + USubscriptionBuilder* AddOneU64Query(const FOneU64Query& Query); + + USubscriptionBuilder* AddOneU8Query(const FOneU8Query& Query); + + USubscriptionBuilder* AddOneUnitStructQuery(const FOneUnitStructQuery& Query); + + USubscriptionBuilder* AddOneUuidQuery(const FOneUuidQuery& Query); + + USubscriptionBuilder* AddOptionEveryPrimitiveStructQuery(const FOptionEveryPrimitiveStructQuery& Query); + + USubscriptionBuilder* AddOptionI32Query(const FOptionI32Query& Query); + + USubscriptionBuilder* AddOptionIdentityQuery(const FOptionIdentityQuery& Query); + + USubscriptionBuilder* AddOptionSimpleEnumQuery(const FOptionSimpleEnumQuery& Query); + + USubscriptionBuilder* AddOptionStringQuery(const FOptionStringQuery& Query); + + USubscriptionBuilder* AddOptionUuidQuery(const FOptionUuidQuery& Query); + + USubscriptionBuilder* AddOptionVecOptionI32Query(const FOptionVecOptionI32Query& Query); + + USubscriptionBuilder* AddPkBoolQuery(const FPkBoolQuery& Query); + + USubscriptionBuilder* AddPkConnectionIdQuery(const FPkConnectionIdQuery& Query); + + USubscriptionBuilder* AddPkI128Query(const FPkI128Query& Query); + + USubscriptionBuilder* AddPkI16Query(const FPkI16Query& Query); + + USubscriptionBuilder* AddPkI256Query(const FPkI256Query& Query); + + USubscriptionBuilder* AddPkI32Query(const FPkI32Query& Query); + + USubscriptionBuilder* AddPkI64Query(const FPkI64Query& Query); + + USubscriptionBuilder* AddPkI8Query(const FPkI8Query& Query); + + USubscriptionBuilder* AddPkIdentityQuery(const FPkIdentityQuery& Query); + + USubscriptionBuilder* AddPkSimpleEnumQuery(const FPkSimpleEnumQuery& Query); + + USubscriptionBuilder* AddPkStringQuery(const FPkStringQuery& Query); + + USubscriptionBuilder* AddPkU128Query(const FPkU128Query& Query); + + USubscriptionBuilder* AddPkU16Query(const FPkU16Query& Query); + + USubscriptionBuilder* AddPkU256Query(const FPkU256Query& Query); + + USubscriptionBuilder* AddPkU32Query(const FPkU32Query& Query); + + USubscriptionBuilder* AddPkU32TwoQuery(const FPkU32TwoQuery& Query); + + USubscriptionBuilder* AddPkU64Query(const FPkU64Query& Query); + + USubscriptionBuilder* AddPkU8Query(const FPkU8Query& Query); + + USubscriptionBuilder* AddPkUuidQuery(const FPkUuidQuery& Query); + + USubscriptionBuilder* AddResultEveryPrimitiveStructStringQuery(const FResultEveryPrimitiveStructStringQuery& Query); + + USubscriptionBuilder* AddResultI32StringQuery(const FResultI32StringQuery& Query); + + USubscriptionBuilder* AddResultIdentityStringQuery(const FResultIdentityStringQuery& Query); + + USubscriptionBuilder* AddResultSimpleEnumI32Query(const FResultSimpleEnumI32Query& Query); + + USubscriptionBuilder* AddResultStringI32Query(const FResultStringI32Query& Query); + + USubscriptionBuilder* AddResultVecI32StringQuery(const FResultVecI32StringQuery& Query); + + USubscriptionBuilder* AddScheduledTableQuery(const FScheduledTableQuery& Query); + + USubscriptionBuilder* AddTableHoldsTableQuery(const FTableHoldsTableQuery& Query); + + USubscriptionBuilder* AddUniqueBoolQuery(const FUniqueBoolQuery& Query); + + USubscriptionBuilder* AddUniqueConnectionIdQuery(const FUniqueConnectionIdQuery& Query); + + USubscriptionBuilder* AddUniqueI128Query(const FUniqueI128Query& Query); + + USubscriptionBuilder* AddUniqueI16Query(const FUniqueI16Query& Query); + + USubscriptionBuilder* AddUniqueI256Query(const FUniqueI256Query& Query); + + USubscriptionBuilder* AddUniqueI32Query(const FUniqueI32Query& Query); + + USubscriptionBuilder* AddUniqueI64Query(const FUniqueI64Query& Query); + + USubscriptionBuilder* AddUniqueI8Query(const FUniqueI8Query& Query); + + USubscriptionBuilder* AddUniqueIdentityQuery(const FUniqueIdentityQuery& Query); + + USubscriptionBuilder* AddUniqueStringQuery(const FUniqueStringQuery& Query); + + USubscriptionBuilder* AddUniqueU128Query(const FUniqueU128Query& Query); + + USubscriptionBuilder* AddUniqueU16Query(const FUniqueU16Query& Query); + + USubscriptionBuilder* AddUniqueU256Query(const FUniqueU256Query& Query); + + USubscriptionBuilder* AddUniqueU32Query(const FUniqueU32Query& Query); + + USubscriptionBuilder* AddUniqueU64Query(const FUniqueU64Query& Query); + + USubscriptionBuilder* AddUniqueU8Query(const FUniqueU8Query& Query); + + USubscriptionBuilder* AddUniqueUuidQuery(const FUniqueUuidQuery& Query); + + USubscriptionBuilder* AddUsersQuery(const FUsersQuery& Query); + + USubscriptionBuilder* AddVecBoolQuery(const FVecBoolQuery& Query); + + USubscriptionBuilder* AddVecByteStructQuery(const FVecByteStructQuery& Query); + + USubscriptionBuilder* AddVecConnectionIdQuery(const FVecConnectionIdQuery& Query); + + USubscriptionBuilder* AddVecEnumWithPayloadQuery(const FVecEnumWithPayloadQuery& Query); + + USubscriptionBuilder* AddVecEveryPrimitiveStructQuery(const FVecEveryPrimitiveStructQuery& Query); + + USubscriptionBuilder* AddVecEveryVecStructQuery(const FVecEveryVecStructQuery& Query); + + USubscriptionBuilder* AddVecF32Query(const FVecF32Query& Query); + + USubscriptionBuilder* AddVecF64Query(const FVecF64Query& Query); + + USubscriptionBuilder* AddVecI128Query(const FVecI128Query& Query); + + USubscriptionBuilder* AddVecI16Query(const FVecI16Query& Query); + + USubscriptionBuilder* AddVecI256Query(const FVecI256Query& Query); + + USubscriptionBuilder* AddVecI32Query(const FVecI32Query& Query); + + USubscriptionBuilder* AddVecI64Query(const FVecI64Query& Query); + + USubscriptionBuilder* AddVecI8Query(const FVecI8Query& Query); + + USubscriptionBuilder* AddVecIdentityQuery(const FVecIdentityQuery& Query); + + USubscriptionBuilder* AddVecSimpleEnumQuery(const FVecSimpleEnumQuery& Query); + + USubscriptionBuilder* AddVecStringQuery(const FVecStringQuery& Query); + + USubscriptionBuilder* AddVecTimestampQuery(const FVecTimestampQuery& Query); + + USubscriptionBuilder* AddVecU128Query(const FVecU128Query& Query); + + USubscriptionBuilder* AddVecU16Query(const FVecU16Query& Query); + + USubscriptionBuilder* AddVecU256Query(const FVecU256Query& Query); + + USubscriptionBuilder* AddVecU32Query(const FVecU32Query& Query); + + USubscriptionBuilder* AddVecU64Query(const FVecU64Query& Query); + + USubscriptionBuilder* AddVecU8Query(const FVecU8Query& Query); + + USubscriptionBuilder* AddVecUnitStructQuery(const FVecUnitStructQuery& Query); + + USubscriptionBuilder* AddVecUuidQuery(const FVecUuidQuery& Query); + + /** Convenience for subscribing to all rows from all public sources, including views */ UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") USubscriptionHandle* SubscribeToAllTables(); @@ -10394,6 +19091,9 @@ class TESTCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase UPROPERTY() class UDbConnection* Conn; + UPROPERTY() + TArray PendingSqlQueries; + // Delegates stored so Subscribe() can bind forwarding callbacks FOnSubscriptionApplied OnAppliedDelegateInternal; FOnSubscriptionError OnErrorDelegateInternal; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h index 1c4ef086cf8..1a763d5ef20 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h @@ -46,7 +46,7 @@ struct TESTCLIENT_API FEnumWithPayloadType public: FEnumWithPayloadType() = default; - TVariant, uint32, int16, uint8, FSpacetimeDBInt128, FString, int64, uint64, int32, double, FSpacetimeDBInt256, TArray, bool, int8, uint16, FSpacetimeDBUInt128, float, FSpacetimeDBUInt256, FSpacetimeDBConnectionId, TArray, TArray, FSpacetimeDBTimestamp> MessageData; + TVariant, bool, FSpacetimeDBTimestamp, FSpacetimeDBUuid, TArray, float, double, FString, FSpacetimeDBIdentity, uint16, uint32, uint64, FSpacetimeDBUInt256, int16, FSpacetimeDBUInt128, uint8, int32, int64, FSpacetimeDBInt128, int8, FSpacetimeDBInt256, TArray, TArray> MessageData; UPROPERTY(BlueprintReadOnly) EEnumWithPayloadTag Tag = static_cast(0); diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/Tests/SpacetimeFullClientTests.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/Tests/SpacetimeFullClientTests.h index 02b26831c9f..03e154d1a11 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/Tests/SpacetimeFullClientTests.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/Tests/SpacetimeFullClientTests.h @@ -132,3 +132,4 @@ IMPLEMENT_SIMPLE_AUTOMATION_TEST(FOverlappingSubscriptionsTest, "SpacetimeDB.Tes IMPLEMENT_SIMPLE_AUTOMATION_TEST(FInsertCallUuidV4Test, "SpacetimeDB.TestClient.InsertCallUuidV4Test", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter) IMPLEMENT_SIMPLE_AUTOMATION_TEST(FInsertCallUuidV7Test, "SpacetimeDB.TestClient.InsertCallUuidV7Test", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter) +IMPLEMENT_SIMPLE_AUTOMATION_TEST(FBlueprintQueryBuilderBasicFlowTest, "SpacetimeDB.TestClient.BlueprintQueryBuilderBasicFlowTest", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter) diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp index e324c566449..7ab3f3c71f5 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -557,6 +557,12 @@ USubscriptionBuilder* USubscriptionBuilder::OnError(FOnSubscriptionError Callbac OnErrorDelegateInternal = Callback; return this; } +USubscriptionHandle* USubscriptionBuilder::Subscribe() +{ + const TArray SqlQueries = PendingSqlQueries; + PendingSqlQueries.Empty(); + return Subscribe(SqlQueries); +} USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL) { USubscriptionHandle* Handle = NewObject(); @@ -584,7 +590,37 @@ USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL) } USubscriptionHandle* USubscriptionBuilder::SubscribeToAllTables() { - return Subscribe({ "SELECT * FROM * " }); + return Subscribe(FQueryBuilder::AllTablesSqlQueries()); +} + +USubscriptionBuilder* USubscriptionBuilder::AddBlueprintQuery(const FBlueprintQuery& Query) +{ + PendingSqlQueries.Add(Query.Sql); + return this; +} + +USubscriptionBuilder* USubscriptionBuilder::AddMyTableQuery(const FMyTableQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPkUuidQuery(const FPkUuidQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddProcInsertsIntoQuery(const FProcInsertsIntoQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); } USubscriptionHandle::USubscriptionHandle(UDbConnection* InConn) @@ -667,7 +703,7 @@ void UDbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpaceti { if (OnConnectDelegate.IsBound()) { - OnConnectDelegate.Execute(this, Identity, Token); + OnConnectDelegate.Execute(this, InIdentity, InToken); } } void UDbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error) diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h index c991307b61b..93e6412bc41 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 2.0.3 (commit b6045fcc908d2846f8fb26570c2f300f5d685996). +// This was generated using spacetimedb cli version 2.0.5 (commit 047dac974526f5c5aff873026e90177270b10f38). #pragma once #include "CoreMinimal.h" @@ -23,8 +23,12 @@ #include "ModuleBindings/Procedures/WillPanic.g.h" #include "ModuleBindings/ReducerBase.g.h" #include "ModuleBindings/Reducers/ScheduleProc.g.h" +#include "ModuleBindings/Types/MyTableType.g.h" +#include "ModuleBindings/Types/PkUuidType.g.h" +#include "ModuleBindings/Types/ProcInsertsIntoType.g.h" #include "ModuleBindings/Types/ReturnEnumType.g.h" #include "ModuleBindings/Types/ReturnStructType.g.h" +#include "QueryBuilder/query_builder.h" #include "Types/Builtins.h" #include "Types/UnitType.h" #include "SpacetimeDBClient.g.generated.h" @@ -1107,6 +1111,795 @@ class TESTPROCCLIENT_API URemoteProcedures : public UObject class UDbConnection* Conn; }; +// QueryBuilder types +struct TESTPROCCLIENT_API FMyTableCols; +struct TESTPROCCLIENT_API FMyTableIxCols; +struct TESTPROCCLIENT_API FPkUuidCols; +struct TESTPROCCLIENT_API FPkUuidIxCols; +struct TESTPROCCLIENT_API FProcInsertsIntoCols; +struct TESTPROCCLIENT_API FProcInsertsIntoIxCols; + +struct TESTPROCCLIENT_API FMyTableCols +{ + explicit FMyTableCols(const char* TableName) + : Field(TableName, "field") {} + + ::SpacetimeDB::query_builder::Col Field; +}; + +struct TESTPROCCLIENT_API FMyTableIxCols +{ + explicit FMyTableIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTPROCCLIENT_API FPkUuidCols +{ + explicit FPkUuidCols(const char* TableName) + : U(TableName, "u"), Data(TableName, "data") {} + + ::SpacetimeDB::query_builder::Col U; + ::SpacetimeDB::query_builder::Col Data; +}; + +struct TESTPROCCLIENT_API FPkUuidIxCols +{ + explicit FPkUuidIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTPROCCLIENT_API FProcInsertsIntoCols +{ + explicit FProcInsertsIntoCols(const char* TableName) + : ReducerTs(TableName, "reducer_ts"), ProcedureTs(TableName, "procedure_ts"), X(TableName, "x"), Y(TableName, "y") {} + + ::SpacetimeDB::query_builder::Col ReducerTs; + ::SpacetimeDB::query_builder::Col ProcedureTs; + ::SpacetimeDB::query_builder::Col X; + ::SpacetimeDB::query_builder::Col Y; +}; + +struct TESTPROCCLIENT_API FProcInsertsIntoIxCols +{ + explicit FProcInsertsIntoIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTPROCCLIENT_API FFrom +{ + [[nodiscard]] ::SpacetimeDB::query_builder::Table MyTable() const { return ::SpacetimeDB::query_builder::Table("my_table", FMyTableCols("my_table"), FMyTableIxCols("my_table")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PkUuid() const { return ::SpacetimeDB::query_builder::Table("pk_uuid", FPkUuidCols("pk_uuid"), FPkUuidIxCols("pk_uuid")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ProcInsertsInto() const { return ::SpacetimeDB::query_builder::Table("proc_inserts_into", FProcInsertsIntoCols("proc_inserts_into"), FProcInsertsIntoIxCols("proc_inserts_into")); } +}; + +struct TESTPROCCLIENT_API FQueryBuilder +{ + FFrom From; + + static TArray AllTablesSqlQueries() + { + TArray Sql; + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.MyTable().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkUuid().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ProcInsertsInto().into_sql().c_str()))); + return Sql; + } +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintPredicate +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FMyTableQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FPkUuidQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FProcInsertsIntoQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintBoolColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintUInt8Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintInt32Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintInt64Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintFloatColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintDoubleColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintStringColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintIdentityColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintConnectionIdColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintTimestampColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTPROCCLIENT_API FBlueprintUuidColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +UCLASS(BlueprintType) +class TESTPROCCLIENT_API UQueryBuilderBlueprintLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyTable", meta=(DisplayName="From MyTable")) + static FMyTableQuery FromMyTable() + { + FMyTableQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.MyTable().into_sql().c_str())); + Query.ResultSourceName = TEXT("my_table"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyTable", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_MyTableQueryToBlueprintQuery(const FMyTableQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyTable", meta=(DisplayName="MyTable Where")) + static FMyTableQuery MyTableWhere(FMyTableQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid", meta=(DisplayName="From PkUuid")) + static FPkUuidQuery FromPkUuid() + { + FPkUuidQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PkUuid().into_sql().c_str())); + Query.ResultSourceName = TEXT("pk_uuid"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PkUuidQueryToBlueprintQuery(const FPkUuidQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid|Columns", meta=(DisplayName="PkUuid U")) + static FBlueprintUuidColumn PkUuidU(const FPkUuidQuery& Query) + { + FBlueprintUuidColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_uuid") : Query.ResultSourceName; + Column.ColumnName = TEXT("u"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid|Columns", meta=(DisplayName="PkUuid Data")) + static FBlueprintUInt8Column PkUuidData(const FPkUuidQuery& Query) + { + FBlueprintUInt8Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("pk_uuid") : Query.ResultSourceName; + Column.ColumnName = TEXT("data"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PkUuid", meta=(DisplayName="PkUuid Where")) + static FPkUuidQuery PkUuidWhere(FPkUuidQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ProcInsertsInto", meta=(DisplayName="From ProcInsertsInto")) + static FProcInsertsIntoQuery FromProcInsertsInto() + { + FProcInsertsIntoQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ProcInsertsInto().into_sql().c_str())); + Query.ResultSourceName = TEXT("proc_inserts_into"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ProcInsertsInto", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ProcInsertsIntoQueryToBlueprintQuery(const FProcInsertsIntoQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ProcInsertsInto|Columns", meta=(DisplayName="ProcInsertsInto ReducerTs")) + static FBlueprintTimestampColumn ProcInsertsIntoReducerTs(const FProcInsertsIntoQuery& Query) + { + FBlueprintTimestampColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("proc_inserts_into") : Query.ResultSourceName; + Column.ColumnName = TEXT("reducer_ts"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ProcInsertsInto|Columns", meta=(DisplayName="ProcInsertsInto ProcedureTs")) + static FBlueprintTimestampColumn ProcInsertsIntoProcedureTs(const FProcInsertsIntoQuery& Query) + { + FBlueprintTimestampColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("proc_inserts_into") : Query.ResultSourceName; + Column.ColumnName = TEXT("procedure_ts"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ProcInsertsInto|Columns", meta=(DisplayName="ProcInsertsInto X")) + static FBlueprintUInt8Column ProcInsertsIntoX(const FProcInsertsIntoQuery& Query) + { + FBlueprintUInt8Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("proc_inserts_into") : Query.ResultSourceName; + Column.ColumnName = TEXT("x"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ProcInsertsInto|Columns", meta=(DisplayName="ProcInsertsInto Y")) + static FBlueprintUInt8Column ProcInsertsIntoY(const FProcInsertsIntoQuery& Query) + { + FBlueprintUInt8Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("proc_inserts_into") : Query.ResultSourceName; + Column.ColumnName = TEXT("y"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ProcInsertsInto", meta=(DisplayName="ProcInsertsInto Where")) + static FProcInsertsIntoQuery ProcInsertsIntoWhere(FProcInsertsIntoQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Bool Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate BoolEqual(const FBlueprintBoolColumn& Column, const bool Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UInt8Equal(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate UInt8GreaterThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate UInt8GreaterEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate UInt8LessThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate UInt8LessEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int32Equal(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int32GreaterThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int32GreaterEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int32LessThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int32LessEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int64Equal(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int64GreaterThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int64GreaterEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int64LessThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int64LessEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate FloatEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate FloatGreaterThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate FloatGreaterEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate FloatLessThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate FloatLessEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate DoubleEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate DoubleGreaterThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate DoubleGreaterEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate DoubleLessThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate DoubleLessEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="String Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate StringEqual(const FBlueprintStringColumn& Column, const FString& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Identity Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate IdentityEqual(const FBlueprintIdentityColumn& Column, const FSpacetimeDBIdentity& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="ConnectionId Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate ConnectionIdEqual(const FBlueprintConnectionIdColumn& Column, const FSpacetimeDBConnectionId& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate TimestampEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate TimestampGreaterThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate TimestampGreaterEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate TimestampLessThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate TimestampLessEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Uuid Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UuidEqual(const FBlueprintUuidColumn& Column, const FSpacetimeDBUuid& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="AND", CompactNodeTitle="AND", Keywords="and &&")) + static FBlueprintPredicate And(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) AND (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="OR", CompactNodeTitle="OR", Keywords="or ||")) + static FBlueprintPredicate Or(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) OR (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="NOT", CompactNodeTitle="NOT", Keywords="not !")) + static FBlueprintPredicate Not(const FBlueprintPredicate& A) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("NOT (%s)"), *A.Sql); + return Predicate; + } + +private: + static FString AppendPredicate(const FString& Sql, const FString& Predicate) + { + if (Sql.Contains(TEXT(" WHERE "))) + { + return Sql + TEXT(" AND (") + Predicate + TEXT(")"); + } + return Sql + TEXT(" WHERE (") + Predicate + TEXT(")"); + } +}; + // SubscriptionBuilder class UCLASS(BlueprintType) class TESTPROCCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase @@ -1122,9 +1915,31 @@ class TESTPROCCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase USubscriptionBuilder* OnError(FOnSubscriptionError Callback); UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + USubscriptionHandle* Subscribe(); + USubscriptionHandle* Subscribe(const TArray& SQL); - /** Convenience for subscribing to all rows from all tables */ + template + USubscriptionBuilder* AddQuery(TFn&& Build) + { + FQueryBuilder Q; + auto Query = std::forward(Build)(Q); + static_assert(::SpacetimeDB::query_builder::QueryBuilderReturn, + "Typed subscription queries must return a query_builder table/query expression."); + PendingSqlQueries.Add(FString(UTF8_TO_TCHAR(Query.into_sql().c_str()))); + return this; + } + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB", meta=(DisplayName="AddQuery", ScriptName="AddQuery")) + USubscriptionBuilder* AddBlueprintQuery(const FBlueprintQuery& Query); + + USubscriptionBuilder* AddMyTableQuery(const FMyTableQuery& Query); + + USubscriptionBuilder* AddPkUuidQuery(const FPkUuidQuery& Query); + + USubscriptionBuilder* AddProcInsertsIntoQuery(const FProcInsertsIntoQuery& Query); + + /** Convenience for subscribing to all rows from all public sources, including views */ UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") USubscriptionHandle* SubscribeToAllTables(); @@ -1136,6 +1951,9 @@ class TESTPROCCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase UPROPERTY() class UDbConnection* Conn; + UPROPERTY() + TArray PendingSqlQueries; + // Delegates stored so Subscribe() can bind forwarding callbacks FOnSubscriptionApplied OnAppliedDelegateInternal; FOnSubscriptionError OnErrorDelegateInternal; diff --git a/sdks/unreal/tests/TestViewClient/.vsconfig b/sdks/unreal/tests/TestViewClient/.vsconfig new file mode 100644 index 00000000000..3b919ea7b8f --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/.vsconfig @@ -0,0 +1,17 @@ +{ + "version": "1.0", + "components": [ + "Component.Unreal.Debugger", + "Component.Unreal.Ide", + "Microsoft.Net.Component.4.6.2.TargetingPack", + "Microsoft.VisualStudio.Component.VC.14.38.17.8.ATL", + "Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64", + "Microsoft.VisualStudio.Component.VC.Llvm.Clang", + "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "Microsoft.VisualStudio.Component.Windows11SDK.22621", + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.NativeDesktop", + "Microsoft.VisualStudio.Workload.NativeGame" + ] +} diff --git a/sdks/unreal/tests/TestViewClient/Config/DefaultEditor.ini b/sdks/unreal/tests/TestViewClient/Config/DefaultEditor.ini new file mode 100644 index 00000000000..e69de29bb2d diff --git a/sdks/unreal/tests/TestViewClient/Config/DefaultEditorPerProjectUserSettings.ini b/sdks/unreal/tests/TestViewClient/Config/DefaultEditorPerProjectUserSettings.ini new file mode 100644 index 00000000000..66fac145c2f --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Config/DefaultEditorPerProjectUserSettings.ini @@ -0,0 +1,5 @@ + + +[/Script/TestViewClient.SpacetimeDBSettings] +SpacetimeDbTestName=sdk-test-view + diff --git a/sdks/unreal/tests/TestViewClient/Config/DefaultEngine.ini b/sdks/unreal/tests/TestViewClient/Config/DefaultEngine.ini new file mode 100644 index 00000000000..0239c099c52 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Config/DefaultEngine.ini @@ -0,0 +1,57 @@ +[Zen] +bEnableZen=false +bEnableZenLocal=false + +[/Script/Zen.ZenServiceSettings] +bEnabled=False +bAutoLaunch=False + +[Audio] +UseAudioMixer=True + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +!D3D12TargetedShaderFormats=ClearArray ++D3D12TargetedShaderFormats=PCD3D_SM6 + +[/Script/Engine.RendererSettings] +r.AllowStaticLighting=0 +r.GenerateMeshDistanceFields=False +r.DynamicGlobalIlluminationMethod=1 +r.ReflectionMethod=1 +r.Shadow.Virtual.Enable=1 +r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True +r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8 +r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8 +r.SkinCache.CompileShaders=True +r.RayTracing.RayTracingProxies.ProjectEnabled=True + +[/Script/WorldPartitionEditor.WorldPartitionEditorSettings] +CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet' + +[/Script/Engine.UserInterfaceSettings] +bAuthorizeAutomaticWidgetVariableCreation=False +FontDPIPreset=Standard +FontDPI=72 + +[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] +bEnablePlugin=True +bAllowNetworkConnection=True +SecurityToken=FC2469BA449F3D6AFB81E9A6E6FCBE4B +bIncludeInShipping=False +bAllowExternalStartInShipping=False +bCompileAFSProject=False +bUseCompression=False +bLogFiles=False +bReportStats=False +ConnectionType=USBOnly +bUseManualIPAddress=False +ManualIPAddress= + diff --git a/sdks/unreal/tests/TestViewClient/Config/DefaultGame.ini b/sdks/unreal/tests/TestViewClient/Config/DefaultGame.ini new file mode 100644 index 00000000000..4754b466b8d --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Config/DefaultGame.ini @@ -0,0 +1,5 @@ +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=9B36AE4A4DF62F180A496F93BE6813D9 + +[/Script/CommonUI.CommonUISettings] +CommonButtonAcceptKeyHandling=TriggerClick diff --git a/sdks/unreal/tests/TestViewClient/Config/DefaultInput.ini b/sdks/unreal/tests/TestViewClient/Config/DefaultInput.ini new file mode 100644 index 00000000000..a72fda22b24 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Config/DefaultInput.ini @@ -0,0 +1,85 @@ +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bEnableMotionControls=True +bFilterInputByPlatformUser=False +bShouldFlushPressedKeysOnViewportFocusLost=True +bEnableDynamicComponentInputBinding=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 +DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput +DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient.Target.cs b/sdks/unreal/tests/TestViewClient/Source/TestViewClient.Target.cs new file mode 100644 index 00000000000..cbc530e7e6f --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient.Target.cs @@ -0,0 +1,15 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class TestViewClientTarget : TargetRules +{ + public TestViewClientTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + DefaultBuildSettings = BuildSettingsVersion.V5; + + ExtraModuleNames.AddRange( new string[] { "TestViewClient" } ); + } +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp new file mode 100644 index 00000000000..fe1df981db1 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -0,0 +1,623 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/SpacetimeDBClient.g.h" +#include "DBCache/WithBsatn.h" +#include "BSATN/UEBSATNHelpers.h" +#include "ModuleBindings/Tables/MyPlayerTable.g.h" +#include "ModuleBindings/Tables/MyPlayerAndLevelTable.g.h" +#include "ModuleBindings/Tables/NearbyPlayersTable.g.h" +#include "ModuleBindings/Tables/PlayerTable.g.h" +#include "ModuleBindings/Tables/PlayerLevelTable.g.h" +#include "ModuleBindings/Tables/PlayersAtLevel0Table.g.h" + +UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ + Db = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteTables")); + Db->Initialize(); + + Reducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteReducers")); + Reducers->Conn = this; + + Procedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteProcedures")); + Procedures->Conn = this; + + RegisterTable(TEXT("my_player"), Db->MyPlayer); + RegisterTable(TEXT("my_player_and_level"), Db->MyPlayerAndLevel); + RegisterTable(TEXT("nearby_players"), Db->NearbyPlayers); + RegisterTable(TEXT("player"), Db->Player); + RegisterTable(TEXT("player_level"), Db->PlayerLevel); + RegisterTable(TEXT("players_at_level_0"), Db->PlayersAtLevel0); +} + +FContextBase::FContextBase(UDbConnection* InConn) +{ + Db = InConn->Db; + Reducers = InConn->Reducers; + Procedures = InConn->Procedures; + Conn = InConn; +} +bool FContextBase::IsActive() const +{ + return Conn->IsActive(); +} +void FContextBase::Disconnect() +{ + Conn->Disconnect(); +} +USubscriptionBuilder* FContextBase::SubscriptionBuilder() +{ + return Conn->SubscriptionBuilder(); +} +bool FContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const +{ + return Conn->TryGetIdentity(OutIdentity); +} +FSpacetimeDBConnectionId FContextBase::GetConnectionId() const +{ + return Conn->GetConnectionId(); +} + +void URemoteTables::Initialize() +{ + + /** Creating tables */ + MyPlayer = NewObject(this); + MyPlayerAndLevel = NewObject(this); + NearbyPlayers = NewObject(this); + Player = NewObject(this); + PlayerLevel = NewObject(this); + PlayersAtLevel0 = NewObject(this); + /**/ + + /** Initialization */ + MyPlayer->PostInitialize(); + MyPlayerAndLevel->PostInitialize(); + NearbyPlayers->PostInitialize(); + Player->PostInitialize(); + PlayerLevel->PostInitialize(); + PlayersAtLevel0->PostInitialize(); + /**/ +} + +void URemoteReducers::DeletePlayer(const FSpacetimeDBIdentity& Identity) +{ + if (!Conn) + { + UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); + return; + } + + FDeletePlayerArgs ReducerArgs(Identity); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_player"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePlayer(ReducerArgs)); } +} + +bool URemoteReducers::InvokeDeletePlayer(const FReducerEventContext& Context, const UDeletePlayerReducer* Args) +{ + if (!OnDeletePlayer.IsBound()) + { + // Handle unhandled reducer error + if (InternalOnUnhandledReducerError.IsBound()) + { + // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases + // For now, just broadcast any error + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for DeletePlayer")); + } + return false; + } + + OnDeletePlayer.Broadcast(Context, Args->Identity); + return true; +} + +bool URemoteReducers::InvokeDeletePlayerWithArgs(const FReducerEventContext& Context, const FDeletePlayerArgs& Args) +{ + if (!OnDeletePlayer.IsBound()) + { + if (InternalOnUnhandledReducerError.IsBound()) + { + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for DeletePlayer")); + } + return false; + } + + OnDeletePlayer.Broadcast(Context, Args.Identity); + return true; +} + +void URemoteReducers::InsertPlayer(const FSpacetimeDBIdentity& Identity, const uint64 Level) +{ + if (!Conn) + { + UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); + return; + } + + FInsertPlayerArgs ReducerArgs(Identity, Level); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_player"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPlayer(ReducerArgs)); } +} + +bool URemoteReducers::InvokeInsertPlayer(const FReducerEventContext& Context, const UInsertPlayerReducer* Args) +{ + if (!OnInsertPlayer.IsBound()) + { + // Handle unhandled reducer error + if (InternalOnUnhandledReducerError.IsBound()) + { + // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases + // For now, just broadcast any error + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertPlayer")); + } + return false; + } + + OnInsertPlayer.Broadcast(Context, Args->Identity, Args->Level); + return true; +} + +bool URemoteReducers::InvokeInsertPlayerWithArgs(const FReducerEventContext& Context, const FInsertPlayerArgs& Args) +{ + if (!OnInsertPlayer.IsBound()) + { + if (InternalOnUnhandledReducerError.IsBound()) + { + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertPlayer")); + } + return false; + } + + OnInsertPlayer.Broadcast(Context, Args.Identity, Args.Level); + return true; +} + +void URemoteReducers::MovePlayer(const int32 Dx, const int32 Dy) +{ + if (!Conn) + { + UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); + return; + } + + FMovePlayerArgs ReducerArgs(Dx, Dy); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("move_player"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::MovePlayer(ReducerArgs)); } +} + +bool URemoteReducers::InvokeMovePlayer(const FReducerEventContext& Context, const UMovePlayerReducer* Args) +{ + if (!OnMovePlayer.IsBound()) + { + // Handle unhandled reducer error + if (InternalOnUnhandledReducerError.IsBound()) + { + // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases + // For now, just broadcast any error + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for MovePlayer")); + } + return false; + } + + OnMovePlayer.Broadcast(Context, Args->Dx, Args->Dy); + return true; +} + +bool URemoteReducers::InvokeMovePlayerWithArgs(const FReducerEventContext& Context, const FMovePlayerArgs& Args) +{ + if (!OnMovePlayer.IsBound()) + { + if (InternalOnUnhandledReducerError.IsBound()) + { + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for MovePlayer")); + } + return false; + } + + OnMovePlayer.Broadcast(Context, Args.Dx, Args.Dy); + return true; +} + +void UDbConnection::PostInitProperties() +{ + Super::PostInitProperties(); + + // Connect OnUnhandledReducerError to Reducers.InternalOnUnhandledReducerError + if (Reducers) + { + Reducers->InternalOnUnhandledReducerError.AddDynamic(this, &UDbConnection::OnUnhandledReducerErrorHandler); + } + + // Connect OnUnhandledProcedureError to Procedures.InternalOnUnhandledProcedureError + if (Procedures) + { + Procedures->InternalOnUnhandledProcedureError.AddDynamic(this, &UDbConnection::OnUnhandledProcedureErrorHandler); + } +} + +UFUNCTION() +void UDbConnection::OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error) +{ + if (OnUnhandledReducerError.IsBound()) + { + OnUnhandledReducerError.Broadcast(Context, Error); + } +} + +UFUNCTION() +void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error) +{ + if (OnUnhandledProcedureError.IsBound()) + { + OnUnhandledProcedureError.Broadcast(Context, Error); + } +} + +void UDbConnection::RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer) +{ + Reducer.RequestId = RequestId; + PendingTypedReducers.Add(RequestId, MoveTemp(Reducer)); +} + +bool UDbConnection::TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const +{ + if (const FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + return true; + } + return false; +} + +bool UDbConnection::TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer) +{ + if (FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + PendingTypedReducers.Remove(RequestId); + return true; + } + return false; +} + +void UDbConnection::ReducerEvent(const FReducerEvent& Event) +{ + if (!Reducers) { return; } + + FReducer DecodedReducer; + if (!TryTakePendingTypedReducer(Event.RequestId, DecodedReducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), Event.RequestId); + HandleProtocolViolation(ErrorMessage); + return; + } + + FTestViewClientReducerEvent ReducerEvent; + ReducerEvent.CallerConnectionId = Event.CallerConnectionId; + ReducerEvent.CallerIdentity = Event.CallerIdentity; + ReducerEvent.EnergyConsumed = Event.EnergyConsumed; + ReducerEvent.Status = Event.Status; + ReducerEvent.Timestamp = Event.Timestamp; + ReducerEvent.Reducer = DecodedReducer; + + FReducerEventContext Context(this, ReducerEvent); + + // Dispatch by typed reducer metadata + const FString& ReducerName = ReducerEvent.Reducer.ReducerName; + + if (ReducerName == TEXT("delete_player")) + { + FDeletePlayerArgs Args = ReducerEvent.Reducer.GetAsDeletePlayer(); + Reducers->InvokeDeletePlayerWithArgs(Context, Args); + return; + } + if (ReducerName == TEXT("insert_player")) + { + FInsertPlayerArgs Args = ReducerEvent.Reducer.GetAsInsertPlayer(); + Reducers->InvokeInsertPlayerWithArgs(Context, Args); + return; + } + if (ReducerName == TEXT("move_player")) + { + FMovePlayerArgs Args = ReducerEvent.Reducer.GetAsMovePlayer(); + Reducers->InvokeMovePlayerWithArgs(Context, Args); + return; + } + + UE_LOG(LogTemp, Warning, TEXT("Unknown reducer: %s"), *ReducerName); +} + +void UDbConnection::ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) +{ + if (!Reducers) { return; } + + FTestViewClientReducerEvent ReducerEvent; + ReducerEvent.CallerConnectionId = Event.CallerConnectionId; + ReducerEvent.CallerIdentity = Event.CallerIdentity; + ReducerEvent.EnergyConsumed = Event.EnergyConsumed; + ReducerEvent.Status = Event.Status; + ReducerEvent.Timestamp = Event.Timestamp; + + FReducerEventContext Context(this, ReducerEvent); + + if (Reducers->InternalOnUnhandledReducerError.IsBound()) + { + Reducers->InternalOnUnhandledReducerError.Broadcast(Context, ErrorMessage); + } +} + +void UDbConnection::ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) +{ + if (!Procedures) { return; } + + FTestViewClientProcedureEvent ProcedureEvent; + ProcedureEvent.Status = FSpacetimeDBProcedureStatus::FromStatus(Event.Status); + ProcedureEvent.Timestamp = Event.Timestamp; + + FProcedureEventContext Context(this, ProcedureEvent); + + if (Procedures->InternalOnUnhandledProcedureError.IsBound()) + { + Procedures->InternalOnUnhandledProcedureError.Broadcast(Context, ErrorMessage); + } +} + +UDbConnectionBuilder* UDbConnection::Builder() +{ + return NewObject(); +} +// Added for creating subscriptions +USubscriptionBuilder* UDbConnection::SubscriptionBuilder() +{ + USubscriptionBuilder* Builder = NewObject(this); + Builder->Conn = this; + return Builder; +} +USubscriptionBuilder* USubscriptionBuilder::OnApplied(FOnSubscriptionApplied Callback) +{ + OnAppliedDelegateInternal = Callback; + return this; +} +USubscriptionBuilder* USubscriptionBuilder::OnError(FOnSubscriptionError Callback) +{ + OnErrorDelegateInternal = Callback; + return this; +} +USubscriptionHandle* USubscriptionBuilder::Subscribe() +{ + const TArray SqlQueries = PendingSqlQueries; + PendingSqlQueries.Empty(); + return Subscribe(SqlQueries); +} +USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL) +{ + USubscriptionHandle* Handle = NewObject(); + + // Store user callbacks on the handle + Handle->Conn = Conn; + Handle->OnAppliedDelegate = OnAppliedDelegateInternal; + Handle->OnErrorDelegate = OnErrorDelegateInternal; + + // Bind forwarding functions that will convert base contexts + FSubscriptionEventDelegate BaseApplied; + BaseApplied.BindUFunction(Handle, TEXT("ForwardOnApplied")); + OnAppliedBase(BaseApplied); + + FSubscriptionErrorDelegate BaseError; + BaseError.BindUFunction(Handle, TEXT("ForwardOnError")); + OnErrorBase(BaseError); + + SubscribeBase(SQL, Handle); + if (Conn) + { + Conn->StartSubscription(Handle); + } + return Handle; +} +USubscriptionHandle* USubscriptionBuilder::SubscribeToAllTables() +{ + return Subscribe(FQueryBuilder::AllTablesSqlQueries()); +} + +USubscriptionBuilder* USubscriptionBuilder::AddBlueprintQuery(const FBlueprintQuery& Query) +{ + PendingSqlQueries.Add(Query.Sql); + return this; +} + +USubscriptionBuilder* USubscriptionBuilder::AddMyPlayerQuery(const FMyPlayerQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddMyPlayerAndLevelQuery(const FMyPlayerAndLevelQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddNearbyPlayersQuery(const FNearbyPlayersQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPlayerQuery(const FPlayerQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPlayerLevelQuery(const FPlayerLevelQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddPlayersAtLevel0Query(const FPlayersAtLevel0Query& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionHandle::USubscriptionHandle(UDbConnection* InConn) +{ + Conn = InConn; +} + +void USubscriptionHandle::ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx) +{ + if (OnAppliedDelegate.IsBound()) + { + FSubscriptionEventContext Ctx(Conn); + OnAppliedDelegate.Execute(Ctx); + } +} + +void USubscriptionHandle::ForwardOnError(const FErrorContextBase& BaseCtx) +{ + if (OnErrorDelegate.IsBound()) + { + FErrorContext Ctx(Conn, BaseCtx.Error); + OnErrorDelegate.Execute(Ctx); + } +} + + +// Cast from parent to child class +UDbConnectionBuilder* UDbConnectionBuilder::WithUri(const FString& InUri) +{ + return Cast(WithUriBase(InUri)); +} +UDbConnectionBuilder* UDbConnectionBuilder::WithDatabaseName(const FString& InName) +{ + return Cast(WithDatabaseNameBase(InName)); +} +UDbConnectionBuilder* UDbConnectionBuilder::WithToken(const FString& InToken) +{ + return Cast(WithTokenBase(InToken)); +} +UDbConnectionBuilder* UDbConnectionBuilder::WithCompression(const ESpacetimeDBCompression& InCompression) +{ + return Cast(WithCompressionBase(InCompression)); +} +UDbConnectionBuilder* UDbConnectionBuilder::OnConnect(FOnConnectDelegate Callback) +{ + OnConnectDelegateInternal = Callback; + return this; +} +UDbConnectionBuilder* UDbConnectionBuilder::OnConnectError(FOnConnectErrorDelegate Callback) +{ + return Cast(OnConnectErrorBase(Callback)); +} +UDbConnectionBuilder* UDbConnectionBuilder::OnDisconnect(FOnDisconnectDelegate Callback) +{ + OnDisconnectDelegateInternal = Callback; + return this; +} +UDbConnection* UDbConnectionBuilder::Build() +{ + UDbConnection* Connection = NewObject(); + + // Store delegates on the connection for later use + Connection->OnConnectDelegate = OnConnectDelegateInternal; + Connection->OnDisconnectDelegate = OnDisconnectDelegateInternal; + + // Wrap delegates so the base builder can bind them + FOnConnectBaseDelegate BaseConnect; + BaseConnect.BindUFunction(Connection, TEXT("ForwardOnConnect")); + Connection->SetOnConnectDelegate(BaseConnect); + OnConnectBase(BaseConnect); + + FOnDisconnectBaseDelegate BaseDisconnect; + BaseDisconnect.BindUFunction(Connection, TEXT("ForwardOnDisconnect")); + Connection->SetOnDisconnectDelegate(BaseDisconnect); + OnDisconnectBase(BaseDisconnect); + + return Cast(BuildConnection(Connection)); +} +void UDbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken) +{ + if (OnConnectDelegate.IsBound()) + { + OnConnectDelegate.Execute(this, InIdentity, InToken); + } +} +void UDbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error) +{ + PendingTypedReducers.Empty(); + if (OnDisconnectDelegate.IsBound()) + { + OnDisconnectDelegate.Execute(this, Error); + } +} + + +void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event) +{ + FTestViewClientEvent BaseEvent; + BaseEvent.Tag = Event.Tag; + + switch (Event.Tag) + { + case ESpacetimeDBEventTag::Reducer: + { + FReducerEvent ReducerEvent = Event.GetAsReducer(); + FReducer Reducer; + if (!TryGetPendingTypedReducer(ReducerEvent.RequestId, Reducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), ReducerEvent.RequestId); + HandleProtocolViolation(ErrorMessage); + return; + } + BaseEvent = FTestViewClientEvent::Reducer(Reducer); + break; + } + + case ESpacetimeDBEventTag::SubscribeApplied: + BaseEvent = FTestViewClientEvent::SubscribeApplied(Event.GetAsSubscribeApplied()); + break; + + case ESpacetimeDBEventTag::UnsubscribeApplied: + BaseEvent = FTestViewClientEvent::UnsubscribeApplied(Event.GetAsUnsubscribeApplied()); + break; + + case ESpacetimeDBEventTag::Disconnected: + BaseEvent = FTestViewClientEvent::Disconnected(Event.GetAsDisconnected()); + break; + + case ESpacetimeDBEventTag::Transaction: + BaseEvent = FTestViewClientEvent::Transaction(Event.GetAsTransaction()); + break; + + case ESpacetimeDBEventTag::SubscribeError: + BaseEvent = FTestViewClientEvent::SubscribeError(Event.GetAsSubscribeError()); + break; + + case ESpacetimeDBEventTag::UnknownTransaction: + BaseEvent = FTestViewClientEvent::UnknownTransaction(Event.GetAsUnknownTransaction()); + break; + + default: + break; + } + + FEventContext Context(this, BaseEvent); + // Populate typed reducer args for convenience in table handlers + + ApplyRegisteredTableUpdates(Update, &Context); +} + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/MyPlayerAndLevelTable.g.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/MyPlayerAndLevelTable.g.cpp new file mode 100644 index 00000000000..a030f0d5c00 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/MyPlayerAndLevelTable.g.cpp @@ -0,0 +1,35 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/MyPlayerAndLevelTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UMyPlayerAndLevelTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> MyPlayerAndLevelTable = Data->GetOrAdd(TableName); + + /***/ +} + +FTableAppliedDiff UMyPlayerAndLevelTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + return Diff; +} + +int32 UMyPlayerAndLevelTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UMyPlayerAndLevelTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/MyPlayerTable.g.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/MyPlayerTable.g.cpp new file mode 100644 index 00000000000..3db5534fdef --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/MyPlayerTable.g.cpp @@ -0,0 +1,35 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/MyPlayerTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UMyPlayerTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> MyPlayerTable = Data->GetOrAdd(TableName); + + /***/ +} + +FTableAppliedDiff UMyPlayerTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + return Diff; +} + +int32 UMyPlayerTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UMyPlayerTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/NearbyPlayersTable.g.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/NearbyPlayersTable.g.cpp new file mode 100644 index 00000000000..68afbc2769e --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/NearbyPlayersTable.g.cpp @@ -0,0 +1,35 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/NearbyPlayersTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UNearbyPlayersTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> NearbyPlayersTable = Data->GetOrAdd(TableName); + + /***/ +} + +FTableAppliedDiff UNearbyPlayersTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + return Diff; +} + +int32 UNearbyPlayersTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UNearbyPlayersTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayerLevelTable.g.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayerLevelTable.g.cpp new file mode 100644 index 00000000000..21c6e688eb0 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayerLevelTable.g.cpp @@ -0,0 +1,53 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/PlayerLevelTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UPlayerLevelTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> PlayerLevelTable = Data->GetOrAdd(TableName); + PlayerLevelTable->AddUniqueConstraint("entity_id", [](const FPlayerLevelType& Row) -> const uint64& { + return Row.EntityId; }); + + EntityId = NewObject(this); + EntityId->SetCache(PlayerLevelTable); + + // Register a new multi-key B-Tree index named "level" on the PlayerLevelTable. + PlayerLevelTable->AddMultiKeyBTreeIndex>( + TEXT("level"), + [](const FPlayerLevelType& Row) + { + // This tuple is stored in the B-Tree index for fast composite key lookups. + return MakeTuple(Row.Level); + } + ); + + Level = NewObject(this); + Level->SetCache(PlayerLevelTable); + + /***/ +} + +FTableAppliedDiff UPlayerLevelTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + return Diff; +} + +int32 UPlayerLevelTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UPlayerLevelTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayerTable.g.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayerTable.g.cpp new file mode 100644 index 00000000000..87379a7a009 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayerTable.g.cpp @@ -0,0 +1,52 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/PlayerTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UPlayerTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> PlayerTable = Data->GetOrAdd(TableName); + PlayerTable->AddUniqueConstraint("entity_id", [](const FPlayerType& Row) -> const uint64& { + return Row.EntityId; }); + PlayerTable->AddUniqueConstraint("identity", [](const FPlayerType& Row) -> const FSpacetimeDBIdentity& { + return Row.Identity; }); + + EntityId = NewObject(this); + EntityId->SetCache(PlayerTable); + + Identity = NewObject(this); + Identity->SetCache(PlayerTable); + + /***/ +} + +FTableAppliedDiff UPlayerTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + Diff.DeriveUpdatesByPrimaryKey( + [](const FPlayerType& Row) + { + return Row.EntityId; + } + ); + + return Diff; +} + +int32 UPlayerTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UPlayerTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayersAtLevel0Table.g.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayersAtLevel0Table.g.cpp new file mode 100644 index 00000000000..53d02318a6b --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/ModuleBindings/Tables/PlayersAtLevel0Table.g.cpp @@ -0,0 +1,35 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/PlayersAtLevel0Table.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UPlayersAtLevel0Table::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> PlayersAtLevel0Table = Data->GetOrAdd(TableName); + + /***/ +} + +FTableAppliedDiff UPlayersAtLevel0Table::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + return Diff; +} + +int32 UPlayersAtLevel0Table::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UPlayersAtLevel0Table::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/CommonTestFunctions.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/CommonTestFunctions.cpp new file mode 100644 index 00000000000..521828acf11 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/CommonTestFunctions.cpp @@ -0,0 +1,171 @@ +#include "Tests/CommonTestFunctions.h" + +void UTestHelperDelegates::HandleConnect(UDbConnection* Conn, FSpacetimeDBIdentity Identity, const FString& Token) +{ + if (OnConnect) + { + OnConnect(Conn, Identity, Token); + } +} + +void UTestHelperDelegates::HandleConnectError(UDbConnection* Conn, const FString& Error) +{ + if (OnConnectError) + { + OnConnectError(Conn, Error); + } +} + +void UTestHelperDelegates::HandleDisconnect(UDbConnection* Conn, const FString& Error) +{ + if (OnDisconnect) + { + OnDisconnect(Conn, Error); + } +} + +void UTestHelperDelegates::HandleSubscriptionApplied(FSubscriptionEventContext Ctx) +{ + if (OnSubscriptionApplied) + { + OnSubscriptionApplied(Ctx); + } +} + +void UTestHelperDelegates::HandleSubscriptionError(FErrorContext Ctx) +{ + if (OnSubscriptionError) + { + OnSubscriptionError(Ctx); + } +} + +UDbConnection* ConnectThen( + TSharedPtr Counter, + const FString& TestName, + TFunction Callback) +{ + FString DbName; + FString DbNameError; + if (!GetDbName(DbName, DbNameError)) + { + return nullptr; + } + + UCredentials::Init(TestName); + + const FString ConnectTestName = FString::Printf(TEXT("on_connect_%s"), *TestName); + Counter->Register(ConnectTestName); + + UTestHelperDelegates* TestHelper = NewObject(); + TestHelper->AddToRoot(); + + TestHelper->OnConnect = [Counter, Callback, ConnectTestName](UDbConnection* Conn, FSpacetimeDBIdentity, const FString&) + { + Callback(Conn); + Counter->MarkSuccess(ConnectTestName); + }; + TestHelper->OnConnectError = [Counter, ConnectTestName](UDbConnection*, const FString& Error) + { + Counter->MarkFailure(ConnectTestName, FString::Printf(TEXT("Connect error: %s"), *Error)); + }; + TestHelper->OnDisconnect = [Counter, ConnectTestName](UDbConnection*, const FString& Error) + { + Counter->MarkFailure(ConnectTestName, FString::Printf(TEXT("Disconnected: %s"), *Error)); + }; + + FOnConnectDelegate ConnectDelegate; + BIND_DELEGATE_SAFE(ConnectDelegate, TestHelper, UTestHelperDelegates, HandleConnect); + + FOnDisconnectDelegate DisconnectDelegate; + BIND_DELEGATE_SAFE(DisconnectDelegate, TestHelper, UTestHelperDelegates, HandleDisconnect); + + FOnConnectErrorDelegate ErrorDelegate; + BIND_DELEGATE_SAFE(ErrorDelegate, TestHelper, UTestHelperDelegates, HandleConnectError); + + UDbConnection* Conn = UDbConnection::Builder() + ->WithUri(TEXT("localhost:3000")) + ->WithDatabaseName(DbName) + ->OnConnect(ConnectDelegate) + ->OnDisconnect(DisconnectDelegate) + ->OnConnectError(ErrorDelegate) + ->Build(); + + if (Conn) + { + Conn->SetAutoTicking(true); + Conn->AddToRoot(); + } + + return Conn; +} + +bool GetDbName(FString& DBName, FString& Error) +{ + const FString DbNameEnv = FPlatformMisc::GetEnvironmentVariable(TEXT("SPACETIME_SDK_TEST_DB_NAME")); + if (!DbNameEnv.IsEmpty()) + { + DBName = DbNameEnv; + return true; + } + + FString CmdValue; + if (FParse::Value(FCommandLine::Get(), TEXT("-SpacetimeDbName="), CmdValue)) + { + DBName = CmdValue; + return true; + } + + Error = TEXT("No DB name. Pass -SpacetimeDbName= or set SPACETIME_SDK_TEST_DB_NAME."); + return false; +} + +bool ValidateParameterConfig(FAutomationTestBase* Test) +{ + FString DbName; + FString DbNameError; + if (!GetDbName(DbName, DbNameError)) + { + Test->AddError(DbNameError); + return false; + } + return true; +} + +bool ReportTestResult(FAutomationTestBase& Test, const FString& TestName, TSharedPtr Counter, bool bTimedOut) +{ + bool bHasFailure = false; + + for (const FString& Msg : Counter->GetFailures()) + { + TESTLOG_FAIL(Test, TEXT("Operation - %s"), *Msg); + bHasFailure = true; + } + for (const FString& Msg : Counter->GetSuccesses()) + { + TESTLOG_SUCCESS(Test, TEXT("Operation - %s"), *Msg); + } + + if (bTimedOut) + { + TESTLOG_FAIL(Test, TEXT("Timed out waiting for operation")); + bHasFailure = true; + } + if (Counter->IsAborted()) + { + TESTLOG_FAIL(Test, TEXT("Test aborted due to precondition failure")); + bHasFailure = true; + } + + if (!bHasFailure) + { + TESTLOG_SUCCESS(Test, TEXT("Test Success")); + Test.TestTrue(*TestName, true); + } + else + { + TESTLOG_FAIL(Test, TEXT("Test failed")); + } + + return !bHasFailure; +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/SpacetimeFullClientTests.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/SpacetimeFullClientTests.cpp new file mode 100644 index 00000000000..aa182d538f1 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/SpacetimeFullClientTests.cpp @@ -0,0 +1,194 @@ +#include "Tests/SpacetimeFullClientTests.h" + +#include "Tests/CommonTestFunctions.h" +#include "Tests/TestHandler.h" + +#include "ModuleBindings/SpacetimeDBClient.g.h" +#include "ModuleBindings/Tables/PlayersAtLevel0Table.g.h" + +namespace +{ +static FString ToFString(const std::string& InSql) +{ + return FString(UTF8_TO_TCHAR(InSql.c_str())); +} + +class FWaitForTestCounter : public IAutomationLatentCommand +{ +public: + FWaitForTestCounter(FAutomationTestBase& InTest, const FString& InTestName, TSharedPtr InCounter, double InStartTime) + : Test(InTest) + , TestName(InTestName) + , Counter(MoveTemp(InCounter)) + , StartTime(InStartTime) + {} + + virtual bool Update() override + { + const double Timeout = 90.0; + const bool bStopped = Counter->IsAborted() || Counter->IsComplete() || (FPlatformTime::Seconds() - StartTime > Timeout); + const bool bTimedOut = (FPlatformTime::Seconds() - StartTime > Timeout); + + if (bStopped) + { + ReportTestResult(Test, TestName, Counter, bTimedOut); + } + + return bStopped; + } + +private: + FAutomationTestBase& Test; + FString TestName; + TSharedPtr Counter; + double StartTime = 0.0; +}; +} + +bool FViewQueryBuilderDirectSourcesTest::RunTest(const FString& Parameters) +{ + FQueryBuilder Q; + + const FString MyPlayerSql = ToFString(Q.From.MyPlayer().into_sql()); + const FString MyPlayerAndLevelSql = ToFString(Q.From.MyPlayerAndLevel().into_sql()); + const FString PlayersAtLevel0Sql = ToFString(Q.From.PlayersAtLevel0().into_sql()); + const FString NearbyPlayersFilteredSql = ToFString( + Q.From.NearbyPlayers().Where([](const FPlayerLocationCols& Cols) + { + return Cols.Active.Eq(true); + }).into_sql() + ); + + TestEqual(TEXT("my_player sql"), MyPlayerSql, TEXT("SELECT * FROM \"my_player\"")); + TestEqual(TEXT("my_player_and_level sql"), MyPlayerAndLevelSql, TEXT("SELECT * FROM \"my_player_and_level\"")); + TestEqual(TEXT("players_at_level_0 sql"), PlayersAtLevel0Sql, TEXT("SELECT * FROM \"players_at_level_0\"")); + TestEqual( + TEXT("nearby_players filtered sql"), + NearbyPlayersFilteredSql, + TEXT("SELECT * FROM \"nearby_players\" WHERE (\"nearby_players\".\"active\" = TRUE)") + ); + + USubscriptionBuilder* Builder = NewObject(); + Builder->AddQuery([](const FQueryBuilder& Query) + { + return Query.From.MyPlayer(); + })->AddQuery([](const FQueryBuilder& Query) + { + return Query.From.PlayersAtLevel0().Where([](const FPlayersAtLevel0Cols& Cols) + { + return Cols.EntityId.Eq(static_cast(7)); + }); + }); + + TestTrue(TEXT("typed query builder accepted view sources"), true); + return true; +} + +bool FViewSubscribeAllTablesTest::RunTest(const FString& Parameters) +{ + const TArray Sql = FQueryBuilder::AllTablesSqlQueries(); + + TestEqual(TEXT("all tables count"), Sql.Num(), 6); + TestTrue(TEXT("all tables include player"), Sql.Contains(TEXT("SELECT * FROM \"player\""))); + TestTrue(TEXT("all tables include player_level"), Sql.Contains(TEXT("SELECT * FROM \"player_level\""))); + TestTrue(TEXT("all tables include my_player"), Sql.Contains(TEXT("SELECT * FROM \"my_player\""))); + TestTrue(TEXT("all tables include my_player_and_level"), Sql.Contains(TEXT("SELECT * FROM \"my_player_and_level\""))); + TestTrue(TEXT("all tables include nearby_players"), Sql.Contains(TEXT("SELECT * FROM \"nearby_players\""))); + TestTrue(TEXT("all tables include players_at_level_0"), Sql.Contains(TEXT("SELECT * FROM \"players_at_level_0\""))); + + return true; +} + +bool FViewBlueprintQueryBuilderFlowTest::RunTest(const FString& Parameters) +{ + FNearbyPlayersQuery Query = UQueryBuilderBlueprintLibrary::FromNearbyPlayers(); + TestEqual(TEXT("blueprint nearby players base sql"), Query.Sql, TEXT("SELECT * FROM \"nearby_players\"")); + + const FBlueprintPredicate Active = UQueryBuilderBlueprintLibrary::BoolEqual( + UQueryBuilderBlueprintLibrary::NearbyPlayersActive(Query), + true); + const FBlueprintPredicate MinX = UQueryBuilderBlueprintLibrary::Int32GreaterEqual( + UQueryBuilderBlueprintLibrary::NearbyPlayersX(Query), + 0); + Query = UQueryBuilderBlueprintLibrary::NearbyPlayersWhere( + Query, + UQueryBuilderBlueprintLibrary::And(Active, MinX)); + TestEqual( + TEXT("blueprint nearby players filtered sql"), + Query.Sql, + TEXT("SELECT * FROM \"nearby_players\" WHERE ((\"nearby_players\".\"active\" = TRUE) AND (\"nearby_players\".\"x\" >= 0))") + ); + + USubscriptionBuilder* Builder = NewObject(); + USubscriptionHandle* Handle = Builder->AddNearbyPlayersQuery(Query)->Subscribe(); + TestNotNull(TEXT("blueprint nearby players handle"), Handle); + TestEqual(TEXT("blueprint nearby players builder sql count"), Handle->GetQuerySqls().Num(), 1); + TestEqual(TEXT("blueprint nearby players builder sql"), Handle->GetQuerySqls()[0], Query.Sql); + + return true; +} + +bool FViewBlueprintQueryBuilderRuntimeTest::RunTest(const FString& Parameters) +{ + const FString RuntimeTestName = TEXT("ViewBlueprintQueryBuilderRuntime"); + + if (!ValidateParameterConfig(this)) + { + return false; + } + + UViewBlueprintRuntimeHandler* Handler = CreateTestHandler(); + Handler->Counter->Register(TEXT("subscription_applied")); + Handler->Counter->Register(TEXT("players_at_level_0_insert")); + + ConnectThen(Handler->Counter, RuntimeTestName, [this, Handler](UDbConnection* Conn) + { + Conn->Db->PlayersAtLevel0->OnInsert.AddDynamic(Handler, &UViewBlueprintRuntimeHandler::OnPlayersAtLevel0Insert); + Conn->Db->PlayersAtLevel0->OnUpdate.AddDynamic(Handler, &UViewBlueprintRuntimeHandler::OnPlayersAtLevel0Update); + Conn->Db->PlayersAtLevel0->OnDelete.AddDynamic(Handler, &UViewBlueprintRuntimeHandler::OnPlayersAtLevel0Delete); + + UTestHelperDelegates* SubHelper = NewObject(); + SubHelper->AddToRoot(); + + SubHelper->OnSubscriptionApplied = [this, Handler, Conn](FSubscriptionEventContext Ctx) + { + if (Conn->Db->PlayersAtLevel0->Count() != 0) + { + Handler->Counter->MarkFailure(TEXT("subscription_applied"), TEXT("Expected empty players_at_level_0 cache before reducers")); + Handler->Counter->Abort(); + return; + } + + Handler->Counter->MarkSuccess(TEXT("subscription_applied")); + Ctx.Reducers->InsertPlayer(Handler->ExpectedIdentity, static_cast(0)); + }; + + SubHelper->OnSubscriptionError = [Handler](FErrorContext Ctx) + { + Handler->Counter->MarkFailure(TEXT("subscription_applied"), FString::Printf(TEXT("Subscription error: %s"), *Ctx.Error)); + Handler->Counter->Abort(); + }; + + FOnSubscriptionApplied AppliedDelegate; + BIND_DELEGATE_SAFE(AppliedDelegate, SubHelper, UTestHelperDelegates, HandleSubscriptionApplied); + + FOnSubscriptionError ErrorDelegate; + BIND_DELEGATE_SAFE(ErrorDelegate, SubHelper, UTestHelperDelegates, HandleSubscriptionError); + + FPlayersAtLevel0Query Query = UQueryBuilderBlueprintLibrary::FromPlayersAtLevel0(); + Query = UQueryBuilderBlueprintLibrary::PlayersAtLevel0Where( + Query, + UQueryBuilderBlueprintLibrary::IdentityEqual( + UQueryBuilderBlueprintLibrary::PlayersAtLevel0Identity(Query), + Handler->ExpectedIdentity)); + + Conn->SubscriptionBuilder() + ->OnApplied(AppliedDelegate) + ->OnError(ErrorDelegate) + ->AddPlayersAtLevel0Query(Query) + ->Subscribe(); + }); + + ADD_LATENT_AUTOMATION_COMMAND(FWaitForTestCounter(*this, RuntimeTestName, Handler->Counter, FPlatformTime::Seconds())); + return true; +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/TestCounter.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/TestCounter.cpp new file mode 100644 index 00000000000..332e61064b2 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/TestCounter.cpp @@ -0,0 +1,87 @@ +#include "Tests/TestCounter.h" + +void FTestCounter::Register(const FString& TestName) +{ + FScopeLock Lock(&Mutex); + if (Registered.Contains(TestName)) + { + UE_LOG(LogTemp, Error, TEXT("Duplicate test name: %s"), *TestName); + } + Registered.Add(TestName); +} + +void FTestCounter::MarkSuccess(const FString& TestName) +{ + FScopeLock Lock(&Mutex); + Outcomes.Add(TestName, { true, FString() }); + UE_LOG(LogTemp, Log, TEXT("Operation success: %s"), *TestName); +} + +void FTestCounter::MarkFailure(const FString& TestName, const FString& Error) +{ + FScopeLock Lock(&Mutex); + Outcomes.Add(TestName, { false, Error }); + UE_LOG(LogTemp, Error, TEXT("Operation failed: %s, %s"), *TestName, *Error); +} + +bool FTestCounter::IsComplete() const +{ + FScopeLock Lock(&Mutex); + return Outcomes.Num() == Registered.Num(); +} + +bool FTestCounter::AllSucceeded() const +{ + FScopeLock Lock(&Mutex); + if (Outcomes.Num() != Registered.Num()) + { + return false; + } + for (const auto& Elem : Outcomes) + { + if (!Elem.Value.bSuccess) + { + return false; + } + } + return true; +} + +TArray FTestCounter::GetFailures() const +{ + FScopeLock Lock(&Mutex); + TArray Failures; + for (const FString& Name : Registered) + { + const FTestOutcome* Outcome = Outcomes.Find(Name); + if (!Outcome) + { + Failures.Add(FString::Printf(TEXT("TIMEOUT: %s"), *Name)); + } + else if (!Outcome->bSuccess) + { + Failures.Add(FString::Printf(TEXT("FAILED: %s: %s"), *Name, *Outcome->Error)); + } + } + return Failures; +} + +TArray FTestCounter::GetSuccesses() const +{ + FScopeLock Lock(&Mutex); + TArray Successes; + for (const FString& Name : Registered) + { + const FTestOutcome* Outcome = Outcomes.Find(Name); + if (Outcome && Outcome->bSuccess) + { + Successes.Add(FString::Printf(TEXT("SUCCESS: %s"), *Name)); + } + } + return Successes; +} + +void FTestCounter::Abort() +{ + bAborted = true; +} \ No newline at end of file diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/TestHandler.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/TestHandler.cpp new file mode 100644 index 00000000000..d1b8da42646 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Private/Tests/TestHandler.cpp @@ -0,0 +1,25 @@ +#include "Tests/TestHandler.h" + +void UViewBlueprintRuntimeHandler::OnPlayersAtLevel0Insert(const FEventContext&, const FPlayerType& Value) +{ + if (Value.Identity != ExpectedIdentity) + { + Counter->MarkFailure(TEXT("players_at_level_0_insert"), FString::Printf(TEXT("Unexpected identity %s"), *Value.Identity.ToHex())); + Counter->Abort(); + return; + } + + Counter->MarkSuccess(TEXT("players_at_level_0_insert")); +} + +void UViewBlueprintRuntimeHandler::OnPlayersAtLevel0Update(const FEventContext&, const FPlayerType&, const FPlayerType&) +{ + Counter->MarkFailure(TEXT("players_at_level_0_insert"), TEXT("Unexpected update for players_at_level_0")); + Counter->Abort(); +} + +void UViewBlueprintRuntimeHandler::OnPlayersAtLevel0Delete(const FEventContext&, const FPlayerType&) +{ + Counter->MarkFailure(TEXT("players_at_level_0_insert"), TEXT("Unexpected delete for players_at_level_0")); + Counter->Abort(); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/ReducerBase.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/ReducerBase.g.h new file mode 100644 index 00000000000..52b29de10e6 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/ReducerBase.g.h @@ -0,0 +1,18 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ReducerBase.g.generated.h" + +// Abstract Reducer base class +UCLASS(Abstract, BlueprintType) +class TESTVIEWCLIENT_API UReducerBase : public UObject +{ + GENERATED_BODY() + +public: + virtual ~UReducerBase() = default; +}; + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/DeletePlayer.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/DeletePlayer.g.h new file mode 100644 index 00000000000..3733a35c41d --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/DeletePlayer.g.h @@ -0,0 +1,54 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "Types/Builtins.h" +#include "DeletePlayer.g.generated.h" + +// Reducer arguments struct for DeletePlayer +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FDeletePlayerArgs +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBIdentity Identity; + + FDeletePlayerArgs() = default; + + FDeletePlayerArgs(const FSpacetimeDBIdentity& InIdentity) + : Identity(InIdentity) + {} + + + FORCEINLINE bool operator==(const FDeletePlayerArgs& Other) const + { + return Identity == Other.Identity; + } + FORCEINLINE bool operator!=(const FDeletePlayerArgs& Other) const + { + return !(*this == Other); + } +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_STRUCT(FDeletePlayerArgs, Identity); +} + +// Reducer class for internal dispatching +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UDeletePlayerReducer : public UReducerBase +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FSpacetimeDBIdentity Identity; + +}; + + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/InsertPlayer.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/InsertPlayer.g.h new file mode 100644 index 00000000000..c3d0f454fc6 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/InsertPlayer.g.h @@ -0,0 +1,59 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "Types/Builtins.h" +#include "InsertPlayer.g.generated.h" + +// Reducer arguments struct for InsertPlayer +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FInsertPlayerArgs +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBIdentity Identity; + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Level = 0; + + FInsertPlayerArgs() = default; + + FInsertPlayerArgs(const FSpacetimeDBIdentity& InIdentity, const uint64& InLevel) + : Identity(InIdentity), Level(InLevel) + {} + + + FORCEINLINE bool operator==(const FInsertPlayerArgs& Other) const + { + return Identity == Other.Identity && Level == Other.Level; + } + FORCEINLINE bool operator!=(const FInsertPlayerArgs& Other) const + { + return !(*this == Other); + } +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_STRUCT(FInsertPlayerArgs, Identity, Level); +} + +// Reducer class for internal dispatching +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UInsertPlayerReducer : public UReducerBase +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FSpacetimeDBIdentity Identity; + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Level = 0; + +}; + + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/MovePlayer.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/MovePlayer.g.h new file mode 100644 index 00000000000..bf6197a9566 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Reducers/MovePlayer.g.h @@ -0,0 +1,58 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "MovePlayer.g.generated.h" + +// Reducer arguments struct for MovePlayer +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FMovePlayerArgs +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") + int32 Dx = 0; + + UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") + int32 Dy = 0; + + FMovePlayerArgs() = default; + + FMovePlayerArgs(const int32& InDx, const int32& InDy) + : Dx(InDx), Dy(InDy) + {} + + + FORCEINLINE bool operator==(const FMovePlayerArgs& Other) const + { + return Dx == Other.Dx && Dy == Other.Dy; + } + FORCEINLINE bool operator!=(const FMovePlayerArgs& Other) const + { + return !(*this == Other); + } +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_STRUCT(FMovePlayerArgs, Dx, Dy); +} + +// Reducer class for internal dispatching +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UMovePlayerReducer : public UReducerBase +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + int32 Dx = 0; + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + int32 Dy = 0; + +}; + + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/SpacetimeDBClient.g.h new file mode 100644 index 00000000000..d800da278c7 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -0,0 +1,1972 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +// This was generated using spacetimedb cli version 2.0.5 (commit 047dac974526f5c5aff873026e90177270b10f38). + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Connection/Callback.h" +#include "Connection/DbConnectionBase.h" +#include "Connection/DbConnectionBuilder.h" +#include "Connection/Subscription.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "ModuleBindings/Reducers/DeletePlayer.g.h" +#include "ModuleBindings/Reducers/InsertPlayer.g.h" +#include "ModuleBindings/Reducers/MovePlayer.g.h" +#include "ModuleBindings/Types/PlayerAndLevelType.g.h" +#include "ModuleBindings/Types/PlayerLevelType.g.h" +#include "ModuleBindings/Types/PlayerLocationType.g.h" +#include "ModuleBindings/Types/PlayerType.g.h" +#include "QueryBuilder/query_builder.h" +#include "Types/Builtins.h" +#include "SpacetimeDBClient.g.generated.h" + +// Forward declarations +class UDbConnection; +class URemoteTables; +class URemoteReducers; +class URemoteProcedures; +class USubscriptionBuilder; +class USubscriptionHandle; + +/** Forward declaration for tables */ +class UMyPlayerTable; +class UMyPlayerAndLevelTable; +class UNearbyPlayersTable; +class UPlayerTable; +class UPlayerLevelTable; +class UPlayersAtLevel0Table; +/***/ + +// Delegates using the generated connection type. These wrap the base +// delegates defined in the SDK so that projects can work directly with +// UDbConnection without manual casting in user code. +DECLARE_DYNAMIC_DELEGATE_ThreeParams( + FOnConnectDelegate, + UDbConnection*, Connection, + FSpacetimeDBIdentity, Identity, + const FString&, Token); + +DECLARE_DYNAMIC_DELEGATE_TwoParams( + FOnDisconnectDelegate, + UDbConnection*, Connection, + const FString&, Error); + + +// Context classes for event handling + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FContextBase +{ + GENERATED_BODY() + + FContextBase() : Db(nullptr), Reducers(nullptr), Procedures(nullptr), Conn(nullptr) {}; + FContextBase(UDbConnection* InConn); + + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + URemoteTables* Db; + + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + URemoteReducers* Reducers; + + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + URemoteProcedures* Procedures; + + bool IsActive() const; + void Disconnect(); + bool TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const; + FSpacetimeDBConnectionId GetConnectionId() const; + USubscriptionBuilder* SubscriptionBuilder(); + +protected: + UPROPERTY() + UDbConnection* Conn; + +}; + +UCLASS() +class TESTVIEWCLIENT_API UContextBaseBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static URemoteTables* GetDb(const FContextBase& Ctx) { return Ctx.Db; } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static URemoteReducers* GetReducers(const FContextBase& Ctx) { return Ctx.Reducers; } + + static URemoteProcedures* GetProcedures(const FContextBase& Ctx) { return Ctx.Procedures; } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static bool IsActive(const FContextBase& Ctx) { return Ctx.IsActive(); } +}; + +UENUM(BlueprintType, Category = "SpacetimeDB") +enum class EReducerTag : uint8 +{ + DeletePlayer, + InsertPlayer, + MovePlayer +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FReducer +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + EReducerTag Tag = static_cast(0); + + TVariant Data; + + // Optional metadata + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + FString ReducerName; + uint32 ReducerId = 0; + uint32 RequestId = 0; + + static FReducer DeletePlayer(const FDeletePlayerArgs& Value) + { + FReducer Out; + Out.Tag = EReducerTag::DeletePlayer; + Out.Data.Set(Value); + Out.ReducerName = TEXT("delete_player"); + return Out; + } + + FORCEINLINE bool IsDeletePlayer() const { return Tag == EReducerTag::DeletePlayer; } + FORCEINLINE FDeletePlayerArgs GetAsDeletePlayer() const + { + ensureMsgf(IsDeletePlayer(), TEXT("Reducer does not hold DeletePlayer!")); + return Data.Get(); + } + + static FReducer InsertPlayer(const FInsertPlayerArgs& Value) + { + FReducer Out; + Out.Tag = EReducerTag::InsertPlayer; + Out.Data.Set(Value); + Out.ReducerName = TEXT("insert_player"); + return Out; + } + + FORCEINLINE bool IsInsertPlayer() const { return Tag == EReducerTag::InsertPlayer; } + FORCEINLINE FInsertPlayerArgs GetAsInsertPlayer() const + { + ensureMsgf(IsInsertPlayer(), TEXT("Reducer does not hold InsertPlayer!")); + return Data.Get(); + } + + static FReducer MovePlayer(const FMovePlayerArgs& Value) + { + FReducer Out; + Out.Tag = EReducerTag::MovePlayer; + Out.Data.Set(Value); + Out.ReducerName = TEXT("move_player"); + return Out; + } + + FORCEINLINE bool IsMovePlayer() const { return Tag == EReducerTag::MovePlayer; } + FORCEINLINE FMovePlayerArgs GetAsMovePlayer() const + { + ensureMsgf(IsMovePlayer(), TEXT("Reducer does not hold MovePlayer!")); + return Data.Get(); + } + + FORCEINLINE bool operator==(const FReducer& Other) const + { + if (Tag != Other.Tag || ReducerId != Other.ReducerId || RequestId != Other.RequestId || ReducerName != Other.ReducerName) return false; + switch (Tag) + { + case EReducerTag::DeletePlayer: + return GetAsDeletePlayer() == Other.GetAsDeletePlayer(); + case EReducerTag::InsertPlayer: + return GetAsInsertPlayer() == Other.GetAsInsertPlayer(); + case EReducerTag::MovePlayer: + return GetAsMovePlayer() == Other.GetAsMovePlayer(); + default: return false; + } + } + FORCEINLINE bool operator!=(const FReducer& Other) const { return !(*this == Other); } +}; + +UCLASS() +class TESTVIEWCLIENT_API UReducerBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") + static FReducer DeletePlayer(const FDeletePlayerArgs& Value) { + return FReducer::DeletePlayer(Value); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static bool IsDeletePlayer(const FReducer& Reducer) { return Reducer.IsDeletePlayer(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static FDeletePlayerArgs GetAsDeletePlayer(const FReducer& Reducer) { + return Reducer.GetAsDeletePlayer(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") + static FReducer InsertPlayer(const FInsertPlayerArgs& Value) { + return FReducer::InsertPlayer(Value); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static bool IsInsertPlayer(const FReducer& Reducer) { return Reducer.IsInsertPlayer(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static FInsertPlayerArgs GetAsInsertPlayer(const FReducer& Reducer) { + return Reducer.GetAsInsertPlayer(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") + static FReducer MovePlayer(const FMovePlayerArgs& Value) { + return FReducer::MovePlayer(Value); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static bool IsMovePlayer(const FReducer& Reducer) { return Reducer.IsMovePlayer(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static FMovePlayerArgs GetAsMovePlayer(const FReducer& Reducer) { + return Reducer.GetAsMovePlayer(); + } +}; + +/** Metadata describing a reducer run. */ +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FTestViewClientReducerEvent +{ + GENERATED_BODY() + + /** Timestamp for when the reducer executed */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimestamp Timestamp; + + /** Result status of the reducer */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBStatus Status; + + /** Identity that initiated the call */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBIdentity CallerIdentity; + + /** Connection ID for the caller */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBConnectionId CallerConnectionId; + + /** Energy consumed while executing */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FEnergyQuantaType EnergyConsumed; + + /** Detailed call information */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FReducer Reducer; + + FORCEINLINE bool operator==(const FTestViewClientReducerEvent& Other) const + { + return Status == Other.Status && Timestamp == Other.Timestamp && CallerIdentity == Other.CallerIdentity && + CallerConnectionId == Other.CallerConnectionId && EnergyConsumed == Other.EnergyConsumed && + Reducer == Other.Reducer; + } + + FORCEINLINE bool operator!=(const FTestViewClientReducerEvent& Other) const + { + return !(*this == Other); + } +}; + +// No procedures defined in this module. +/** Metadata describing a procedure run. */ +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FTestViewClientProcedureEvent +{ + GENERATED_BODY() + + /** Timestamp for when the procedure executed */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimestamp Timestamp; + + /** Result status of the procedure */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBProcedureStatus Status; + + /** Identity that initiated the call */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimeDuration TotalHostExecutionDuration; + + FTestViewClientProcedureEvent() { + } + FTestViewClientProcedureEvent(FProcedureEvent Event) { + Timestamp = Event.Timestamp; + Status = FSpacetimeDBProcedureStatus::FromStatus(Event.Status); + TotalHostExecutionDuration = Event.TotalHostExecutionDuration; + } + FORCEINLINE bool operator==(const FTestViewClientProcedureEvent& Other) const + { + return Status == Other.Status && Timestamp == Other.Timestamp && + TotalHostExecutionDuration == Other.TotalHostExecutionDuration; + } + + FORCEINLINE bool operator!=(const FTestViewClientProcedureEvent& Other) const + { + return !(*this == Other); + } +}; + +/** Represents event with variant message data. */ +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FTestViewClientEvent +{ + GENERATED_BODY() + + /** Tagged union holding reducer call, unit events, or error string */ + TVariant MessageData; + + /** Type tag indicating what this event represents */ + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + ESpacetimeDBEventTag Tag = ESpacetimeDBEventTag::UnknownTransaction; + + /** === Static factory methods ===*/ + static FTestViewClientEvent Reducer(const FReducer& Value) + { + FTestViewClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Reducer; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewClientEvent SubscribeApplied(const FSpacetimeDBUnit& Value) + { + FTestViewClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::SubscribeApplied; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewClientEvent UnsubscribeApplied(const FSpacetimeDBUnit& Value) + { + FTestViewClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::UnsubscribeApplied; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewClientEvent Disconnected(const FSpacetimeDBUnit& Value) + { + FTestViewClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Disconnected; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewClientEvent Transaction(const FSpacetimeDBUnit& Value) + { + FTestViewClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Transaction; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewClientEvent SubscribeError(const FString& Value) + { + FTestViewClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::SubscribeError; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewClientEvent UnknownTransaction(const FSpacetimeDBUnit& Value) + { + FTestViewClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::UnknownTransaction; + Obj.MessageData.Set(Value); + return Obj; + } + + FORCEINLINE bool IsReducer() const { return Tag == ESpacetimeDBEventTag::Reducer; } + FORCEINLINE FReducer GetAsReducer() const + { + ensureMsgf(IsReducer(), TEXT("MessageData does not hold Reducer!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsSubscribeApplied() const { return Tag == ESpacetimeDBEventTag::SubscribeApplied; } + FORCEINLINE FSpacetimeDBUnit GetAsSubscribeApplied() const + { + ensureMsgf(IsSubscribeApplied(), TEXT("MessageData does not hold SubscribeApplied!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsUnsubscribeApplied() const { return Tag == ESpacetimeDBEventTag::UnsubscribeApplied; } + FORCEINLINE FSpacetimeDBUnit GetAsUnsubscribeApplied() const + { + ensureMsgf(IsUnsubscribeApplied(), TEXT("MessageData does not hold UnsubscribeApplied!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsDisconnected() const { return Tag == ESpacetimeDBEventTag::Disconnected; } + FORCEINLINE FSpacetimeDBUnit GetAsDisconnected() const + { + ensureMsgf(IsDisconnected(), TEXT("MessageData does not hold Disconnected!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsTransaction() const { return Tag == ESpacetimeDBEventTag::Transaction; } + FORCEINLINE FSpacetimeDBUnit GetAsTransaction() const + { + ensureMsgf(IsTransaction(), TEXT("MessageData does not hold Transaction!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsSubscribeError() const { return Tag == ESpacetimeDBEventTag::SubscribeError; } + FORCEINLINE FString GetAsSubscribeError() const + { + ensureMsgf(IsSubscribeError(), TEXT("MessageData does not hold SubscribeError!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsUnknownTransaction() const { return Tag == ESpacetimeDBEventTag::UnknownTransaction; } + FORCEINLINE FSpacetimeDBUnit GetAsUnknownTransaction() const + { + ensureMsgf(IsUnknownTransaction(), TEXT("MessageData does not hold UnknownTransaction!")); + return MessageData.Get(); + } + + FORCEINLINE bool operator==(const FTestViewClientEvent& Other) const + { + if (Tag != Other.Tag) return false; + switch (Tag) + { + case ESpacetimeDBEventTag::Reducer: return GetAsReducer() == Other.GetAsReducer(); + case ESpacetimeDBEventTag::SubscribeApplied: return GetAsSubscribeApplied() == Other.GetAsSubscribeApplied(); + case ESpacetimeDBEventTag::UnsubscribeApplied: return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); + case ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected(); + case ESpacetimeDBEventTag::Transaction: return GetAsTransaction() == Other.GetAsTransaction(); + case ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError(); + case ESpacetimeDBEventTag::UnknownTransaction: return GetAsUnknownTransaction() == Other.GetAsUnknownTransaction(); + default: return false; + } + } + + FORCEINLINE bool operator!=(const FTestViewClientEvent& Other) const + { + return !(*this == Other); + } +}; + +UCLASS() +class TESTVIEWCLIENT_API UTestViewClientEventBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewClientEvent") + static FTestViewClientEvent Reducer(const FReducer& InValue) + { + return FTestViewClientEvent::Reducer(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewClientEvent") + static FTestViewClientEvent SubscribeApplied(const FSpacetimeDBUnit& InValue) + { + return FTestViewClientEvent::SubscribeApplied(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewClientEvent") + static FTestViewClientEvent UnsubscribeApplied(const FSpacetimeDBUnit& InValue) + { + return FTestViewClientEvent::UnsubscribeApplied(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewClientEvent") + static FTestViewClientEvent Disconnected(const FSpacetimeDBUnit& InValue) + { + return FTestViewClientEvent::Disconnected(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewClientEvent") + static FTestViewClientEvent Transaction(const FSpacetimeDBUnit& InValue) + { + return FTestViewClientEvent::Transaction(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewClientEvent") + static FTestViewClientEvent SubscribeError(const FString& InValue) + { + return FTestViewClientEvent::SubscribeError(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewClientEvent") + static FTestViewClientEvent UnknownTransaction(const FSpacetimeDBUnit& InValue) + { + return FTestViewClientEvent::UnknownTransaction(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static bool IsReducer(const FTestViewClientEvent& Event) { return Event.IsReducer(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static bool IsSubscribeApplied(const FTestViewClientEvent& Event) { return Event.IsSubscribeApplied(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static bool IsUnsubscribeApplied(const FTestViewClientEvent& Event) { return Event.IsUnsubscribeApplied(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static bool IsDisconnected(const FTestViewClientEvent& Event) { return Event.IsDisconnected(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static bool IsTransaction(const FTestViewClientEvent& Event) { return Event.IsTransaction(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static bool IsSubscribeError(const FTestViewClientEvent& Event) { return Event.IsSubscribeError(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static bool IsUnknownTransaction(const FTestViewClientEvent& Event) { return Event.IsUnknownTransaction(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static FReducer GetAsReducer(const FTestViewClientEvent& Event) + { + return Event.GetAsReducer(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static FSpacetimeDBUnit GetAsSubscribeApplied(const FTestViewClientEvent& Event) + { + return Event.GetAsSubscribeApplied(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static FSpacetimeDBUnit GetAsUnsubscribeApplied(const FTestViewClientEvent& Event) + { + return Event.GetAsUnsubscribeApplied(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static FSpacetimeDBUnit GetAsDisconnected(const FTestViewClientEvent& Event) + { + return Event.GetAsDisconnected(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static FSpacetimeDBUnit GetAsTransaction(const FTestViewClientEvent& Event) + { + return Event.GetAsTransaction(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static FString GetAsSubscribeError(const FTestViewClientEvent& Event) + { + return Event.GetAsSubscribeError(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewClientEvent") + static FSpacetimeDBUnit GetAsUnknownTransaction(const FTestViewClientEvent& Event) + { + return Event.GetAsUnknownTransaction(); + } + +}; + + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FEventContext : public FContextBase +{ + GENERATED_BODY() + + FEventContext() = default; + FEventContext(UDbConnection* InConn, const FTestViewClientEvent& InEvent) : FContextBase(InConn), Event(InEvent) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FTestViewClientEvent Event; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FReducerEventContext : public FContextBase +{ + GENERATED_BODY() + + FReducerEventContext() = default; + FReducerEventContext(UDbConnection* InConn, FTestViewClientReducerEvent InEvent) : FContextBase(InConn), Event(InEvent) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FTestViewClientReducerEvent Event; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FProcedureEventContext : public FContextBase +{ + GENERATED_BODY() + + FProcedureEventContext() = default; + FProcedureEventContext(UDbConnection* InConn, FTestViewClientProcedureEvent InEvent) : FContextBase(InConn), Event(InEvent) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FTestViewClientProcedureEvent Event; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FErrorContext : public FContextBase +{ + GENERATED_BODY() + + FErrorContext() = default; + FErrorContext(UDbConnection* InConn, const FString& InError) : FContextBase(InConn), Error(InError) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FString Error; + +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FSubscriptionEventContext : public FContextBase +{ + GENERATED_BODY() + + FSubscriptionEventContext() = default; + FSubscriptionEventContext(UDbConnection* InConn) : FContextBase(InConn) {} + +}; + +DECLARE_DYNAMIC_DELEGATE_OneParam( + FOnSubscriptionApplied, + FSubscriptionEventContext, Context); + +DECLARE_DYNAMIC_DELEGATE_OneParam( + FOnSubscriptionError, + FErrorContext, Context); + +// RemoteTables class +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API URemoteTables : public UObject +{ + GENERATED_BODY() + +public: + void Initialize(); + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UMyPlayerTable* MyPlayer; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UMyPlayerAndLevelTable* MyPlayerAndLevel; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UNearbyPlayersTable* NearbyPlayers; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UPlayerTable* Player; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UPlayerLevelTable* PlayerLevel; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UPlayersAtLevel0Table* PlayersAtLevel0; + +}; + +// RemoteReducers class +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API URemoteReducers : public UObject +{ + GENERATED_BODY() + +public: + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FDeletePlayerHandler, + const FReducerEventContext&, Context, + const FSpacetimeDBIdentity&, Identity + ); + UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") + FDeletePlayerHandler OnDeletePlayer; + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + void DeletePlayer(const FSpacetimeDBIdentity& Identity); + + bool InvokeDeletePlayer(const FReducerEventContext& Context, const UDeletePlayerReducer* Args); + bool InvokeDeletePlayerWithArgs(const FReducerEventContext& Context, const FDeletePlayerArgs& Args); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FInsertPlayerHandler, + const FReducerEventContext&, Context, + const FSpacetimeDBIdentity&, Identity, + uint64, Level + ); + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FInsertPlayerHandler OnInsertPlayer; + + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + void InsertPlayer(const FSpacetimeDBIdentity& Identity, const uint64 Level); + + bool InvokeInsertPlayer(const FReducerEventContext& Context, const UInsertPlayerReducer* Args); + bool InvokeInsertPlayerWithArgs(const FReducerEventContext& Context, const FInsertPlayerArgs& Args); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FMovePlayerHandler, + const FReducerEventContext&, Context, + int32, Dx, + int32, Dy + ); + UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") + FMovePlayerHandler OnMovePlayer; + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + void MovePlayer(const int32 Dx, const int32 Dy); + + bool InvokeMovePlayer(const FReducerEventContext& Context, const UMovePlayerReducer* Args); + bool InvokeMovePlayerWithArgs(const FReducerEventContext& Context, const FMovePlayerArgs& Args); + + // Internal error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error); + FInternalOnUnhandledReducerError InternalOnUnhandledReducerError; + +private: + + friend UDbConnection; + + UPROPERTY() + class UDbConnection* Conn; +}; + +// RemoteProcedures class +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API URemoteProcedures : public UObject +{ + GENERATED_BODY() + +public: + + // Internal error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error); + FInternalOnUnhandledProcedureError InternalOnUnhandledProcedureError; + +private: + + friend UDbConnection; + + UPROPERTY() + class UDbConnection* Conn; +}; + +// QueryBuilder types +struct TESTVIEWCLIENT_API FMyPlayerCols; +struct TESTVIEWCLIENT_API FMyPlayerIxCols; +struct TESTVIEWCLIENT_API FPlayerAndLevelCols; +struct TESTVIEWCLIENT_API FPlayerAndLevelIxCols; +struct TESTVIEWCLIENT_API FPlayerLocationCols; +struct TESTVIEWCLIENT_API FPlayerLocationIxCols; +struct TESTVIEWCLIENT_API FPlayerCols; +struct TESTVIEWCLIENT_API FPlayerIxCols; +struct TESTVIEWCLIENT_API FPlayerLevelCols; +struct TESTVIEWCLIENT_API FPlayerLevelIxCols; +struct TESTVIEWCLIENT_API FPlayersAtLevel0Cols; +struct TESTVIEWCLIENT_API FPlayersAtLevel0IxCols; + +struct TESTVIEWCLIENT_API FMyPlayerCols +{ + explicit FMyPlayerCols(const char* TableName) + : EntityId(TableName, "entity_id"), Identity(TableName, "identity") {} + + ::SpacetimeDB::query_builder::Col EntityId; + ::SpacetimeDB::query_builder::Col Identity; +}; + +struct TESTVIEWCLIENT_API FMyPlayerIxCols +{ + explicit FMyPlayerIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWCLIENT_API FPlayerAndLevelCols +{ + explicit FPlayerAndLevelCols(const char* TableName) + : EntityId(TableName, "entity_id"), Identity(TableName, "identity"), Level(TableName, "level") {} + + ::SpacetimeDB::query_builder::Col EntityId; + ::SpacetimeDB::query_builder::Col Identity; + ::SpacetimeDB::query_builder::Col Level; +}; + +struct TESTVIEWCLIENT_API FPlayerAndLevelIxCols +{ + explicit FPlayerAndLevelIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWCLIENT_API FPlayerLocationCols +{ + explicit FPlayerLocationCols(const char* TableName) + : EntityId(TableName, "entity_id"), Active(TableName, "active"), X(TableName, "x"), Y(TableName, "y") {} + + ::SpacetimeDB::query_builder::Col EntityId; + ::SpacetimeDB::query_builder::Col Active; + ::SpacetimeDB::query_builder::Col X; + ::SpacetimeDB::query_builder::Col Y; +}; + +struct TESTVIEWCLIENT_API FPlayerLocationIxCols +{ + explicit FPlayerLocationIxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWCLIENT_API FPlayerCols +{ + explicit FPlayerCols(const char* TableName) + : EntityId(TableName, "entity_id"), Identity(TableName, "identity") {} + + ::SpacetimeDB::query_builder::Col EntityId; + ::SpacetimeDB::query_builder::Col Identity; +}; + +struct TESTVIEWCLIENT_API FPlayerIxCols +{ + explicit FPlayerIxCols(const char* TableName) + : EntityId(TableName, "entity_id"), Identity(TableName, "identity") {} + + ::SpacetimeDB::query_builder::IxCol EntityId; + ::SpacetimeDB::query_builder::IxCol Identity; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWCLIENT_API FPlayerLevelCols +{ + explicit FPlayerLevelCols(const char* TableName) + : EntityId(TableName, "entity_id"), Level(TableName, "level") {} + + ::SpacetimeDB::query_builder::Col EntityId; + ::SpacetimeDB::query_builder::Col Level; +}; + +struct TESTVIEWCLIENT_API FPlayerLevelIxCols +{ + explicit FPlayerLevelIxCols(const char* TableName) + : EntityId(TableName, "entity_id"), Level(TableName, "level") {} + + ::SpacetimeDB::query_builder::IxCol EntityId; + ::SpacetimeDB::query_builder::IxCol Level; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWCLIENT_API FPlayersAtLevel0Cols +{ + explicit FPlayersAtLevel0Cols(const char* TableName) + : EntityId(TableName, "entity_id"), Identity(TableName, "identity") {} + + ::SpacetimeDB::query_builder::Col EntityId; + ::SpacetimeDB::query_builder::Col Identity; +}; + +struct TESTVIEWCLIENT_API FPlayersAtLevel0IxCols +{ + explicit FPlayersAtLevel0IxCols(const char* TableName) + {} + +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWCLIENT_API FFrom +{ + [[nodiscard]] ::SpacetimeDB::query_builder::Table MyPlayer() const { return ::SpacetimeDB::query_builder::Table("my_player", FMyPlayerCols("my_player"), FMyPlayerIxCols("my_player")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table MyPlayerAndLevel() const { return ::SpacetimeDB::query_builder::Table("my_player_and_level", FPlayerAndLevelCols("my_player_and_level"), FPlayerAndLevelIxCols("my_player_and_level")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table NearbyPlayers() const { return ::SpacetimeDB::query_builder::Table("nearby_players", FPlayerLocationCols("nearby_players"), FPlayerLocationIxCols("nearby_players")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table Player() const { return ::SpacetimeDB::query_builder::Table("player", FPlayerCols("player"), FPlayerIxCols("player")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PlayerLevel() const { return ::SpacetimeDB::query_builder::Table("player_level", FPlayerLevelCols("player_level"), FPlayerLevelIxCols("player_level")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table PlayersAtLevel0() const { return ::SpacetimeDB::query_builder::Table("players_at_level_0", FPlayersAtLevel0Cols("players_at_level_0"), FPlayersAtLevel0IxCols("players_at_level_0")); } +}; + +struct TESTVIEWCLIENT_API FQueryBuilder +{ + FFrom From; + + static TArray AllTablesSqlQueries() + { + TArray Sql; + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.MyPlayer().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.MyPlayerAndLevel().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.NearbyPlayers().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.Player().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PlayerLevel().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.PlayersAtLevel0().into_sql().c_str()))); + return Sql; + } +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintPredicate +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FMyPlayerQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FMyPlayerAndLevelQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FNearbyPlayersQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FPlayerQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FPlayerLevelQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FPlayersAtLevel0Query +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintBoolColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintUInt8Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintInt32Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintInt64Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintFloatColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintDoubleColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintStringColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintIdentityColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintConnectionIdColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintTimestampColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FBlueprintUuidColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UQueryBuilderBlueprintLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayer", meta=(DisplayName="From MyPlayer")) + static FMyPlayerQuery FromMyPlayer() + { + FMyPlayerQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.MyPlayer().into_sql().c_str())); + Query.ResultSourceName = TEXT("my_player"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayer", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_MyPlayerQueryToBlueprintQuery(const FMyPlayerQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayer|Columns", meta=(DisplayName="MyPlayer Identity")) + static FBlueprintIdentityColumn MyPlayerIdentity(const FMyPlayerQuery& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("my_player") : Query.ResultSourceName; + Column.ColumnName = TEXT("identity"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayer", meta=(DisplayName="MyPlayer Where")) + static FMyPlayerQuery MyPlayerWhere(FMyPlayerQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayerAndLevel", meta=(DisplayName="From MyPlayerAndLevel")) + static FMyPlayerAndLevelQuery FromMyPlayerAndLevel() + { + FMyPlayerAndLevelQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.MyPlayerAndLevel().into_sql().c_str())); + Query.ResultSourceName = TEXT("my_player_and_level"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayerAndLevel", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_MyPlayerAndLevelQueryToBlueprintQuery(const FMyPlayerAndLevelQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayerAndLevel|Columns", meta=(DisplayName="MyPlayerAndLevel Identity")) + static FBlueprintIdentityColumn MyPlayerAndLevelIdentity(const FMyPlayerAndLevelQuery& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("my_player_and_level") : Query.ResultSourceName; + Column.ColumnName = TEXT("identity"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|MyPlayerAndLevel", meta=(DisplayName="MyPlayerAndLevel Where")) + static FMyPlayerAndLevelQuery MyPlayerAndLevelWhere(FMyPlayerAndLevelQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|NearbyPlayers", meta=(DisplayName="From NearbyPlayers")) + static FNearbyPlayersQuery FromNearbyPlayers() + { + FNearbyPlayersQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.NearbyPlayers().into_sql().c_str())); + Query.ResultSourceName = TEXT("nearby_players"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|NearbyPlayers", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_NearbyPlayersQueryToBlueprintQuery(const FNearbyPlayersQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|NearbyPlayers|Columns", meta=(DisplayName="NearbyPlayers Active")) + static FBlueprintBoolColumn NearbyPlayersActive(const FNearbyPlayersQuery& Query) + { + FBlueprintBoolColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("nearby_players") : Query.ResultSourceName; + Column.ColumnName = TEXT("active"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|NearbyPlayers|Columns", meta=(DisplayName="NearbyPlayers X")) + static FBlueprintInt32Column NearbyPlayersX(const FNearbyPlayersQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("nearby_players") : Query.ResultSourceName; + Column.ColumnName = TEXT("x"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|NearbyPlayers|Columns", meta=(DisplayName="NearbyPlayers Y")) + static FBlueprintInt32Column NearbyPlayersY(const FNearbyPlayersQuery& Query) + { + FBlueprintInt32Column Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("nearby_players") : Query.ResultSourceName; + Column.ColumnName = TEXT("y"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|NearbyPlayers", meta=(DisplayName="NearbyPlayers Where")) + static FNearbyPlayersQuery NearbyPlayersWhere(FNearbyPlayersQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Player", meta=(DisplayName="From Player")) + static FPlayerQuery FromPlayer() + { + FPlayerQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.Player().into_sql().c_str())); + Query.ResultSourceName = TEXT("player"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Player", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PlayerQueryToBlueprintQuery(const FPlayerQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Player|Columns", meta=(DisplayName="Player Identity")) + static FBlueprintIdentityColumn PlayerIdentity(const FPlayerQuery& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("player") : Query.ResultSourceName; + Column.ColumnName = TEXT("identity"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Player", meta=(DisplayName="Player Where")) + static FPlayerQuery PlayerWhere(FPlayerQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PlayerLevel", meta=(DisplayName="From PlayerLevel")) + static FPlayerLevelQuery FromPlayerLevel() + { + FPlayerLevelQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PlayerLevel().into_sql().c_str())); + Query.ResultSourceName = TEXT("player_level"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PlayerLevel", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PlayerLevelQueryToBlueprintQuery(const FPlayerLevelQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PlayerLevel", meta=(DisplayName="PlayerLevel Where")) + static FPlayerLevelQuery PlayerLevelWhere(FPlayerLevelQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PlayersAtLevel0", meta=(DisplayName="From PlayersAtLevel0")) + static FPlayersAtLevel0Query FromPlayersAtLevel0() + { + FPlayersAtLevel0Query Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.PlayersAtLevel0().into_sql().c_str())); + Query.ResultSourceName = TEXT("players_at_level_0"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PlayersAtLevel0", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_PlayersAtLevel0QueryToBlueprintQuery(const FPlayersAtLevel0Query& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PlayersAtLevel0|Columns", meta=(DisplayName="PlayersAtLevel0 Identity")) + static FBlueprintIdentityColumn PlayersAtLevel0Identity(const FPlayersAtLevel0Query& Query) + { + FBlueprintIdentityColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("players_at_level_0") : Query.ResultSourceName; + Column.ColumnName = TEXT("identity"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|PlayersAtLevel0", meta=(DisplayName="PlayersAtLevel0 Where")) + static FPlayersAtLevel0Query PlayersAtLevel0Where(FPlayersAtLevel0Query Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Bool Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate BoolEqual(const FBlueprintBoolColumn& Column, const bool Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UInt8Equal(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate UInt8GreaterThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate UInt8GreaterEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate UInt8LessThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate UInt8LessEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int32Equal(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int32GreaterThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int32GreaterEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int32LessThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int32LessEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int64Equal(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int64GreaterThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int64GreaterEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int64LessThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int64LessEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate FloatEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate FloatGreaterThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate FloatGreaterEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate FloatLessThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate FloatLessEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate DoubleEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate DoubleGreaterThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate DoubleGreaterEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate DoubleLessThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate DoubleLessEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="String Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate StringEqual(const FBlueprintStringColumn& Column, const FString& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Identity Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate IdentityEqual(const FBlueprintIdentityColumn& Column, const FSpacetimeDBIdentity& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="ConnectionId Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate ConnectionIdEqual(const FBlueprintConnectionIdColumn& Column, const FSpacetimeDBConnectionId& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate TimestampEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate TimestampGreaterThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate TimestampGreaterEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate TimestampLessThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate TimestampLessEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Uuid Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UuidEqual(const FBlueprintUuidColumn& Column, const FSpacetimeDBUuid& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="AND", CompactNodeTitle="AND", Keywords="and &&")) + static FBlueprintPredicate And(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) AND (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="OR", CompactNodeTitle="OR", Keywords="or ||")) + static FBlueprintPredicate Or(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) OR (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="NOT", CompactNodeTitle="NOT", Keywords="not !")) + static FBlueprintPredicate Not(const FBlueprintPredicate& A) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("NOT (%s)"), *A.Sql); + return Predicate; + } + +private: + static FString AppendPredicate(const FString& Sql, const FString& Predicate) + { + if (Sql.Contains(TEXT(" WHERE "))) + { + return Sql + TEXT(" AND (") + Predicate + TEXT(")"); + } + return Sql + TEXT(" WHERE (") + Predicate + TEXT(")"); + } +}; + +// SubscriptionBuilder class +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + USubscriptionBuilder* OnApplied(FOnSubscriptionApplied Callback); + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + USubscriptionBuilder* OnError(FOnSubscriptionError Callback); + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + USubscriptionHandle* Subscribe(); + + USubscriptionHandle* Subscribe(const TArray& SQL); + + template + USubscriptionBuilder* AddQuery(TFn&& Build) + { + FQueryBuilder Q; + auto Query = std::forward(Build)(Q); + static_assert(::SpacetimeDB::query_builder::QueryBuilderReturn, + "Typed subscription queries must return a query_builder table/query expression."); + PendingSqlQueries.Add(FString(UTF8_TO_TCHAR(Query.into_sql().c_str()))); + return this; + } + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB", meta=(DisplayName="AddQuery", ScriptName="AddQuery")) + USubscriptionBuilder* AddBlueprintQuery(const FBlueprintQuery& Query); + + USubscriptionBuilder* AddMyPlayerQuery(const FMyPlayerQuery& Query); + + USubscriptionBuilder* AddMyPlayerAndLevelQuery(const FMyPlayerAndLevelQuery& Query); + + USubscriptionBuilder* AddNearbyPlayersQuery(const FNearbyPlayersQuery& Query); + + USubscriptionBuilder* AddPlayerQuery(const FPlayerQuery& Query); + + USubscriptionBuilder* AddPlayerLevelQuery(const FPlayerLevelQuery& Query); + + USubscriptionBuilder* AddPlayersAtLevel0Query(const FPlayersAtLevel0Query& Query); + + /** Convenience for subscribing to all rows from all public sources, including views */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + USubscriptionHandle* SubscribeToAllTables(); + + + friend class UDbConnection; + friend class UDbConnectionBase; + +protected: + UPROPERTY() + class UDbConnection* Conn; + + UPROPERTY() + TArray PendingSqlQueries; + + // Delegates stored so Subscribe() can bind forwarding callbacks + FOnSubscriptionApplied OnAppliedDelegateInternal; + FOnSubscriptionError OnErrorDelegateInternal; +}; + +// SubscriptionHandle class +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API USubscriptionHandle : public USubscriptionHandleBase +{ + GENERATED_BODY() + +public: + + USubscriptionHandle() {}; + + explicit USubscriptionHandle(UDbConnection* InConn); + + friend class USubscriptionBuilder; + +private: + UPROPERTY() + class UDbConnection* Conn; + + // Delegates that expose subscription events with connection aware contexts + FOnSubscriptionApplied OnAppliedDelegate; + FOnSubscriptionError OnErrorDelegate; + + UFUNCTION() + void ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx); + + UFUNCTION() + void ForwardOnError(const FErrorContextBase& BaseCtx); +}; + +/* + @Note: Child class of UDbConnectionBuilderBase. +*/ +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UDbConnectionBuilder : public UDbConnectionBuilderBase +{ + GENERATED_BODY() +public: + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithUri(const FString& InUri); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithDatabaseName(const FString& InName); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithToken(const FString& InToken); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithCompression(const ESpacetimeDBCompression& InCompression); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* OnConnect(FOnConnectDelegate Callback); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* OnConnectError(FOnConnectErrorDelegate Callback); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* OnDisconnect(FOnDisconnectDelegate Callback); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnection* Build(); + +private: + + // Stored delegates which will be forwarded when the connection events occur. + FOnConnectDelegate OnConnectDelegateInternal; + FOnDisconnectDelegate OnDisconnectDelegateInternal; +}; + +// Main DbConnection class +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UDbConnection : public UDbConnectionBase +{ + GENERATED_BODY() + +public: + explicit UDbConnection(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); + + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + URemoteTables* Db; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + URemoteReducers* Reducers; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + URemoteProcedures* Procedures; + + // Delegates that allow users to bind with the concrete connection type. + FOnConnectDelegate OnConnectDelegate; + FOnDisconnectDelegate OnDisconnectDelegate; + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + USubscriptionBuilder* SubscriptionBuilder(); + + /** Static entry point for constructing a connection. */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB", DisplayName = "SpacetimeDB TestViewClient Builder") + static UDbConnectionBuilder* Builder(); + + // Error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error); + UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") + FOnUnhandledReducerError OnUnhandledReducerError; + + // Error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error); + UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") + FOnUnhandledProcedureError OnUnhandledProcedureError; + + +protected: + + // Hook up error handling to reducers and procedures + virtual void PostInitProperties() override; + + UFUNCTION() + void ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken); + UFUNCTION() + void ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error); + + UFUNCTION() + void OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error); + + UFUNCTION() + void OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error); + + // Override the DbConnectionBase methods to handle updates and events + virtual void DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event) override; + + // Override the reducer event handler to dispatch events to the appropriate reducers + virtual void ReducerEvent(const FReducerEvent& Event) override; + + // Override the reducer event failed handler + virtual void ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) override; + // Override the procedure event failed handler + virtual void ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) override; + + friend class USubscriptionBuilder; + friend class UDbConnectionBuilder; + friend class URemoteReducers; + + // Internal reducer correlation helpers (request_id -> typed reducer) + void RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer); + bool TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const; + bool TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer); + +private: + TMap PendingTypedReducers; +}; + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/MyPlayerAndLevelTable.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/MyPlayerAndLevelTable.g.h new file mode 100644 index 00000000000..6a49f4bf34c --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/MyPlayerAndLevelTable.g.h @@ -0,0 +1,64 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/PlayerAndLevelType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "MyPlayerAndLevelTable.g.generated.h" + +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UMyPlayerAndLevelTable : public URemoteTable +{ + GENERATED_BODY() + +public: + void PostInitialize(); + + /** Update function for my_player_and_level table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnMyPlayerAndLevelInsert, + const FEventContext&, Context, + const FPlayerAndLevelType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnMyPlayerAndLevelUpdate, + const FEventContext&, Context, + const FPlayerAndLevelType&, OldRow, + const FPlayerAndLevelType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnMyPlayerAndLevelDelete, + const FEventContext&, Context, + const FPlayerAndLevelType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnMyPlayerAndLevelInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnMyPlayerAndLevelUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnMyPlayerAndLevelDelete OnDelete; + +private: + const FString TableName = TEXT("my_player_and_level"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/MyPlayerTable.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/MyPlayerTable.g.h new file mode 100644 index 00000000000..ca978580203 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/MyPlayerTable.g.h @@ -0,0 +1,64 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/PlayerType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "MyPlayerTable.g.generated.h" + +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UMyPlayerTable : public URemoteTable +{ + GENERATED_BODY() + +public: + void PostInitialize(); + + /** Update function for my_player table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnMyPlayerInsert, + const FEventContext&, Context, + const FPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnMyPlayerUpdate, + const FEventContext&, Context, + const FPlayerType&, OldRow, + const FPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnMyPlayerDelete, + const FEventContext&, Context, + const FPlayerType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnMyPlayerInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnMyPlayerUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnMyPlayerDelete OnDelete; + +private: + const FString TableName = TEXT("my_player"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/NearbyPlayersTable.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/NearbyPlayersTable.g.h new file mode 100644 index 00000000000..e7978fa5320 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/NearbyPlayersTable.g.h @@ -0,0 +1,64 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/PlayerLocationType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "NearbyPlayersTable.g.generated.h" + +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UNearbyPlayersTable : public URemoteTable +{ + GENERATED_BODY() + +public: + void PostInitialize(); + + /** Update function for nearby_players table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnNearbyPlayersInsert, + const FEventContext&, Context, + const FPlayerLocationType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnNearbyPlayersUpdate, + const FEventContext&, Context, + const FPlayerLocationType&, OldRow, + const FPlayerLocationType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnNearbyPlayersDelete, + const FEventContext&, Context, + const FPlayerLocationType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnNearbyPlayersInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnNearbyPlayersUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnNearbyPlayersDelete OnDelete; + +private: + const FString TableName = TEXT("nearby_players"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayerLevelTable.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayerLevelTable.g.h new file mode 100644 index 00000000000..dbaa12e754a --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayerLevelTable.g.h @@ -0,0 +1,141 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/PlayerLevelType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "PlayerLevelTable.g.generated.h" + +UCLASS(Blueprintable) +class TESTVIEWCLIENT_API UPlayerLevelEntityIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> EntityIdIndexHelper; + +public: + UPlayerLevelEntityIdUniqueIndex() + // Initialize the helper with the specific unique index name + : EntityIdIndexHelper("entity_id") { + } + + /** + * Finds a PlayerLevel by their unique entityid. + * @param Key The entityid to search for. + * @return The found FPlayerLevelType, or a default-constructed FPlayerLevelType if not found. + */ + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FPlayerLevelType Find(uint64 Key) + { + // Simply delegate the call to the internal helper + return EntityIdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InPlayerLevelCache) + { + EntityIdIndexHelper.Cache = InPlayerLevelCache; + } +}; +/***/ + +UCLASS(Blueprintable) +class UPlayerLevelLevelIndex : public UObject +{ + GENERATED_BODY() + +public: + TArray Filter(const uint64& Level) const + { + TArray OutResults; + + LocalCache->FindByMultiKeyBTreeIndex>( + OutResults, + TEXT("level"), + MakeTuple(Level) + ); + + return OutResults; + } + + void SetCache(TSharedPtr> InCache) + { + LocalCache = InCache; + } + +private: + // NOTE: Not exposed to Blueprint because some parameter types are not Blueprint-compatible + void FilterLevel(TArray& OutResults, const uint64& Level) + { + OutResults = Filter(Level); + } + + TSharedPtr> LocalCache; +}; + +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UPlayerLevelTable : public URemoteTable +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly) + UPlayerLevelEntityIdUniqueIndex* EntityId; + + UPROPERTY(BlueprintReadOnly) + UPlayerLevelLevelIndex* Level; + + void PostInitialize(); + + /** Update function for player_level table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnPlayerLevelInsert, + const FEventContext&, Context, + const FPlayerLevelType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnPlayerLevelUpdate, + const FEventContext&, Context, + const FPlayerLevelType&, OldRow, + const FPlayerLevelType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnPlayerLevelDelete, + const FEventContext&, Context, + const FPlayerLevelType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayerLevelInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayerLevelUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayerLevelDelete OnDelete; + +private: + const FString TableName = TEXT("player_level"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayerTable.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayerTable.g.h new file mode 100644 index 00000000000..acbc7f06735 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayerTable.g.h @@ -0,0 +1,144 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/PlayerType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "PlayerTable.g.generated.h" + +UCLASS(Blueprintable) +class TESTVIEWCLIENT_API UPlayerEntityIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> EntityIdIndexHelper; + +public: + UPlayerEntityIdUniqueIndex() + // Initialize the helper with the specific unique index name + : EntityIdIndexHelper("entity_id") { + } + + /** + * Finds a Player by their unique entityid. + * @param Key The entityid to search for. + * @return The found FPlayerType, or a default-constructed FPlayerType if not found. + */ + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FPlayerType Find(uint64 Key) + { + // Simply delegate the call to the internal helper + return EntityIdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InPlayerCache) + { + EntityIdIndexHelper.Cache = InPlayerCache; + } +}; +/***/ + +UCLASS(Blueprintable) +class TESTVIEWCLIENT_API UPlayerIdentityUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> IdentityIndexHelper; + +public: + UPlayerIdentityUniqueIndex() + // Initialize the helper with the specific unique index name + : IdentityIndexHelper("identity") { + } + + /** + * Finds a Player by their unique identity. + * @param Key The identity to search for. + * @return The found FPlayerType, or a default-constructed FPlayerType if not found. + */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|PlayerIndex") + FPlayerType Find(FSpacetimeDBIdentity Key) + { + // Simply delegate the call to the internal helper + return IdentityIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InPlayerCache) + { + IdentityIndexHelper.Cache = InPlayerCache; + } +}; +/***/ + +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UPlayerTable : public URemoteTable +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly) + UPlayerEntityIdUniqueIndex* EntityId; + + UPROPERTY(BlueprintReadOnly) + UPlayerIdentityUniqueIndex* Identity; + + void PostInitialize(); + + /** Update function for player table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnPlayerInsert, + const FEventContext&, Context, + const FPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnPlayerUpdate, + const FEventContext&, Context, + const FPlayerType&, OldRow, + const FPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnPlayerDelete, + const FEventContext&, Context, + const FPlayerType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayerInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayerUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayerDelete OnDelete; + +private: + const FString TableName = TEXT("player"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayersAtLevel0Table.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayersAtLevel0Table.g.h new file mode 100644 index 00000000000..f075e353c30 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Tables/PlayersAtLevel0Table.g.h @@ -0,0 +1,64 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/PlayerType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "PlayersAtLevel0Table.g.generated.h" + +UCLASS(BlueprintType) +class TESTVIEWCLIENT_API UPlayersAtLevel0Table : public URemoteTable +{ + GENERATED_BODY() + +public: + void PostInitialize(); + + /** Update function for players_at_level_0 table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnPlayersAtLevel0Insert, + const FEventContext&, Context, + const FPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnPlayersAtLevel0Update, + const FEventContext&, Context, + const FPlayerType&, OldRow, + const FPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnPlayersAtLevel0Delete, + const FEventContext&, Context, + const FPlayerType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayersAtLevel0Insert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayersAtLevel0Update OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnPlayersAtLevel0Delete OnDelete; + +private: + const FString TableName = TEXT("players_at_level_0"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerAndLevelType.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerAndLevelType.g.h new file mode 100644 index 00000000000..f059a5b9a63 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerAndLevelType.g.h @@ -0,0 +1,54 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "PlayerAndLevelType.g.generated.h" + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FPlayerAndLevelType +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 EntityId = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FSpacetimeDBIdentity Identity; + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Level = 0; + + FORCEINLINE bool operator==(const FPlayerAndLevelType& Other) const + { + return EntityId == Other.EntityId && Identity == Other.Identity && Level == Other.Level; + } + + FORCEINLINE bool operator!=(const FPlayerAndLevelType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FPlayerAndLevelType. + * Combines the hashes of all fields that are compared in operator==. + * @param PlayerAndLevelType The FPlayerAndLevelType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FPlayerAndLevelType& PlayerAndLevelType) +{ + uint32 Hash = GetTypeHash(PlayerAndLevelType.EntityId); + Hash = HashCombine(Hash, GetTypeHash(PlayerAndLevelType.Identity)); + Hash = HashCombine(Hash, GetTypeHash(PlayerAndLevelType.Level)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FPlayerAndLevelType); + + UE_SPACETIMEDB_STRUCT(FPlayerAndLevelType, EntityId, Identity, Level); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerLevelType.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerLevelType.g.h new file mode 100644 index 00000000000..166e205b77a --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerLevelType.g.h @@ -0,0 +1,49 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "PlayerLevelType.g.generated.h" + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FPlayerLevelType +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 EntityId = 0; + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Level = 0; + + FORCEINLINE bool operator==(const FPlayerLevelType& Other) const + { + return EntityId == Other.EntityId && Level == Other.Level; + } + + FORCEINLINE bool operator!=(const FPlayerLevelType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FPlayerLevelType. + * Combines the hashes of all fields that are compared in operator==. + * @param PlayerLevelType The FPlayerLevelType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FPlayerLevelType& PlayerLevelType) +{ + uint32 Hash = GetTypeHash(PlayerLevelType.EntityId); + Hash = HashCombine(Hash, GetTypeHash(PlayerLevelType.Level)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FPlayerLevelType); + + UE_SPACETIMEDB_STRUCT(FPlayerLevelType, EntityId, Level); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerLocationType.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerLocationType.g.h new file mode 100644 index 00000000000..cac3775992c --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerLocationType.g.h @@ -0,0 +1,57 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "PlayerLocationType.g.generated.h" + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FPlayerLocationType +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 EntityId = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + bool Active = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + int32 X = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + int32 Y = 0; + + FORCEINLINE bool operator==(const FPlayerLocationType& Other) const + { + return EntityId == Other.EntityId && Active == Other.Active && X == Other.X && Y == Other.Y; + } + + FORCEINLINE bool operator!=(const FPlayerLocationType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FPlayerLocationType. + * Combines the hashes of all fields that are compared in operator==. + * @param PlayerLocationType The FPlayerLocationType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FPlayerLocationType& PlayerLocationType) +{ + uint32 Hash = GetTypeHash(PlayerLocationType.EntityId); + Hash = HashCombine(Hash, GetTypeHash(PlayerLocationType.Active)); + Hash = HashCombine(Hash, GetTypeHash(PlayerLocationType.X)); + Hash = HashCombine(Hash, GetTypeHash(PlayerLocationType.Y)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FPlayerLocationType); + + UE_SPACETIMEDB_STRUCT(FPlayerLocationType, EntityId, Active, X, Y); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerType.g.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerType.g.h new file mode 100644 index 00000000000..afe96d88ab9 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/ModuleBindings/Types/PlayerType.g.h @@ -0,0 +1,50 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "PlayerType.g.generated.h" + +USTRUCT(BlueprintType) +struct TESTVIEWCLIENT_API FPlayerType +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 EntityId = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FSpacetimeDBIdentity Identity; + + FORCEINLINE bool operator==(const FPlayerType& Other) const + { + return EntityId == Other.EntityId && Identity == Other.Identity; + } + + FORCEINLINE bool operator!=(const FPlayerType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FPlayerType. + * Combines the hashes of all fields that are compared in operator==. + * @param PlayerType The FPlayerType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FPlayerType& PlayerType) +{ + uint32 Hash = GetTypeHash(PlayerType.EntityId); + Hash = HashCombine(Hash, GetTypeHash(PlayerType.Identity)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FPlayerType); + + UE_SPACETIMEDB_STRUCT(FPlayerType, EntityId, Identity); +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/CommonTestFunctions.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/CommonTestFunctions.h new file mode 100644 index 00000000000..8a52c88e03b --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/CommonTestFunctions.h @@ -0,0 +1,74 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Misc/AutomationTest.h" +#include "Tests/TestCounter.h" + +#include "Connection/Callback.h" +#include "Connection/Credentials.h" +#include "ModuleBindings/SpacetimeDBClient.g.h" + +#include "CommonTestFunctions.generated.h" + +#define TESTLOG_SUCCESS(Test, Format, ...) \ + do \ + { \ + const FString UserMessage = FString::Printf(Format, ##__VA_ARGS__); \ + const FString LogMessage = FString::Printf(TEXT(" + %s"), *UserMessage); \ + UE_LOG(LogTemp, Log, TEXT("%s"), *LogMessage); \ + Test.AddInfo(LogMessage); \ + } while (false) + +#define TESTLOG_FAIL(Test, Format, ...) \ + do \ + { \ + const FString UserMessage = FString::Printf(Format, ##__VA_ARGS__); \ + const FString LogMessage = FString::Printf(TEXT(" x %s"), *UserMessage); \ + UE_LOG(LogTemp, Error, TEXT("%s"), *LogMessage); \ + Test.AddError(LogMessage); \ + } while (false) + +UCLASS() +class TESTVIEWCLIENT_API UTestHelperDelegates : public UObject +{ + GENERATED_BODY() + +public: + TFunction OnConnect; + UFUNCTION() + void HandleConnect(UDbConnection* Conn, FSpacetimeDBIdentity Identity, const FString& Token); + + TFunction OnConnectError; + UFUNCTION() + void HandleConnectError(UDbConnection* Conn, const FString& Error); + + TFunction OnDisconnect; + UFUNCTION() + void HandleDisconnect(UDbConnection* Conn, const FString& Error); + + TFunction OnSubscriptionApplied; + UFUNCTION() + void HandleSubscriptionApplied(FSubscriptionEventContext Ctx); + + TFunction OnSubscriptionError; + UFUNCTION() + void HandleSubscriptionError(FErrorContext Ctx); +}; + +UDbConnection* ConnectThen( + TSharedPtr Counter, + const FString& TestName, + TFunction Callback); + +bool GetDbName(FString& DBName, FString& Error); +bool ValidateParameterConfig(FAutomationTestBase* Test); +bool ReportTestResult(FAutomationTestBase& Test, const FString& TestName, TSharedPtr Counter, bool bTimedOut); + +template +T* CreateTestHandler() +{ + T* Handler = NewObject(GetTransientPackage()); + Handler->AddToRoot(); + Handler->Counter = MakeShared(); + return Handler; +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/PrimitiveHandlerList.def b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/PrimitiveHandlerList.def new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/PrimitiveHandlerList.def @@ -0,0 +1 @@ + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/SpacetimeFullClientTests.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/SpacetimeFullClientTests.h new file mode 100644 index 00000000000..5da4a816e9e --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/SpacetimeFullClientTests.h @@ -0,0 +1,28 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Misc/AutomationTest.h" + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewQueryBuilderDirectSourcesTest, + "SpacetimeDB.TestViewClient.ViewQueryBuilderDirectSourcesTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewSubscribeAllTablesTest, + "SpacetimeDB.TestViewClient.ViewSubscribeAllTablesTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewBlueprintQueryBuilderFlowTest, + "SpacetimeDB.TestViewClient.ViewBlueprintQueryBuilderFlowTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewBlueprintQueryBuilderRuntimeTest, + "SpacetimeDB.TestViewClient.ViewBlueprintQueryBuilderRuntimeTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/TestCounter.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/TestCounter.h new file mode 100644 index 00000000000..35b52debcb5 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/TestCounter.h @@ -0,0 +1,35 @@ +#pragma once + +#include "CoreMinimal.h" +#include "HAL/CriticalSection.h" + +struct FTestOutcome +{ + bool bSuccess = false; + FString Error; +}; + +class FTestCounter : public TSharedFromThis +{ +public: + FTestCounter() = default; + + void Register(const FString& TestName); + void MarkSuccess(const FString& TestName); + void MarkFailure(const FString& TestName, const FString& Error); + + bool IsComplete() const; + bool AllSucceeded() const; + TArray GetFailures() const; + TArray GetSuccesses() const; + + void Abort(); + bool IsAborted() const { return bAborted; } + + +private: + mutable FCriticalSection Mutex; + TMap Outcomes; + TSet Registered; + bool bAborted = false; +}; \ No newline at end of file diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/TestHandler.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/TestHandler.h new file mode 100644 index 00000000000..ba5eef092cb --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/TestHandler.h @@ -0,0 +1,36 @@ +#pragma once + +#include "CoreMinimal.h" +#include "UObject/Object.h" + +#include "ModuleBindings/SpacetimeDBClient.g.h" +#include "Tests/TestCounter.h" + +#include "TestHandler.generated.h" + +UCLASS() +class TESTVIEWCLIENT_API UTestHandler : public UObject +{ + GENERATED_BODY() + +public: + TSharedPtr Counter; +}; + +UCLASS() +class TESTVIEWCLIENT_API UViewBlueprintRuntimeHandler : public UTestHandler +{ + GENERATED_BODY() + +public: + FSpacetimeDBIdentity ExpectedIdentity = FSpacetimeDBIdentity::FromHex(TEXT("0x1111111111111111111111111111111111111111111111111111111111111111")); + + UFUNCTION() + void OnPlayersAtLevel0Insert(const FEventContext& Context, const FPlayerType& Value); + + UFUNCTION() + void OnPlayersAtLevel0Update(const FEventContext& Context, const FPlayerType& OldValue, const FPlayerType& NewValue); + + UFUNCTION() + void OnPlayersAtLevel0Delete(const FEventContext& Context, const FPlayerType& Value); +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderReducers.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderReducers.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderReducers.h @@ -0,0 +1 @@ +#pragma once diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderTypes.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderTypes.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderTypes.h @@ -0,0 +1 @@ +#pragma once diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderaTables.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderaTables.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/Public/Tests/UmbreallaHeaderaTables.h @@ -0,0 +1 @@ +#pragma once diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.Build.cs b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.Build.cs new file mode 100644 index 00000000000..84ecb7df9d6 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.Build.cs @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; + +public class TestViewClient : ModuleRules +{ + public TestViewClient(ReadOnlyTargetRules Target) : base(Target) + { + // Set the module type to be a standard module + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + // Set the module to use C++20 standard + CppStandard = CppStandardVersion.Cpp20; + + + // Enable exceptions for this module + bEnableExceptions = true; + + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "SpacetimeDbSdk" }); + + PrivateDependencyModuleNames.AddRange(new string[] { "DeveloperSettings" }); + + } +} diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.cpp new file mode 100644 index 00000000000..95d75714381 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.cpp @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "TestViewClient.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, TestViewClient, "TestViewClient"); diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.h new file mode 100644 index 00000000000..90aad9e7e22 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClient.h @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClientGameModeBase.cpp b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClientGameModeBase.cpp new file mode 100644 index 00000000000..c7102b92b21 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClientGameModeBase.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "TestViewClientGameModeBase.h" + diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClientGameModeBase.h b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClientGameModeBase.h new file mode 100644 index 00000000000..a60387c3a86 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClient/TestViewClientGameModeBase.h @@ -0,0 +1,17 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameModeBase.h" +#include "TestViewClientGameModeBase.generated.h" + +/** + * + */ +UCLASS() +class TESTVIEWCLIENT_API ATestViewClientGameModeBase : public AGameModeBase +{ + GENERATED_BODY() + +}; diff --git a/sdks/unreal/tests/TestViewClient/Source/TestViewClientEditor.Target.cs b/sdks/unreal/tests/TestViewClient/Source/TestViewClientEditor.Target.cs new file mode 100644 index 00000000000..f10d509c113 --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/Source/TestViewClientEditor.Target.cs @@ -0,0 +1,15 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class TestViewClientEditorTarget : TargetRules +{ + public TestViewClientEditorTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + DefaultBuildSettings = BuildSettingsVersion.V5; + + ExtraModuleNames.AddRange( new string[] { "TestViewClient" } ); + } +} diff --git a/sdks/unreal/tests/TestViewClient/TestViewClient.uproject b/sdks/unreal/tests/TestViewClient/TestViewClient.uproject new file mode 100644 index 00000000000..1a6f19cbbcd --- /dev/null +++ b/sdks/unreal/tests/TestViewClient/TestViewClient.uproject @@ -0,0 +1,25 @@ +{ + "FileVersion": 3, + "EngineAssociation": "5.6", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "TestViewClient", + "Type": "Runtime", + "LoadingPhase": "Default" + } + ], + "Plugins": [ + { + "Name": "ModelingToolsEditorMode", + "Enabled": true, + "TargetAllowList": [ + "Editor" + ] + } + ], + "AdditionalPluginDirectories": [ + "../../src" + ] +} diff --git a/sdks/unreal/tests/TestViewPkClient/.vsconfig b/sdks/unreal/tests/TestViewPkClient/.vsconfig new file mode 100644 index 00000000000..3b919ea7b8f --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/.vsconfig @@ -0,0 +1,17 @@ +{ + "version": "1.0", + "components": [ + "Component.Unreal.Debugger", + "Component.Unreal.Ide", + "Microsoft.Net.Component.4.6.2.TargetingPack", + "Microsoft.VisualStudio.Component.VC.14.38.17.8.ATL", + "Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64", + "Microsoft.VisualStudio.Component.VC.Llvm.Clang", + "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "Microsoft.VisualStudio.Component.Windows11SDK.22621", + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.NativeDesktop", + "Microsoft.VisualStudio.Workload.NativeGame" + ] +} diff --git a/sdks/unreal/tests/TestViewPkClient/Config/DefaultEditor.ini b/sdks/unreal/tests/TestViewPkClient/Config/DefaultEditor.ini new file mode 100644 index 00000000000..e69de29bb2d diff --git a/sdks/unreal/tests/TestViewPkClient/Config/DefaultEditorPerProjectUserSettings.ini b/sdks/unreal/tests/TestViewPkClient/Config/DefaultEditorPerProjectUserSettings.ini new file mode 100644 index 00000000000..58b060183b7 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Config/DefaultEditorPerProjectUserSettings.ini @@ -0,0 +1,5 @@ + + +[/Script/TestViewPkClient.SpacetimeDBSettings] +SpacetimeDbTestName=sdk-test-view-pk + diff --git a/sdks/unreal/tests/TestViewPkClient/Config/DefaultEngine.ini b/sdks/unreal/tests/TestViewPkClient/Config/DefaultEngine.ini new file mode 100644 index 00000000000..0239c099c52 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Config/DefaultEngine.ini @@ -0,0 +1,57 @@ +[Zen] +bEnableZen=false +bEnableZenLocal=false + +[/Script/Zen.ZenServiceSettings] +bEnabled=False +bAutoLaunch=False + +[Audio] +UseAudioMixer=True + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +!D3D12TargetedShaderFormats=ClearArray ++D3D12TargetedShaderFormats=PCD3D_SM6 + +[/Script/Engine.RendererSettings] +r.AllowStaticLighting=0 +r.GenerateMeshDistanceFields=False +r.DynamicGlobalIlluminationMethod=1 +r.ReflectionMethod=1 +r.Shadow.Virtual.Enable=1 +r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True +r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8 +r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8 +r.SkinCache.CompileShaders=True +r.RayTracing.RayTracingProxies.ProjectEnabled=True + +[/Script/WorldPartitionEditor.WorldPartitionEditorSettings] +CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet' + +[/Script/Engine.UserInterfaceSettings] +bAuthorizeAutomaticWidgetVariableCreation=False +FontDPIPreset=Standard +FontDPI=72 + +[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] +bEnablePlugin=True +bAllowNetworkConnection=True +SecurityToken=FC2469BA449F3D6AFB81E9A6E6FCBE4B +bIncludeInShipping=False +bAllowExternalStartInShipping=False +bCompileAFSProject=False +bUseCompression=False +bLogFiles=False +bReportStats=False +ConnectionType=USBOnly +bUseManualIPAddress=False +ManualIPAddress= + diff --git a/sdks/unreal/tests/TestViewPkClient/Config/DefaultGame.ini b/sdks/unreal/tests/TestViewPkClient/Config/DefaultGame.ini new file mode 100644 index 00000000000..4754b466b8d --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Config/DefaultGame.ini @@ -0,0 +1,5 @@ +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=9B36AE4A4DF62F180A496F93BE6813D9 + +[/Script/CommonUI.CommonUISettings] +CommonButtonAcceptKeyHandling=TriggerClick diff --git a/sdks/unreal/tests/TestViewPkClient/Config/DefaultInput.ini b/sdks/unreal/tests/TestViewPkClient/Config/DefaultInput.ini new file mode 100644 index 00000000000..a72fda22b24 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Config/DefaultInput.ini @@ -0,0 +1,85 @@ +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bEnableMotionControls=True +bFilterInputByPlatformUser=False +bShouldFlushPressedKeysOnViewportFocusLost=True +bEnableDynamicComponentInputBinding=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 +DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput +DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient.Target.cs b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient.Target.cs new file mode 100644 index 00000000000..32553925636 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient.Target.cs @@ -0,0 +1,15 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class TestViewPkClientTarget : TargetRules +{ + public TestViewPkClientTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + DefaultBuildSettings = BuildSettingsVersion.V5; + + ExtraModuleNames.AddRange( new string[] { "TestViewPkClient" } ); + } +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp new file mode 100644 index 00000000000..4e5f435f936 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -0,0 +1,675 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/SpacetimeDBClient.g.h" +#include "DBCache/WithBsatn.h" +#include "BSATN/UEBSATNHelpers.h" +#include "ModuleBindings/Tables/AllViewPkPlayersTable.g.h" +#include "ModuleBindings/Tables/SenderViewPkPlayersATable.g.h" +#include "ModuleBindings/Tables/SenderViewPkPlayersBTable.g.h" +#include "ModuleBindings/Tables/ViewPkMembershipTable.g.h" +#include "ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.h" +#include "ModuleBindings/Tables/ViewPkPlayerTable.g.h" + +UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ + Db = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteTables")); + Db->Initialize(); + + Reducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteReducers")); + Reducers->Conn = this; + + Procedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteProcedures")); + Procedures->Conn = this; + + RegisterTable(TEXT("all_view_pk_players"), Db->AllViewPkPlayers); + RegisterTable(TEXT("sender_view_pk_players_a"), Db->SenderViewPkPlayersA); + RegisterTable(TEXT("sender_view_pk_players_b"), Db->SenderViewPkPlayersB); + RegisterTable(TEXT("view_pk_membership"), Db->ViewPkMembership); + RegisterTable(TEXT("view_pk_membership_secondary"), Db->ViewPkMembershipSecondary); + RegisterTable(TEXT("view_pk_player"), Db->ViewPkPlayer); +} + +FContextBase::FContextBase(UDbConnection* InConn) +{ + Db = InConn->Db; + Reducers = InConn->Reducers; + Procedures = InConn->Procedures; + Conn = InConn; +} +bool FContextBase::IsActive() const +{ + return Conn->IsActive(); +} +void FContextBase::Disconnect() +{ + Conn->Disconnect(); +} +USubscriptionBuilder* FContextBase::SubscriptionBuilder() +{ + return Conn->SubscriptionBuilder(); +} +bool FContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const +{ + return Conn->TryGetIdentity(OutIdentity); +} +FSpacetimeDBConnectionId FContextBase::GetConnectionId() const +{ + return Conn->GetConnectionId(); +} + +void URemoteTables::Initialize() +{ + + /** Creating tables */ + AllViewPkPlayers = NewObject(this); + SenderViewPkPlayersA = NewObject(this); + SenderViewPkPlayersB = NewObject(this); + ViewPkMembership = NewObject(this); + ViewPkMembershipSecondary = NewObject(this); + ViewPkPlayer = NewObject(this); + /**/ + + /** Initialization */ + AllViewPkPlayers->PostInitialize(); + SenderViewPkPlayersA->PostInitialize(); + SenderViewPkPlayersB->PostInitialize(); + ViewPkMembership->PostInitialize(); + ViewPkMembershipSecondary->PostInitialize(); + ViewPkPlayer->PostInitialize(); + /**/ +} + +void URemoteReducers::InsertViewPkMembership(const uint64 Id, const uint64 PlayerId) +{ + if (!Conn) + { + UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); + return; + } + + FInsertViewPkMembershipArgs ReducerArgs(Id, PlayerId); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_view_pk_membership"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertViewPkMembership(ReducerArgs)); } +} + +bool URemoteReducers::InvokeInsertViewPkMembership(const FReducerEventContext& Context, const UInsertViewPkMembershipReducer* Args) +{ + if (!OnInsertViewPkMembership.IsBound()) + { + // Handle unhandled reducer error + if (InternalOnUnhandledReducerError.IsBound()) + { + // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases + // For now, just broadcast any error + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertViewPkMembership")); + } + return false; + } + + OnInsertViewPkMembership.Broadcast(Context, Args->Id, Args->PlayerId); + return true; +} + +bool URemoteReducers::InvokeInsertViewPkMembershipWithArgs(const FReducerEventContext& Context, const FInsertViewPkMembershipArgs& Args) +{ + if (!OnInsertViewPkMembership.IsBound()) + { + if (InternalOnUnhandledReducerError.IsBound()) + { + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertViewPkMembership")); + } + return false; + } + + OnInsertViewPkMembership.Broadcast(Context, Args.Id, Args.PlayerId); + return true; +} + +void URemoteReducers::InsertViewPkMembershipSecondary(const uint64 Id, const uint64 PlayerId) +{ + if (!Conn) + { + UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); + return; + } + + FInsertViewPkMembershipSecondaryArgs ReducerArgs(Id, PlayerId); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_view_pk_membership_secondary"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertViewPkMembershipSecondary(ReducerArgs)); } +} + +bool URemoteReducers::InvokeInsertViewPkMembershipSecondary(const FReducerEventContext& Context, const UInsertViewPkMembershipSecondaryReducer* Args) +{ + if (!OnInsertViewPkMembershipSecondary.IsBound()) + { + // Handle unhandled reducer error + if (InternalOnUnhandledReducerError.IsBound()) + { + // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases + // For now, just broadcast any error + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertViewPkMembershipSecondary")); + } + return false; + } + + OnInsertViewPkMembershipSecondary.Broadcast(Context, Args->Id, Args->PlayerId); + return true; +} + +bool URemoteReducers::InvokeInsertViewPkMembershipSecondaryWithArgs(const FReducerEventContext& Context, const FInsertViewPkMembershipSecondaryArgs& Args) +{ + if (!OnInsertViewPkMembershipSecondary.IsBound()) + { + if (InternalOnUnhandledReducerError.IsBound()) + { + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertViewPkMembershipSecondary")); + } + return false; + } + + OnInsertViewPkMembershipSecondary.Broadcast(Context, Args.Id, Args.PlayerId); + return true; +} + +void URemoteReducers::InsertViewPkPlayer(const uint64 Id, const FString& Name) +{ + if (!Conn) + { + UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); + return; + } + + FInsertViewPkPlayerArgs ReducerArgs(Id, Name); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_view_pk_player"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertViewPkPlayer(ReducerArgs)); } +} + +bool URemoteReducers::InvokeInsertViewPkPlayer(const FReducerEventContext& Context, const UInsertViewPkPlayerReducer* Args) +{ + if (!OnInsertViewPkPlayer.IsBound()) + { + // Handle unhandled reducer error + if (InternalOnUnhandledReducerError.IsBound()) + { + // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases + // For now, just broadcast any error + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertViewPkPlayer")); + } + return false; + } + + OnInsertViewPkPlayer.Broadcast(Context, Args->Id, Args->Name); + return true; +} + +bool URemoteReducers::InvokeInsertViewPkPlayerWithArgs(const FReducerEventContext& Context, const FInsertViewPkPlayerArgs& Args) +{ + if (!OnInsertViewPkPlayer.IsBound()) + { + if (InternalOnUnhandledReducerError.IsBound()) + { + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for InsertViewPkPlayer")); + } + return false; + } + + OnInsertViewPkPlayer.Broadcast(Context, Args.Id, Args.Name); + return true; +} + +void URemoteReducers::UpdateViewPkPlayer(const uint64 Id, const FString& Name) +{ + if (!Conn) + { + UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); + return; + } + + FUpdateViewPkPlayerArgs ReducerArgs(Id, Name); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_view_pk_player"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateViewPkPlayer(ReducerArgs)); } +} + +bool URemoteReducers::InvokeUpdateViewPkPlayer(const FReducerEventContext& Context, const UUpdateViewPkPlayerReducer* Args) +{ + if (!OnUpdateViewPkPlayer.IsBound()) + { + // Handle unhandled reducer error + if (InternalOnUnhandledReducerError.IsBound()) + { + // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases + // For now, just broadcast any error + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for UpdateViewPkPlayer")); + } + return false; + } + + OnUpdateViewPkPlayer.Broadcast(Context, Args->Id, Args->Name); + return true; +} + +bool URemoteReducers::InvokeUpdateViewPkPlayerWithArgs(const FReducerEventContext& Context, const FUpdateViewPkPlayerArgs& Args) +{ + if (!OnUpdateViewPkPlayer.IsBound()) + { + if (InternalOnUnhandledReducerError.IsBound()) + { + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for UpdateViewPkPlayer")); + } + return false; + } + + OnUpdateViewPkPlayer.Broadcast(Context, Args.Id, Args.Name); + return true; +} + +void UDbConnection::PostInitProperties() +{ + Super::PostInitProperties(); + + // Connect OnUnhandledReducerError to Reducers.InternalOnUnhandledReducerError + if (Reducers) + { + Reducers->InternalOnUnhandledReducerError.AddDynamic(this, &UDbConnection::OnUnhandledReducerErrorHandler); + } + + // Connect OnUnhandledProcedureError to Procedures.InternalOnUnhandledProcedureError + if (Procedures) + { + Procedures->InternalOnUnhandledProcedureError.AddDynamic(this, &UDbConnection::OnUnhandledProcedureErrorHandler); + } +} + +UFUNCTION() +void UDbConnection::OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error) +{ + if (OnUnhandledReducerError.IsBound()) + { + OnUnhandledReducerError.Broadcast(Context, Error); + } +} + +UFUNCTION() +void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error) +{ + if (OnUnhandledProcedureError.IsBound()) + { + OnUnhandledProcedureError.Broadcast(Context, Error); + } +} + +void UDbConnection::RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer) +{ + Reducer.RequestId = RequestId; + PendingTypedReducers.Add(RequestId, MoveTemp(Reducer)); +} + +bool UDbConnection::TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const +{ + if (const FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + return true; + } + return false; +} + +bool UDbConnection::TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer) +{ + if (FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + PendingTypedReducers.Remove(RequestId); + return true; + } + return false; +} + +void UDbConnection::ReducerEvent(const FReducerEvent& Event) +{ + if (!Reducers) { return; } + + FReducer DecodedReducer; + if (!TryTakePendingTypedReducer(Event.RequestId, DecodedReducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), Event.RequestId); + HandleProtocolViolation(ErrorMessage); + return; + } + + FTestViewPkClientReducerEvent ReducerEvent; + ReducerEvent.CallerConnectionId = Event.CallerConnectionId; + ReducerEvent.CallerIdentity = Event.CallerIdentity; + ReducerEvent.EnergyConsumed = Event.EnergyConsumed; + ReducerEvent.Status = Event.Status; + ReducerEvent.Timestamp = Event.Timestamp; + ReducerEvent.Reducer = DecodedReducer; + + FReducerEventContext Context(this, ReducerEvent); + + // Dispatch by typed reducer metadata + const FString& ReducerName = ReducerEvent.Reducer.ReducerName; + + if (ReducerName == TEXT("insert_view_pk_membership")) + { + FInsertViewPkMembershipArgs Args = ReducerEvent.Reducer.GetAsInsertViewPkMembership(); + Reducers->InvokeInsertViewPkMembershipWithArgs(Context, Args); + return; + } + if (ReducerName == TEXT("insert_view_pk_membership_secondary")) + { + FInsertViewPkMembershipSecondaryArgs Args = ReducerEvent.Reducer.GetAsInsertViewPkMembershipSecondary(); + Reducers->InvokeInsertViewPkMembershipSecondaryWithArgs(Context, Args); + return; + } + if (ReducerName == TEXT("insert_view_pk_player")) + { + FInsertViewPkPlayerArgs Args = ReducerEvent.Reducer.GetAsInsertViewPkPlayer(); + Reducers->InvokeInsertViewPkPlayerWithArgs(Context, Args); + return; + } + if (ReducerName == TEXT("update_view_pk_player")) + { + FUpdateViewPkPlayerArgs Args = ReducerEvent.Reducer.GetAsUpdateViewPkPlayer(); + Reducers->InvokeUpdateViewPkPlayerWithArgs(Context, Args); + return; + } + + UE_LOG(LogTemp, Warning, TEXT("Unknown reducer: %s"), *ReducerName); +} + +void UDbConnection::ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) +{ + if (!Reducers) { return; } + + FTestViewPkClientReducerEvent ReducerEvent; + ReducerEvent.CallerConnectionId = Event.CallerConnectionId; + ReducerEvent.CallerIdentity = Event.CallerIdentity; + ReducerEvent.EnergyConsumed = Event.EnergyConsumed; + ReducerEvent.Status = Event.Status; + ReducerEvent.Timestamp = Event.Timestamp; + + FReducerEventContext Context(this, ReducerEvent); + + if (Reducers->InternalOnUnhandledReducerError.IsBound()) + { + Reducers->InternalOnUnhandledReducerError.Broadcast(Context, ErrorMessage); + } +} + +void UDbConnection::ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) +{ + if (!Procedures) { return; } + + FTestViewPkClientProcedureEvent ProcedureEvent; + ProcedureEvent.Status = FSpacetimeDBProcedureStatus::FromStatus(Event.Status); + ProcedureEvent.Timestamp = Event.Timestamp; + + FProcedureEventContext Context(this, ProcedureEvent); + + if (Procedures->InternalOnUnhandledProcedureError.IsBound()) + { + Procedures->InternalOnUnhandledProcedureError.Broadcast(Context, ErrorMessage); + } +} + +UDbConnectionBuilder* UDbConnection::Builder() +{ + return NewObject(); +} +// Added for creating subscriptions +USubscriptionBuilder* UDbConnection::SubscriptionBuilder() +{ + USubscriptionBuilder* Builder = NewObject(this); + Builder->Conn = this; + return Builder; +} +USubscriptionBuilder* USubscriptionBuilder::OnApplied(FOnSubscriptionApplied Callback) +{ + OnAppliedDelegateInternal = Callback; + return this; +} +USubscriptionBuilder* USubscriptionBuilder::OnError(FOnSubscriptionError Callback) +{ + OnErrorDelegateInternal = Callback; + return this; +} +USubscriptionHandle* USubscriptionBuilder::Subscribe() +{ + const TArray SqlQueries = PendingSqlQueries; + PendingSqlQueries.Empty(); + return Subscribe(SqlQueries); +} +USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL) +{ + USubscriptionHandle* Handle = NewObject(); + + // Store user callbacks on the handle + Handle->Conn = Conn; + Handle->OnAppliedDelegate = OnAppliedDelegateInternal; + Handle->OnErrorDelegate = OnErrorDelegateInternal; + + // Bind forwarding functions that will convert base contexts + FSubscriptionEventDelegate BaseApplied; + BaseApplied.BindUFunction(Handle, TEXT("ForwardOnApplied")); + OnAppliedBase(BaseApplied); + + FSubscriptionErrorDelegate BaseError; + BaseError.BindUFunction(Handle, TEXT("ForwardOnError")); + OnErrorBase(BaseError); + + SubscribeBase(SQL, Handle); + if (Conn) + { + Conn->StartSubscription(Handle); + } + return Handle; +} +USubscriptionHandle* USubscriptionBuilder::SubscribeToAllTables() +{ + return Subscribe(FQueryBuilder::AllTablesSqlQueries()); +} + +USubscriptionBuilder* USubscriptionBuilder::AddBlueprintQuery(const FBlueprintQuery& Query) +{ + PendingSqlQueries.Add(Query.Sql); + return this; +} + +USubscriptionBuilder* USubscriptionBuilder::AddAllViewPkPlayersQuery(const FAllViewPkPlayersQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddSenderViewPkPlayersAQuery(const FSenderViewPkPlayersAQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddSenderViewPkPlayersBQuery(const FSenderViewPkPlayersBQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddViewPkMembershipQuery(const FViewPkMembershipQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddViewPkMembershipSecondaryQuery(const FViewPkMembershipSecondaryQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionBuilder* USubscriptionBuilder::AddViewPkPlayerQuery(const FViewPkPlayerQuery& Query) +{ + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return AddBlueprintQuery(GenericQuery); +} + +USubscriptionHandle::USubscriptionHandle(UDbConnection* InConn) +{ + Conn = InConn; +} + +void USubscriptionHandle::ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx) +{ + if (OnAppliedDelegate.IsBound()) + { + FSubscriptionEventContext Ctx(Conn); + OnAppliedDelegate.Execute(Ctx); + } +} + +void USubscriptionHandle::ForwardOnError(const FErrorContextBase& BaseCtx) +{ + if (OnErrorDelegate.IsBound()) + { + FErrorContext Ctx(Conn, BaseCtx.Error); + OnErrorDelegate.Execute(Ctx); + } +} + + +// Cast from parent to child class +UDbConnectionBuilder* UDbConnectionBuilder::WithUri(const FString& InUri) +{ + return Cast(WithUriBase(InUri)); +} +UDbConnectionBuilder* UDbConnectionBuilder::WithDatabaseName(const FString& InName) +{ + return Cast(WithDatabaseNameBase(InName)); +} +UDbConnectionBuilder* UDbConnectionBuilder::WithToken(const FString& InToken) +{ + return Cast(WithTokenBase(InToken)); +} +UDbConnectionBuilder* UDbConnectionBuilder::WithCompression(const ESpacetimeDBCompression& InCompression) +{ + return Cast(WithCompressionBase(InCompression)); +} +UDbConnectionBuilder* UDbConnectionBuilder::OnConnect(FOnConnectDelegate Callback) +{ + OnConnectDelegateInternal = Callback; + return this; +} +UDbConnectionBuilder* UDbConnectionBuilder::OnConnectError(FOnConnectErrorDelegate Callback) +{ + return Cast(OnConnectErrorBase(Callback)); +} +UDbConnectionBuilder* UDbConnectionBuilder::OnDisconnect(FOnDisconnectDelegate Callback) +{ + OnDisconnectDelegateInternal = Callback; + return this; +} +UDbConnection* UDbConnectionBuilder::Build() +{ + UDbConnection* Connection = NewObject(); + + // Store delegates on the connection for later use + Connection->OnConnectDelegate = OnConnectDelegateInternal; + Connection->OnDisconnectDelegate = OnDisconnectDelegateInternal; + + // Wrap delegates so the base builder can bind them + FOnConnectBaseDelegate BaseConnect; + BaseConnect.BindUFunction(Connection, TEXT("ForwardOnConnect")); + Connection->SetOnConnectDelegate(BaseConnect); + OnConnectBase(BaseConnect); + + FOnDisconnectBaseDelegate BaseDisconnect; + BaseDisconnect.BindUFunction(Connection, TEXT("ForwardOnDisconnect")); + Connection->SetOnDisconnectDelegate(BaseDisconnect); + OnDisconnectBase(BaseDisconnect); + + return Cast(BuildConnection(Connection)); +} +void UDbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken) +{ + if (OnConnectDelegate.IsBound()) + { + OnConnectDelegate.Execute(this, InIdentity, InToken); + } +} +void UDbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error) +{ + PendingTypedReducers.Empty(); + if (OnDisconnectDelegate.IsBound()) + { + OnDisconnectDelegate.Execute(this, Error); + } +} + + +void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event) +{ + FTestViewPkClientEvent BaseEvent; + BaseEvent.Tag = Event.Tag; + + switch (Event.Tag) + { + case ESpacetimeDBEventTag::Reducer: + { + FReducerEvent ReducerEvent = Event.GetAsReducer(); + FReducer Reducer; + if (!TryGetPendingTypedReducer(ReducerEvent.RequestId, Reducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), ReducerEvent.RequestId); + HandleProtocolViolation(ErrorMessage); + return; + } + BaseEvent = FTestViewPkClientEvent::Reducer(Reducer); + break; + } + + case ESpacetimeDBEventTag::SubscribeApplied: + BaseEvent = FTestViewPkClientEvent::SubscribeApplied(Event.GetAsSubscribeApplied()); + break; + + case ESpacetimeDBEventTag::UnsubscribeApplied: + BaseEvent = FTestViewPkClientEvent::UnsubscribeApplied(Event.GetAsUnsubscribeApplied()); + break; + + case ESpacetimeDBEventTag::Disconnected: + BaseEvent = FTestViewPkClientEvent::Disconnected(Event.GetAsDisconnected()); + break; + + case ESpacetimeDBEventTag::Transaction: + BaseEvent = FTestViewPkClientEvent::Transaction(Event.GetAsTransaction()); + break; + + case ESpacetimeDBEventTag::SubscribeError: + BaseEvent = FTestViewPkClientEvent::SubscribeError(Event.GetAsSubscribeError()); + break; + + case ESpacetimeDBEventTag::UnknownTransaction: + BaseEvent = FTestViewPkClientEvent::UnknownTransaction(Event.GetAsUnknownTransaction()); + break; + + default: + break; + } + + FEventContext Context(this, BaseEvent); + // Populate typed reducer args for convenience in table handlers + + ApplyRegisteredTableUpdates(Update, &Context); +} + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/AllViewPkPlayersTable.g.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/AllViewPkPlayersTable.g.cpp new file mode 100644 index 00000000000..24c0c58e9f2 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/AllViewPkPlayersTable.g.cpp @@ -0,0 +1,42 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/AllViewPkPlayersTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UAllViewPkPlayersTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> AllViewPkPlayersTable = Data->GetOrAdd(TableName); + + /***/ +} + +FTableAppliedDiff UAllViewPkPlayersTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + Diff.DeriveUpdatesByPrimaryKey( + [](const FViewPkPlayerType& Row) + { + return Row.Id; + } + ); + + return Diff; +} + +int32 UAllViewPkPlayersTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UAllViewPkPlayersTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/SenderViewPkPlayersATable.g.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/SenderViewPkPlayersATable.g.cpp new file mode 100644 index 00000000000..5d772b8f853 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/SenderViewPkPlayersATable.g.cpp @@ -0,0 +1,42 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/SenderViewPkPlayersATable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void USenderViewPkPlayersATable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> SenderViewPkPlayersATable = Data->GetOrAdd(TableName); + + /***/ +} + +FTableAppliedDiff USenderViewPkPlayersATable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + Diff.DeriveUpdatesByPrimaryKey( + [](const FViewPkPlayerType& Row) + { + return Row.Id; + } + ); + + return Diff; +} + +int32 USenderViewPkPlayersATable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray USenderViewPkPlayersATable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/SenderViewPkPlayersBTable.g.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/SenderViewPkPlayersBTable.g.cpp new file mode 100644 index 00000000000..a1d8d919897 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/SenderViewPkPlayersBTable.g.cpp @@ -0,0 +1,42 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/SenderViewPkPlayersBTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void USenderViewPkPlayersBTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> SenderViewPkPlayersBTable = Data->GetOrAdd(TableName); + + /***/ +} + +FTableAppliedDiff USenderViewPkPlayersBTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + Diff.DeriveUpdatesByPrimaryKey( + [](const FViewPkPlayerType& Row) + { + return Row.Id; + } + ); + + return Diff; +} + +int32 USenderViewPkPlayersBTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray USenderViewPkPlayersBTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.cpp new file mode 100644 index 00000000000..cb8a0acf957 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.cpp @@ -0,0 +1,60 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UViewPkMembershipSecondaryTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> ViewPkMembershipSecondaryTable = Data->GetOrAdd(TableName); + ViewPkMembershipSecondaryTable->AddUniqueConstraint("id", [](const FViewPkMembershipSecondaryType& Row) -> const uint64& { + return Row.Id; }); + + Id = NewObject(this); + Id->SetCache(ViewPkMembershipSecondaryTable); + + // Register a new multi-key B-Tree index named "player_id" on the ViewPkMembershipSecondaryTable. + ViewPkMembershipSecondaryTable->AddMultiKeyBTreeIndex>( + TEXT("player_id"), + [](const FViewPkMembershipSecondaryType& Row) + { + // This tuple is stored in the B-Tree index for fast composite key lookups. + return MakeTuple(Row.PlayerId); + } + ); + + PlayerId = NewObject(this); + PlayerId->SetCache(ViewPkMembershipSecondaryTable); + + /***/ +} + +FTableAppliedDiff UViewPkMembershipSecondaryTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + Diff.DeriveUpdatesByPrimaryKey( + [](const FViewPkMembershipSecondaryType& Row) + { + return Row.Id; + } + ); + + return Diff; +} + +int32 UViewPkMembershipSecondaryTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UViewPkMembershipSecondaryTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkMembershipTable.g.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkMembershipTable.g.cpp new file mode 100644 index 00000000000..630ba663912 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkMembershipTable.g.cpp @@ -0,0 +1,60 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/ViewPkMembershipTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UViewPkMembershipTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> ViewPkMembershipTable = Data->GetOrAdd(TableName); + ViewPkMembershipTable->AddUniqueConstraint("id", [](const FViewPkMembershipType& Row) -> const uint64& { + return Row.Id; }); + + Id = NewObject(this); + Id->SetCache(ViewPkMembershipTable); + + // Register a new multi-key B-Tree index named "player_id" on the ViewPkMembershipTable. + ViewPkMembershipTable->AddMultiKeyBTreeIndex>( + TEXT("player_id"), + [](const FViewPkMembershipType& Row) + { + // This tuple is stored in the B-Tree index for fast composite key lookups. + return MakeTuple(Row.PlayerId); + } + ); + + PlayerId = NewObject(this); + PlayerId->SetCache(ViewPkMembershipTable); + + /***/ +} + +FTableAppliedDiff UViewPkMembershipTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + Diff.DeriveUpdatesByPrimaryKey( + [](const FViewPkMembershipType& Row) + { + return Row.Id; + } + ); + + return Diff; +} + +int32 UViewPkMembershipTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UViewPkMembershipTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkPlayerTable.g.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkPlayerTable.g.cpp new file mode 100644 index 00000000000..45cebcda47f --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/ModuleBindings/Tables/ViewPkPlayerTable.g.cpp @@ -0,0 +1,47 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#include "ModuleBindings/Tables/ViewPkPlayerTable.g.h" +#include "DBCache/UniqueIndex.h" +#include "DBCache/BTreeUniqueIndex.h" +#include "DBCache/ClientCache.h" +#include "DBCache/TableCache.h" + +void UViewPkPlayerTable::PostInitialize() +{ + /** Client cache init and setting up indexes*/ + Data = MakeShared>(); + + TSharedPtr> ViewPkPlayerTable = Data->GetOrAdd(TableName); + ViewPkPlayerTable->AddUniqueConstraint("id", [](const FViewPkPlayerType& Row) -> const uint64& { + return Row.Id; }); + + Id = NewObject(this); + Id->SetCache(ViewPkPlayerTable); + + /***/ +} + +FTableAppliedDiff UViewPkPlayerTable::Update(TArray> InsertsRef, TArray> DeletesRef) +{ + FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + + Diff.DeriveUpdatesByPrimaryKey( + [](const FViewPkPlayerType& Row) + { + return Row.Id; + } + ); + + return Diff; +} + +int32 UViewPkPlayerTable::Count() const +{ + return GetRowCountFromTable(Data, TableName); +} + +TArray UViewPkPlayerTable::Iter() const +{ + return GetAllRowsFromTable(Data, TableName); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/CommonTestFunctions.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/CommonTestFunctions.cpp new file mode 100644 index 00000000000..521828acf11 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/CommonTestFunctions.cpp @@ -0,0 +1,171 @@ +#include "Tests/CommonTestFunctions.h" + +void UTestHelperDelegates::HandleConnect(UDbConnection* Conn, FSpacetimeDBIdentity Identity, const FString& Token) +{ + if (OnConnect) + { + OnConnect(Conn, Identity, Token); + } +} + +void UTestHelperDelegates::HandleConnectError(UDbConnection* Conn, const FString& Error) +{ + if (OnConnectError) + { + OnConnectError(Conn, Error); + } +} + +void UTestHelperDelegates::HandleDisconnect(UDbConnection* Conn, const FString& Error) +{ + if (OnDisconnect) + { + OnDisconnect(Conn, Error); + } +} + +void UTestHelperDelegates::HandleSubscriptionApplied(FSubscriptionEventContext Ctx) +{ + if (OnSubscriptionApplied) + { + OnSubscriptionApplied(Ctx); + } +} + +void UTestHelperDelegates::HandleSubscriptionError(FErrorContext Ctx) +{ + if (OnSubscriptionError) + { + OnSubscriptionError(Ctx); + } +} + +UDbConnection* ConnectThen( + TSharedPtr Counter, + const FString& TestName, + TFunction Callback) +{ + FString DbName; + FString DbNameError; + if (!GetDbName(DbName, DbNameError)) + { + return nullptr; + } + + UCredentials::Init(TestName); + + const FString ConnectTestName = FString::Printf(TEXT("on_connect_%s"), *TestName); + Counter->Register(ConnectTestName); + + UTestHelperDelegates* TestHelper = NewObject(); + TestHelper->AddToRoot(); + + TestHelper->OnConnect = [Counter, Callback, ConnectTestName](UDbConnection* Conn, FSpacetimeDBIdentity, const FString&) + { + Callback(Conn); + Counter->MarkSuccess(ConnectTestName); + }; + TestHelper->OnConnectError = [Counter, ConnectTestName](UDbConnection*, const FString& Error) + { + Counter->MarkFailure(ConnectTestName, FString::Printf(TEXT("Connect error: %s"), *Error)); + }; + TestHelper->OnDisconnect = [Counter, ConnectTestName](UDbConnection*, const FString& Error) + { + Counter->MarkFailure(ConnectTestName, FString::Printf(TEXT("Disconnected: %s"), *Error)); + }; + + FOnConnectDelegate ConnectDelegate; + BIND_DELEGATE_SAFE(ConnectDelegate, TestHelper, UTestHelperDelegates, HandleConnect); + + FOnDisconnectDelegate DisconnectDelegate; + BIND_DELEGATE_SAFE(DisconnectDelegate, TestHelper, UTestHelperDelegates, HandleDisconnect); + + FOnConnectErrorDelegate ErrorDelegate; + BIND_DELEGATE_SAFE(ErrorDelegate, TestHelper, UTestHelperDelegates, HandleConnectError); + + UDbConnection* Conn = UDbConnection::Builder() + ->WithUri(TEXT("localhost:3000")) + ->WithDatabaseName(DbName) + ->OnConnect(ConnectDelegate) + ->OnDisconnect(DisconnectDelegate) + ->OnConnectError(ErrorDelegate) + ->Build(); + + if (Conn) + { + Conn->SetAutoTicking(true); + Conn->AddToRoot(); + } + + return Conn; +} + +bool GetDbName(FString& DBName, FString& Error) +{ + const FString DbNameEnv = FPlatformMisc::GetEnvironmentVariable(TEXT("SPACETIME_SDK_TEST_DB_NAME")); + if (!DbNameEnv.IsEmpty()) + { + DBName = DbNameEnv; + return true; + } + + FString CmdValue; + if (FParse::Value(FCommandLine::Get(), TEXT("-SpacetimeDbName="), CmdValue)) + { + DBName = CmdValue; + return true; + } + + Error = TEXT("No DB name. Pass -SpacetimeDbName= or set SPACETIME_SDK_TEST_DB_NAME."); + return false; +} + +bool ValidateParameterConfig(FAutomationTestBase* Test) +{ + FString DbName; + FString DbNameError; + if (!GetDbName(DbName, DbNameError)) + { + Test->AddError(DbNameError); + return false; + } + return true; +} + +bool ReportTestResult(FAutomationTestBase& Test, const FString& TestName, TSharedPtr Counter, bool bTimedOut) +{ + bool bHasFailure = false; + + for (const FString& Msg : Counter->GetFailures()) + { + TESTLOG_FAIL(Test, TEXT("Operation - %s"), *Msg); + bHasFailure = true; + } + for (const FString& Msg : Counter->GetSuccesses()) + { + TESTLOG_SUCCESS(Test, TEXT("Operation - %s"), *Msg); + } + + if (bTimedOut) + { + TESTLOG_FAIL(Test, TEXT("Timed out waiting for operation")); + bHasFailure = true; + } + if (Counter->IsAborted()) + { + TESTLOG_FAIL(Test, TEXT("Test aborted due to precondition failure")); + bHasFailure = true; + } + + if (!bHasFailure) + { + TESTLOG_SUCCESS(Test, TEXT("Test Success")); + Test.TestTrue(*TestName, true); + } + else + { + TESTLOG_FAIL(Test, TEXT("Test failed")); + } + + return !bHasFailure; +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/SpacetimeFullClientTests.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/SpacetimeFullClientTests.cpp new file mode 100644 index 00000000000..da064e154f2 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/SpacetimeFullClientTests.cpp @@ -0,0 +1,251 @@ +#include "Tests/SpacetimeFullClientTests.h" + +#include "Tests/CommonTestFunctions.h" + +#include "ModuleBindings/SpacetimeDBClient.g.h" +#include "ModuleBindings/Tables/AllViewPkPlayersTable.g.h" +#include "ModuleBindings/Tables/SenderViewPkPlayersATable.g.h" + +namespace +{ +static FString ToFString(const std::string& InSql) +{ + return FString(UTF8_TO_TCHAR(InSql.c_str())); +} + +class FWaitForTestCounter : public IAutomationLatentCommand +{ +public: + FWaitForTestCounter(FAutomationTestBase& InTest, const FString& InTestName, TSharedPtr InCounter, double InStartTime) + : Test(InTest) + , TestName(InTestName) + , Counter(MoveTemp(InCounter)) + , StartTime(InStartTime) + {} + + virtual bool Update() override + { + const double Timeout = 90.0; + const bool bStopped = Counter->IsAborted() || Counter->IsComplete() || (FPlatformTime::Seconds() - StartTime > Timeout); + const bool bTimedOut = (FPlatformTime::Seconds() - StartTime > Timeout); + + if (bStopped) + { + ReportTestResult(Test, TestName, Counter, bTimedOut); + } + + return bStopped; + } + +private: + FAutomationTestBase& Test; + FString TestName; + TSharedPtr Counter; + double StartTime = 0.0; +}; +} + +bool FViewPkQueryBuilderDirectSourcesTest::RunTest(const FString& Parameters) +{ + FQueryBuilder Q; + + TestEqual( + TEXT("all_view_pk_players sql"), + ToFString(Q.From.AllViewPkPlayers().into_sql()), + TEXT("SELECT * FROM \"all_view_pk_players\"") + ); + TestEqual( + TEXT("sender_view_pk_players_a sql"), + ToFString(Q.From.SenderViewPkPlayersA().into_sql()), + TEXT("SELECT * FROM \"sender_view_pk_players_a\"") + ); + TestEqual( + TEXT("sender_view_pk_players_b sql"), + ToFString(Q.From.SenderViewPkPlayersB().into_sql()), + TEXT("SELECT * FROM \"sender_view_pk_players_b\"") + ); + TestEqual( + TEXT("view_pk_membership sql"), + ToFString(Q.From.ViewPkMembership().into_sql()), + TEXT("SELECT * FROM \"view_pk_membership\"") + ); + TestEqual( + TEXT("view_pk_membership_secondary sql"), + ToFString(Q.From.ViewPkMembershipSecondary().into_sql()), + TEXT("SELECT * FROM \"view_pk_membership_secondary\"") + ); + TestEqual( + TEXT("view_pk_player sql"), + ToFString(Q.From.ViewPkPlayer().into_sql()), + TEXT("SELECT * FROM \"view_pk_player\"") + ); + + USubscriptionBuilder* Builder = NewObject(); + Builder->AddQuery([](const FQueryBuilder& Query) + { + return Query.From.AllViewPkPlayers(); + })->AddQuery([](const FQueryBuilder& Query) + { + return Query.From.ViewPkPlayer().Where([](const FViewPkPlayerCols& Cols) + { + return Cols.Id.Eq(static_cast(1)); + }); + }); + + TestTrue(TEXT("typed query builder accepted pk view sources"), true); + return true; +} + +bool FViewPkQueryBuilderSemijoinTest::RunTest(const FString& Parameters) +{ + FQueryBuilder Q; + + const FString MembershipJoinSql = ToFString( + Q.From.ViewPkMembership().RightSemijoin(Q.From.AllViewPkPlayers(), [](const FViewPkMembershipIxCols& Membership, const FAllViewPkPlayersIxCols& Player) + { + return Membership.PlayerId.Eq(Player.Id); + }).into_sql() + ); + + const FString SenderViewsJoinSql = ToFString( + Q.From.SenderViewPkPlayersA().RightSemijoin(Q.From.SenderViewPkPlayersB(), [](const FSenderViewPkPlayersAIxCols& LeftView, const FSenderViewPkPlayersBIxCols& RightView) + { + return LeftView.Id.Eq(RightView.Id); + }).into_sql() + ); + + TestEqual( + TEXT("membership to all_view_pk_players semijoin sql"), + MembershipJoinSql, + TEXT("SELECT \"all_view_pk_players\".* FROM \"view_pk_membership\" JOIN \"all_view_pk_players\" ON \"view_pk_membership\".\"player_id\" = \"all_view_pk_players\".\"id\"") + ); + + TestEqual( + TEXT("sender views semijoin sql"), + SenderViewsJoinSql, + TEXT("SELECT \"sender_view_pk_players_b\".* FROM \"sender_view_pk_players_a\" JOIN \"sender_view_pk_players_b\" ON \"sender_view_pk_players_a\".\"id\" = \"sender_view_pk_players_b\".\"id\"") + ); + + return true; +} + +bool FViewPkSubscribeAllTablesTest::RunTest(const FString& Parameters) +{ + const TArray Sql = FQueryBuilder::AllTablesSqlQueries(); + + TestEqual(TEXT("all tables count"), Sql.Num(), 6); + TestTrue(TEXT("all tables include all_view_pk_players"), Sql.Contains(TEXT("SELECT * FROM \"all_view_pk_players\""))); + TestTrue(TEXT("all tables include sender_view_pk_players_a"), Sql.Contains(TEXT("SELECT * FROM \"sender_view_pk_players_a\""))); + TestTrue(TEXT("all tables include sender_view_pk_players_b"), Sql.Contains(TEXT("SELECT * FROM \"sender_view_pk_players_b\""))); + TestTrue(TEXT("all tables include view_pk_membership"), Sql.Contains(TEXT("SELECT * FROM \"view_pk_membership\""))); + TestTrue(TEXT("all tables include view_pk_membership_secondary"), Sql.Contains(TEXT("SELECT * FROM \"view_pk_membership_secondary\""))); + TestTrue(TEXT("all tables include view_pk_player"), Sql.Contains(TEXT("SELECT * FROM \"view_pk_player\""))); + + return true; +} + +bool FViewPkRuntimeUpdatePairingTest::RunTest(const FString& Parameters) +{ + const FString RuntimeTestName = TEXT("ViewPkRuntimeUpdatePairing"); + + if (!ValidateParameterConfig(this)) + { + return false; + } + + UViewPkRuntimeHandler* Handler = CreateTestHandler(); + Handler->Counter->Register(TEXT("subscription_applied")); + Handler->Counter->Register(TEXT("all_view_pk_players_insert")); + Handler->Counter->Register(TEXT("all_view_pk_players_update")); + Handler->Counter->Register(TEXT("sender_view_pk_players_a_insert")); + Handler->Counter->Register(TEXT("sender_view_pk_players_a_update")); + + ConnectThen(Handler->Counter, RuntimeTestName, [this, Handler](UDbConnection* Conn) + { + Conn->Db->AllViewPkPlayers->OnInsert.AddDynamic(Handler, &UViewPkRuntimeHandler::OnAllViewPkPlayersInsert); + Conn->Db->AllViewPkPlayers->OnUpdate.AddDynamic(Handler, &UViewPkRuntimeHandler::OnAllViewPkPlayersUpdate); + Conn->Db->AllViewPkPlayers->OnDelete.AddDynamic(Handler, &UViewPkRuntimeHandler::OnAllViewPkPlayersDelete); + + Conn->Db->SenderViewPkPlayersA->OnInsert.AddDynamic(Handler, &UViewPkRuntimeHandler::OnSenderViewPkPlayersAInsert); + Conn->Db->SenderViewPkPlayersA->OnUpdate.AddDynamic(Handler, &UViewPkRuntimeHandler::OnSenderViewPkPlayersAUpdate); + Conn->Db->SenderViewPkPlayersA->OnDelete.AddDynamic(Handler, &UViewPkRuntimeHandler::OnSenderViewPkPlayersADelete); + + UTestHelperDelegates* SubHelper = NewObject(); + SubHelper->AddToRoot(); + + SubHelper->OnSubscriptionApplied = [this, Handler, Conn](FSubscriptionEventContext Ctx) + { + if (Conn->Db->AllViewPkPlayers->Count() != 0 || Conn->Db->SenderViewPkPlayersA->Count() != 0) + { + Handler->Counter->MarkFailure(TEXT("subscription_applied"), TEXT("Expected empty view caches before reducers")); + Handler->Counter->Abort(); + return; + } + + Handler->Counter->MarkSuccess(TEXT("subscription_applied")); + + Ctx.Reducers->InsertViewPkPlayer(Handler->ExpectedId, Handler->InitialName); + Ctx.Reducers->InsertViewPkMembership(10, Handler->ExpectedId); + Ctx.Reducers->UpdateViewPkPlayer(Handler->ExpectedId, Handler->UpdatedName); + }; + + SubHelper->OnSubscriptionError = [Handler](FErrorContext Ctx) + { + Handler->Counter->MarkFailure(TEXT("subscription_applied"), FString::Printf(TEXT("Subscription error: %s"), *Ctx.Error)); + Handler->Counter->Abort(); + }; + + FOnSubscriptionApplied AppliedDelegate; + BIND_DELEGATE_SAFE(AppliedDelegate, SubHelper, UTestHelperDelegates, HandleSubscriptionApplied); + + FOnSubscriptionError ErrorDelegate; + BIND_DELEGATE_SAFE(ErrorDelegate, SubHelper, UTestHelperDelegates, HandleSubscriptionError); + + Conn->SubscriptionBuilder() + ->OnApplied(AppliedDelegate) + ->OnError(ErrorDelegate) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.AllViewPkPlayers(); + }) + ->AddQuery([](const FQueryBuilder& Q) + { + return Q.From.SenderViewPkPlayersA(); + }) + ->Subscribe(); + }); + + ADD_LATENT_AUTOMATION_COMMAND(FWaitForTestCounter(*this, RuntimeTestName, Handler->Counter, FPlatformTime::Seconds())); + return true; +} + +bool FViewPkBlueprintQueryBuilderFlowTest::RunTest(const FString& Parameters) +{ + FAllViewPkPlayersQuery Query = UQueryBuilderBlueprintLibrary::FromAllViewPkPlayers(); + + TestEqual( + TEXT("blueprint all_view_pk_players base sql"), + Query.Sql, + TEXT("SELECT * FROM \"all_view_pk_players\"") + ); + + Query = UQueryBuilderBlueprintLibrary::AllViewPkPlayersWhere( + Query, + UQueryBuilderBlueprintLibrary::StringEqual( + UQueryBuilderBlueprintLibrary::AllViewPkPlayersName(Query), + TEXT("Alice"))); + TestEqual( + TEXT("blueprint pk view filtered sql"), + Query.Sql, + TEXT("SELECT * FROM \"all_view_pk_players\" WHERE (\"all_view_pk_players\".\"name\" = 'Alice')") + ); + TestEqual(TEXT("blueprint pk view result source"), Query.ResultSourceName, TEXT("all_view_pk_players")); + + USubscriptionBuilder* Builder = NewObject(); + USubscriptionHandle* Handle = Builder->AddAllViewPkPlayersQuery(Query)->Subscribe(); + TestNotNull(TEXT("blueprint pk view handle"), Handle); + TestEqual(TEXT("blueprint pk view builder sql count"), Handle->GetQuerySqls().Num(), 1); + TestEqual(TEXT("blueprint pk view builder sql"), Handle->GetQuerySqls()[0], Query.Sql); + + return true; +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/TestCounter.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/TestCounter.cpp new file mode 100644 index 00000000000..332e61064b2 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/TestCounter.cpp @@ -0,0 +1,87 @@ +#include "Tests/TestCounter.h" + +void FTestCounter::Register(const FString& TestName) +{ + FScopeLock Lock(&Mutex); + if (Registered.Contains(TestName)) + { + UE_LOG(LogTemp, Error, TEXT("Duplicate test name: %s"), *TestName); + } + Registered.Add(TestName); +} + +void FTestCounter::MarkSuccess(const FString& TestName) +{ + FScopeLock Lock(&Mutex); + Outcomes.Add(TestName, { true, FString() }); + UE_LOG(LogTemp, Log, TEXT("Operation success: %s"), *TestName); +} + +void FTestCounter::MarkFailure(const FString& TestName, const FString& Error) +{ + FScopeLock Lock(&Mutex); + Outcomes.Add(TestName, { false, Error }); + UE_LOG(LogTemp, Error, TEXT("Operation failed: %s, %s"), *TestName, *Error); +} + +bool FTestCounter::IsComplete() const +{ + FScopeLock Lock(&Mutex); + return Outcomes.Num() == Registered.Num(); +} + +bool FTestCounter::AllSucceeded() const +{ + FScopeLock Lock(&Mutex); + if (Outcomes.Num() != Registered.Num()) + { + return false; + } + for (const auto& Elem : Outcomes) + { + if (!Elem.Value.bSuccess) + { + return false; + } + } + return true; +} + +TArray FTestCounter::GetFailures() const +{ + FScopeLock Lock(&Mutex); + TArray Failures; + for (const FString& Name : Registered) + { + const FTestOutcome* Outcome = Outcomes.Find(Name); + if (!Outcome) + { + Failures.Add(FString::Printf(TEXT("TIMEOUT: %s"), *Name)); + } + else if (!Outcome->bSuccess) + { + Failures.Add(FString::Printf(TEXT("FAILED: %s: %s"), *Name, *Outcome->Error)); + } + } + return Failures; +} + +TArray FTestCounter::GetSuccesses() const +{ + FScopeLock Lock(&Mutex); + TArray Successes; + for (const FString& Name : Registered) + { + const FTestOutcome* Outcome = Outcomes.Find(Name); + if (Outcome && Outcome->bSuccess) + { + Successes.Add(FString::Printf(TEXT("SUCCESS: %s"), *Name)); + } + } + return Successes; +} + +void FTestCounter::Abort() +{ + bAborted = true; +} \ No newline at end of file diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/TestHandler.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/TestHandler.cpp new file mode 100644 index 00000000000..ad1614f45db --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Private/Tests/TestHandler.cpp @@ -0,0 +1,88 @@ +#include "Tests/TestHandler.h" + +namespace +{ +bool ValidateInsertedRow(UViewPkRuntimeHandler* Handler, const FString& StepName, const FViewPkPlayerType& Value) +{ + if (Value.Id != Handler->ExpectedId) + { + Handler->Counter->MarkFailure(StepName, FString::Printf(TEXT("Unexpected id %llu"), static_cast(Value.Id))); + Handler->Counter->Abort(); + return false; + } + if (Value.Name != Handler->InitialName) + { + Handler->Counter->MarkFailure(StepName, FString::Printf(TEXT("Unexpected insert name %s"), *Value.Name)); + Handler->Counter->Abort(); + return false; + } + return true; +} + +bool ValidateUpdatedRows(UViewPkRuntimeHandler* Handler, const FString& StepName, const FViewPkPlayerType& OldValue, const FViewPkPlayerType& NewValue) +{ + if (OldValue.Id != Handler->ExpectedId || NewValue.Id != Handler->ExpectedId) + { + Handler->Counter->MarkFailure(StepName, TEXT("Unexpected row id during update")); + Handler->Counter->Abort(); + return false; + } + if (OldValue.Name != Handler->InitialName) + { + Handler->Counter->MarkFailure(StepName, FString::Printf(TEXT("Unexpected old name %s"), *OldValue.Name)); + Handler->Counter->Abort(); + return false; + } + if (NewValue.Name != Handler->UpdatedName) + { + Handler->Counter->MarkFailure(StepName, FString::Printf(TEXT("Unexpected new name %s"), *NewValue.Name)); + Handler->Counter->Abort(); + return false; + } + return true; +} +} + +void UViewPkRuntimeHandler::OnAllViewPkPlayersInsert(const FEventContext&, const FViewPkPlayerType& Value) +{ + if (ValidateInsertedRow(this, TEXT("all_view_pk_players_insert"), Value)) + { + Counter->MarkSuccess(TEXT("all_view_pk_players_insert")); + } +} + +void UViewPkRuntimeHandler::OnAllViewPkPlayersUpdate(const FEventContext&, const FViewPkPlayerType& OldValue, const FViewPkPlayerType& NewValue) +{ + if (ValidateUpdatedRows(this, TEXT("all_view_pk_players_update"), OldValue, NewValue)) + { + Counter->MarkSuccess(TEXT("all_view_pk_players_update")); + } +} + +void UViewPkRuntimeHandler::OnAllViewPkPlayersDelete(const FEventContext&, const FViewPkPlayerType&) +{ + Counter->MarkFailure(TEXT("all_view_pk_players_update"), TEXT("Unexpected delete for all_view_pk_players")); + Counter->Abort(); +} + +void UViewPkRuntimeHandler::OnSenderViewPkPlayersAInsert(const FEventContext&, const FViewPkPlayerType& Value) +{ + if (ValidateInsertedRow(this, TEXT("sender_view_pk_players_a_insert"), Value)) + { + Counter->MarkSuccess(TEXT("sender_view_pk_players_a_insert")); + } +} + +void UViewPkRuntimeHandler::OnSenderViewPkPlayersAUpdate(const FEventContext&, const FViewPkPlayerType& OldValue, const FViewPkPlayerType& NewValue) +{ + if (ValidateUpdatedRows(this, TEXT("sender_view_pk_players_a_update"), OldValue, NewValue)) + { + Counter->MarkSuccess(TEXT("sender_view_pk_players_a_update")); + } +} + +void UViewPkRuntimeHandler::OnSenderViewPkPlayersADelete(const FEventContext&, const FViewPkPlayerType&) +{ + Counter->MarkFailure(TEXT("sender_view_pk_players_a_update"), TEXT("Unexpected delete for sender_view_pk_players_a")); + Counter->Abort(); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/ReducerBase.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/ReducerBase.g.h new file mode 100644 index 00000000000..d0f1a4547d0 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/ReducerBase.g.h @@ -0,0 +1,18 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ReducerBase.g.generated.h" + +// Abstract Reducer base class +UCLASS(Abstract, BlueprintType) +class TESTVIEWPKCLIENT_API UReducerBase : public UObject +{ + GENERATED_BODY() + +public: + virtual ~UReducerBase() = default; +}; + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkMembership.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkMembership.g.h new file mode 100644 index 00000000000..31d069e5894 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkMembership.g.h @@ -0,0 +1,58 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "InsertViewPkMembership.g.generated.h" + +// Reducer arguments struct for InsertViewPkMembership +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FInsertViewPkMembershipArgs +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 PlayerId = 0; + + FInsertViewPkMembershipArgs() = default; + + FInsertViewPkMembershipArgs(const uint64& InId, const uint64& InPlayerId) + : Id(InId), PlayerId(InPlayerId) + {} + + + FORCEINLINE bool operator==(const FInsertViewPkMembershipArgs& Other) const + { + return Id == Other.Id && PlayerId == Other.PlayerId; + } + FORCEINLINE bool operator!=(const FInsertViewPkMembershipArgs& Other) const + { + return !(*this == Other); + } +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_STRUCT(FInsertViewPkMembershipArgs, Id, PlayerId); +} + +// Reducer class for internal dispatching +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UInsertViewPkMembershipReducer : public UReducerBase +{ + GENERATED_BODY() + +public: + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 PlayerId = 0; + +}; + + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkMembershipSecondary.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkMembershipSecondary.g.h new file mode 100644 index 00000000000..ca330a28f06 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkMembershipSecondary.g.h @@ -0,0 +1,58 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "InsertViewPkMembershipSecondary.g.generated.h" + +// Reducer arguments struct for InsertViewPkMembershipSecondary +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FInsertViewPkMembershipSecondaryArgs +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 PlayerId = 0; + + FInsertViewPkMembershipSecondaryArgs() = default; + + FInsertViewPkMembershipSecondaryArgs(const uint64& InId, const uint64& InPlayerId) + : Id(InId), PlayerId(InPlayerId) + {} + + + FORCEINLINE bool operator==(const FInsertViewPkMembershipSecondaryArgs& Other) const + { + return Id == Other.Id && PlayerId == Other.PlayerId; + } + FORCEINLINE bool operator!=(const FInsertViewPkMembershipSecondaryArgs& Other) const + { + return !(*this == Other); + } +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_STRUCT(FInsertViewPkMembershipSecondaryArgs, Id, PlayerId); +} + +// Reducer class for internal dispatching +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UInsertViewPkMembershipSecondaryReducer : public UReducerBase +{ + GENERATED_BODY() + +public: + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 PlayerId = 0; + +}; + + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkPlayer.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkPlayer.g.h new file mode 100644 index 00000000000..f52e692d386 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/InsertViewPkPlayer.g.h @@ -0,0 +1,58 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "InsertViewPkPlayer.g.generated.h" + +// Reducer arguments struct for InsertViewPkPlayer +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FInsertViewPkPlayerArgs +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + + UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") + FString Name; + + FInsertViewPkPlayerArgs() = default; + + FInsertViewPkPlayerArgs(const uint64& InId, const FString& InName) + : Id(InId), Name(InName) + {} + + + FORCEINLINE bool operator==(const FInsertViewPkPlayerArgs& Other) const + { + return Id == Other.Id && Name == Other.Name; + } + FORCEINLINE bool operator!=(const FInsertViewPkPlayerArgs& Other) const + { + return !(*this == Other); + } +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_STRUCT(FInsertViewPkPlayerArgs, Id, Name); +} + +// Reducer class for internal dispatching +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UInsertViewPkPlayerReducer : public UReducerBase +{ + GENERATED_BODY() + +public: + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FString Name; + +}; + + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/UpdateViewPkPlayer.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/UpdateViewPkPlayer.g.h new file mode 100644 index 00000000000..204e288af84 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Reducers/UpdateViewPkPlayer.g.h @@ -0,0 +1,58 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "UpdateViewPkPlayer.g.generated.h" + +// Reducer arguments struct for UpdateViewPkPlayer +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FUpdateViewPkPlayerArgs +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + + UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") + FString Name; + + FUpdateViewPkPlayerArgs() = default; + + FUpdateViewPkPlayerArgs(const uint64& InId, const FString& InName) + : Id(InId), Name(InName) + {} + + + FORCEINLINE bool operator==(const FUpdateViewPkPlayerArgs& Other) const + { + return Id == Other.Id && Name == Other.Name; + } + FORCEINLINE bool operator!=(const FUpdateViewPkPlayerArgs& Other) const + { + return !(*this == Other); + } +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_STRUCT(FUpdateViewPkPlayerArgs, Id, Name); +} + +// Reducer class for internal dispatching +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UUpdateViewPkPlayerReducer : public UReducerBase +{ + GENERATED_BODY() + +public: + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FString Name; + +}; + + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/SpacetimeDBClient.g.h new file mode 100644 index 00000000000..fd1e16772c6 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -0,0 +1,1994 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +// This was generated using spacetimedb cli version 2.0.5 (commit 047dac974526f5c5aff873026e90177270b10f38). + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Connection/Callback.h" +#include "Connection/DbConnectionBase.h" +#include "Connection/DbConnectionBuilder.h" +#include "Connection/Subscription.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "ModuleBindings/ReducerBase.g.h" +#include "ModuleBindings/Reducers/InsertViewPkMembership.g.h" +#include "ModuleBindings/Reducers/InsertViewPkMembershipSecondary.g.h" +#include "ModuleBindings/Reducers/InsertViewPkPlayer.g.h" +#include "ModuleBindings/Reducers/UpdateViewPkPlayer.g.h" +#include "ModuleBindings/Types/ViewPkMembershipSecondaryType.g.h" +#include "ModuleBindings/Types/ViewPkMembershipType.g.h" +#include "ModuleBindings/Types/ViewPkPlayerType.g.h" +#include "QueryBuilder/query_builder.h" +#include "Types/Builtins.h" +#include "SpacetimeDBClient.g.generated.h" + +// Forward declarations +class UDbConnection; +class URemoteTables; +class URemoteReducers; +class URemoteProcedures; +class USubscriptionBuilder; +class USubscriptionHandle; + +/** Forward declaration for tables */ +class UAllViewPkPlayersTable; +class USenderViewPkPlayersATable; +class USenderViewPkPlayersBTable; +class UViewPkMembershipTable; +class UViewPkMembershipSecondaryTable; +class UViewPkPlayerTable; +/***/ + +// Delegates using the generated connection type. These wrap the base +// delegates defined in the SDK so that projects can work directly with +// UDbConnection without manual casting in user code. +DECLARE_DYNAMIC_DELEGATE_ThreeParams( + FOnConnectDelegate, + UDbConnection*, Connection, + FSpacetimeDBIdentity, Identity, + const FString&, Token); + +DECLARE_DYNAMIC_DELEGATE_TwoParams( + FOnDisconnectDelegate, + UDbConnection*, Connection, + const FString&, Error); + + +// Context classes for event handling + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FContextBase +{ + GENERATED_BODY() + + FContextBase() : Db(nullptr), Reducers(nullptr), Procedures(nullptr), Conn(nullptr) {}; + FContextBase(UDbConnection* InConn); + + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + URemoteTables* Db; + + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + URemoteReducers* Reducers; + + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + URemoteProcedures* Procedures; + + bool IsActive() const; + void Disconnect(); + bool TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const; + FSpacetimeDBConnectionId GetConnectionId() const; + USubscriptionBuilder* SubscriptionBuilder(); + +protected: + UPROPERTY() + UDbConnection* Conn; + +}; + +UCLASS() +class TESTVIEWPKCLIENT_API UContextBaseBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static URemoteTables* GetDb(const FContextBase& Ctx) { return Ctx.Db; } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static URemoteReducers* GetReducers(const FContextBase& Ctx) { return Ctx.Reducers; } + + static URemoteProcedures* GetProcedures(const FContextBase& Ctx) { return Ctx.Procedures; } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static bool IsActive(const FContextBase& Ctx) { return Ctx.IsActive(); } +}; + +UENUM(BlueprintType, Category = "SpacetimeDB") +enum class EReducerTag : uint8 +{ + InsertViewPkMembership, + InsertViewPkMembershipSecondary, + InsertViewPkPlayer, + UpdateViewPkPlayer +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FReducer +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + EReducerTag Tag = static_cast(0); + + TVariant Data; + + // Optional metadata + UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + FString ReducerName; + uint32 ReducerId = 0; + uint32 RequestId = 0; + + static FReducer InsertViewPkMembership(const FInsertViewPkMembershipArgs& Value) + { + FReducer Out; + Out.Tag = EReducerTag::InsertViewPkMembership; + Out.Data.Set(Value); + Out.ReducerName = TEXT("insert_view_pk_membership"); + return Out; + } + + FORCEINLINE bool IsInsertViewPkMembership() const { return Tag == EReducerTag::InsertViewPkMembership; } + FORCEINLINE FInsertViewPkMembershipArgs GetAsInsertViewPkMembership() const + { + ensureMsgf(IsInsertViewPkMembership(), TEXT("Reducer does not hold InsertViewPkMembership!")); + return Data.Get(); + } + + static FReducer InsertViewPkMembershipSecondary(const FInsertViewPkMembershipSecondaryArgs& Value) + { + FReducer Out; + Out.Tag = EReducerTag::InsertViewPkMembershipSecondary; + Out.Data.Set(Value); + Out.ReducerName = TEXT("insert_view_pk_membership_secondary"); + return Out; + } + + FORCEINLINE bool IsInsertViewPkMembershipSecondary() const { return Tag == EReducerTag::InsertViewPkMembershipSecondary; } + FORCEINLINE FInsertViewPkMembershipSecondaryArgs GetAsInsertViewPkMembershipSecondary() const + { + ensureMsgf(IsInsertViewPkMembershipSecondary(), TEXT("Reducer does not hold InsertViewPkMembershipSecondary!")); + return Data.Get(); + } + + static FReducer InsertViewPkPlayer(const FInsertViewPkPlayerArgs& Value) + { + FReducer Out; + Out.Tag = EReducerTag::InsertViewPkPlayer; + Out.Data.Set(Value); + Out.ReducerName = TEXT("insert_view_pk_player"); + return Out; + } + + FORCEINLINE bool IsInsertViewPkPlayer() const { return Tag == EReducerTag::InsertViewPkPlayer; } + FORCEINLINE FInsertViewPkPlayerArgs GetAsInsertViewPkPlayer() const + { + ensureMsgf(IsInsertViewPkPlayer(), TEXT("Reducer does not hold InsertViewPkPlayer!")); + return Data.Get(); + } + + static FReducer UpdateViewPkPlayer(const FUpdateViewPkPlayerArgs& Value) + { + FReducer Out; + Out.Tag = EReducerTag::UpdateViewPkPlayer; + Out.Data.Set(Value); + Out.ReducerName = TEXT("update_view_pk_player"); + return Out; + } + + FORCEINLINE bool IsUpdateViewPkPlayer() const { return Tag == EReducerTag::UpdateViewPkPlayer; } + FORCEINLINE FUpdateViewPkPlayerArgs GetAsUpdateViewPkPlayer() const + { + ensureMsgf(IsUpdateViewPkPlayer(), TEXT("Reducer does not hold UpdateViewPkPlayer!")); + return Data.Get(); + } + + FORCEINLINE bool operator==(const FReducer& Other) const + { + if (Tag != Other.Tag || ReducerId != Other.ReducerId || RequestId != Other.RequestId || ReducerName != Other.ReducerName) return false; + switch (Tag) + { + case EReducerTag::InsertViewPkMembership: + return GetAsInsertViewPkMembership() == Other.GetAsInsertViewPkMembership(); + case EReducerTag::InsertViewPkMembershipSecondary: + return GetAsInsertViewPkMembershipSecondary() == Other.GetAsInsertViewPkMembershipSecondary(); + case EReducerTag::InsertViewPkPlayer: + return GetAsInsertViewPkPlayer() == Other.GetAsInsertViewPkPlayer(); + case EReducerTag::UpdateViewPkPlayer: + return GetAsUpdateViewPkPlayer() == Other.GetAsUpdateViewPkPlayer(); + default: return false; + } + } + FORCEINLINE bool operator!=(const FReducer& Other) const { return !(*this == Other); } +}; + +UCLASS() +class TESTVIEWPKCLIENT_API UReducerBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") + static FReducer InsertViewPkMembership(const FInsertViewPkMembershipArgs& Value) { + return FReducer::InsertViewPkMembership(Value); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static bool IsInsertViewPkMembership(const FReducer& Reducer) { return Reducer.IsInsertViewPkMembership(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static FInsertViewPkMembershipArgs GetAsInsertViewPkMembership(const FReducer& Reducer) { + return Reducer.GetAsInsertViewPkMembership(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") + static FReducer InsertViewPkMembershipSecondary(const FInsertViewPkMembershipSecondaryArgs& Value) { + return FReducer::InsertViewPkMembershipSecondary(Value); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static bool IsInsertViewPkMembershipSecondary(const FReducer& Reducer) { return Reducer.IsInsertViewPkMembershipSecondary(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static FInsertViewPkMembershipSecondaryArgs GetAsInsertViewPkMembershipSecondary(const FReducer& Reducer) { + return Reducer.GetAsInsertViewPkMembershipSecondary(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") + static FReducer InsertViewPkPlayer(const FInsertViewPkPlayerArgs& Value) { + return FReducer::InsertViewPkPlayer(Value); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static bool IsInsertViewPkPlayer(const FReducer& Reducer) { return Reducer.IsInsertViewPkPlayer(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static FInsertViewPkPlayerArgs GetAsInsertViewPkPlayer(const FReducer& Reducer) { + return Reducer.GetAsInsertViewPkPlayer(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") + static FReducer UpdateViewPkPlayer(const FUpdateViewPkPlayerArgs& Value) { + return FReducer::UpdateViewPkPlayer(Value); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static bool IsUpdateViewPkPlayer(const FReducer& Reducer) { return Reducer.IsUpdateViewPkPlayer(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") + static FUpdateViewPkPlayerArgs GetAsUpdateViewPkPlayer(const FReducer& Reducer) { + return Reducer.GetAsUpdateViewPkPlayer(); + } +}; + +/** Metadata describing a reducer run. */ +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FTestViewPkClientReducerEvent +{ + GENERATED_BODY() + + /** Timestamp for when the reducer executed */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimestamp Timestamp; + + /** Result status of the reducer */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBStatus Status; + + /** Identity that initiated the call */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBIdentity CallerIdentity; + + /** Connection ID for the caller */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBConnectionId CallerConnectionId; + + /** Energy consumed while executing */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FEnergyQuantaType EnergyConsumed; + + /** Detailed call information */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FReducer Reducer; + + FORCEINLINE bool operator==(const FTestViewPkClientReducerEvent& Other) const + { + return Status == Other.Status && Timestamp == Other.Timestamp && CallerIdentity == Other.CallerIdentity && + CallerConnectionId == Other.CallerConnectionId && EnergyConsumed == Other.EnergyConsumed && + Reducer == Other.Reducer; + } + + FORCEINLINE bool operator!=(const FTestViewPkClientReducerEvent& Other) const + { + return !(*this == Other); + } +}; + +// No procedures defined in this module. +/** Metadata describing a procedure run. */ +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FTestViewPkClientProcedureEvent +{ + GENERATED_BODY() + + /** Timestamp for when the procedure executed */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimestamp Timestamp; + + /** Result status of the procedure */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBProcedureStatus Status; + + /** Identity that initiated the call */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimeDuration TotalHostExecutionDuration; + + FTestViewPkClientProcedureEvent() { + } + FTestViewPkClientProcedureEvent(FProcedureEvent Event) { + Timestamp = Event.Timestamp; + Status = FSpacetimeDBProcedureStatus::FromStatus(Event.Status); + TotalHostExecutionDuration = Event.TotalHostExecutionDuration; + } + FORCEINLINE bool operator==(const FTestViewPkClientProcedureEvent& Other) const + { + return Status == Other.Status && Timestamp == Other.Timestamp && + TotalHostExecutionDuration == Other.TotalHostExecutionDuration; + } + + FORCEINLINE bool operator!=(const FTestViewPkClientProcedureEvent& Other) const + { + return !(*this == Other); + } +}; + +/** Represents event with variant message data. */ +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FTestViewPkClientEvent +{ + GENERATED_BODY() + + /** Tagged union holding reducer call, unit events, or error string */ + TVariant MessageData; + + /** Type tag indicating what this event represents */ + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + ESpacetimeDBEventTag Tag = ESpacetimeDBEventTag::UnknownTransaction; + + /** === Static factory methods ===*/ + static FTestViewPkClientEvent Reducer(const FReducer& Value) + { + FTestViewPkClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Reducer; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewPkClientEvent SubscribeApplied(const FSpacetimeDBUnit& Value) + { + FTestViewPkClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::SubscribeApplied; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewPkClientEvent UnsubscribeApplied(const FSpacetimeDBUnit& Value) + { + FTestViewPkClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::UnsubscribeApplied; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewPkClientEvent Disconnected(const FSpacetimeDBUnit& Value) + { + FTestViewPkClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Disconnected; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewPkClientEvent Transaction(const FSpacetimeDBUnit& Value) + { + FTestViewPkClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Transaction; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewPkClientEvent SubscribeError(const FString& Value) + { + FTestViewPkClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::SubscribeError; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTestViewPkClientEvent UnknownTransaction(const FSpacetimeDBUnit& Value) + { + FTestViewPkClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::UnknownTransaction; + Obj.MessageData.Set(Value); + return Obj; + } + + FORCEINLINE bool IsReducer() const { return Tag == ESpacetimeDBEventTag::Reducer; } + FORCEINLINE FReducer GetAsReducer() const + { + ensureMsgf(IsReducer(), TEXT("MessageData does not hold Reducer!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsSubscribeApplied() const { return Tag == ESpacetimeDBEventTag::SubscribeApplied; } + FORCEINLINE FSpacetimeDBUnit GetAsSubscribeApplied() const + { + ensureMsgf(IsSubscribeApplied(), TEXT("MessageData does not hold SubscribeApplied!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsUnsubscribeApplied() const { return Tag == ESpacetimeDBEventTag::UnsubscribeApplied; } + FORCEINLINE FSpacetimeDBUnit GetAsUnsubscribeApplied() const + { + ensureMsgf(IsUnsubscribeApplied(), TEXT("MessageData does not hold UnsubscribeApplied!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsDisconnected() const { return Tag == ESpacetimeDBEventTag::Disconnected; } + FORCEINLINE FSpacetimeDBUnit GetAsDisconnected() const + { + ensureMsgf(IsDisconnected(), TEXT("MessageData does not hold Disconnected!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsTransaction() const { return Tag == ESpacetimeDBEventTag::Transaction; } + FORCEINLINE FSpacetimeDBUnit GetAsTransaction() const + { + ensureMsgf(IsTransaction(), TEXT("MessageData does not hold Transaction!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsSubscribeError() const { return Tag == ESpacetimeDBEventTag::SubscribeError; } + FORCEINLINE FString GetAsSubscribeError() const + { + ensureMsgf(IsSubscribeError(), TEXT("MessageData does not hold SubscribeError!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsUnknownTransaction() const { return Tag == ESpacetimeDBEventTag::UnknownTransaction; } + FORCEINLINE FSpacetimeDBUnit GetAsUnknownTransaction() const + { + ensureMsgf(IsUnknownTransaction(), TEXT("MessageData does not hold UnknownTransaction!")); + return MessageData.Get(); + } + + FORCEINLINE bool operator==(const FTestViewPkClientEvent& Other) const + { + if (Tag != Other.Tag) return false; + switch (Tag) + { + case ESpacetimeDBEventTag::Reducer: return GetAsReducer() == Other.GetAsReducer(); + case ESpacetimeDBEventTag::SubscribeApplied: return GetAsSubscribeApplied() == Other.GetAsSubscribeApplied(); + case ESpacetimeDBEventTag::UnsubscribeApplied: return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); + case ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected(); + case ESpacetimeDBEventTag::Transaction: return GetAsTransaction() == Other.GetAsTransaction(); + case ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError(); + case ESpacetimeDBEventTag::UnknownTransaction: return GetAsUnknownTransaction() == Other.GetAsUnknownTransaction(); + default: return false; + } + } + + FORCEINLINE bool operator!=(const FTestViewPkClientEvent& Other) const + { + return !(*this == Other); + } +}; + +UCLASS() +class TESTVIEWPKCLIENT_API UTestViewPkClientEventBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewPkClientEvent") + static FTestViewPkClientEvent Reducer(const FReducer& InValue) + { + return FTestViewPkClientEvent::Reducer(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewPkClientEvent") + static FTestViewPkClientEvent SubscribeApplied(const FSpacetimeDBUnit& InValue) + { + return FTestViewPkClientEvent::SubscribeApplied(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewPkClientEvent") + static FTestViewPkClientEvent UnsubscribeApplied(const FSpacetimeDBUnit& InValue) + { + return FTestViewPkClientEvent::UnsubscribeApplied(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewPkClientEvent") + static FTestViewPkClientEvent Disconnected(const FSpacetimeDBUnit& InValue) + { + return FTestViewPkClientEvent::Disconnected(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewPkClientEvent") + static FTestViewPkClientEvent Transaction(const FSpacetimeDBUnit& InValue) + { + return FTestViewPkClientEvent::Transaction(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewPkClientEvent") + static FTestViewPkClientEvent SubscribeError(const FString& InValue) + { + return FTestViewPkClientEvent::SubscribeError(InValue); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestViewPkClientEvent") + static FTestViewPkClientEvent UnknownTransaction(const FSpacetimeDBUnit& InValue) + { + return FTestViewPkClientEvent::UnknownTransaction(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static bool IsReducer(const FTestViewPkClientEvent& Event) { return Event.IsReducer(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static bool IsSubscribeApplied(const FTestViewPkClientEvent& Event) { return Event.IsSubscribeApplied(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static bool IsUnsubscribeApplied(const FTestViewPkClientEvent& Event) { return Event.IsUnsubscribeApplied(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static bool IsDisconnected(const FTestViewPkClientEvent& Event) { return Event.IsDisconnected(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static bool IsTransaction(const FTestViewPkClientEvent& Event) { return Event.IsTransaction(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static bool IsSubscribeError(const FTestViewPkClientEvent& Event) { return Event.IsSubscribeError(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static bool IsUnknownTransaction(const FTestViewPkClientEvent& Event) { return Event.IsUnknownTransaction(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static FReducer GetAsReducer(const FTestViewPkClientEvent& Event) + { + return Event.GetAsReducer(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static FSpacetimeDBUnit GetAsSubscribeApplied(const FTestViewPkClientEvent& Event) + { + return Event.GetAsSubscribeApplied(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static FSpacetimeDBUnit GetAsUnsubscribeApplied(const FTestViewPkClientEvent& Event) + { + return Event.GetAsUnsubscribeApplied(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static FSpacetimeDBUnit GetAsDisconnected(const FTestViewPkClientEvent& Event) + { + return Event.GetAsDisconnected(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static FSpacetimeDBUnit GetAsTransaction(const FTestViewPkClientEvent& Event) + { + return Event.GetAsTransaction(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static FString GetAsSubscribeError(const FTestViewPkClientEvent& Event) + { + return Event.GetAsSubscribeError(); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestViewPkClientEvent") + static FSpacetimeDBUnit GetAsUnknownTransaction(const FTestViewPkClientEvent& Event) + { + return Event.GetAsUnknownTransaction(); + } + +}; + + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FEventContext : public FContextBase +{ + GENERATED_BODY() + + FEventContext() = default; + FEventContext(UDbConnection* InConn, const FTestViewPkClientEvent& InEvent) : FContextBase(InConn), Event(InEvent) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FTestViewPkClientEvent Event; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FReducerEventContext : public FContextBase +{ + GENERATED_BODY() + + FReducerEventContext() = default; + FReducerEventContext(UDbConnection* InConn, FTestViewPkClientReducerEvent InEvent) : FContextBase(InConn), Event(InEvent) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FTestViewPkClientReducerEvent Event; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FProcedureEventContext : public FContextBase +{ + GENERATED_BODY() + + FProcedureEventContext() = default; + FProcedureEventContext(UDbConnection* InConn, FTestViewPkClientProcedureEvent InEvent) : FContextBase(InConn), Event(InEvent) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FTestViewPkClientProcedureEvent Event; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FErrorContext : public FContextBase +{ + GENERATED_BODY() + + FErrorContext() = default; + FErrorContext(UDbConnection* InConn, const FString& InError) : FContextBase(InConn), Error(InError) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FString Error; + +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FSubscriptionEventContext : public FContextBase +{ + GENERATED_BODY() + + FSubscriptionEventContext() = default; + FSubscriptionEventContext(UDbConnection* InConn) : FContextBase(InConn) {} + +}; + +DECLARE_DYNAMIC_DELEGATE_OneParam( + FOnSubscriptionApplied, + FSubscriptionEventContext, Context); + +DECLARE_DYNAMIC_DELEGATE_OneParam( + FOnSubscriptionError, + FErrorContext, Context); + +// RemoteTables class +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API URemoteTables : public UObject +{ + GENERATED_BODY() + +public: + void Initialize(); + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UAllViewPkPlayersTable* AllViewPkPlayers; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + USenderViewPkPlayersATable* SenderViewPkPlayersA; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + USenderViewPkPlayersBTable* SenderViewPkPlayersB; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UViewPkMembershipTable* ViewPkMembership; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UViewPkMembershipSecondaryTable* ViewPkMembershipSecondary; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + UViewPkPlayerTable* ViewPkPlayer; + +}; + +// RemoteReducers class +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API URemoteReducers : public UObject +{ + GENERATED_BODY() + +public: + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FInsertViewPkMembershipHandler, + const FReducerEventContext&, Context, + uint64, Id, + uint64, PlayerId + ); + // NOTE: Not exposed to Blueprint because uint64, uint64 types are not Blueprint-compatible + FInsertViewPkMembershipHandler OnInsertViewPkMembership; + + // NOTE: Not exposed to Blueprint because uint64, uint64 types are not Blueprint-compatible + void InsertViewPkMembership(const uint64 Id, const uint64 PlayerId); + + bool InvokeInsertViewPkMembership(const FReducerEventContext& Context, const UInsertViewPkMembershipReducer* Args); + bool InvokeInsertViewPkMembershipWithArgs(const FReducerEventContext& Context, const FInsertViewPkMembershipArgs& Args); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FInsertViewPkMembershipSecondaryHandler, + const FReducerEventContext&, Context, + uint64, Id, + uint64, PlayerId + ); + // NOTE: Not exposed to Blueprint because uint64, uint64 types are not Blueprint-compatible + FInsertViewPkMembershipSecondaryHandler OnInsertViewPkMembershipSecondary; + + // NOTE: Not exposed to Blueprint because uint64, uint64 types are not Blueprint-compatible + void InsertViewPkMembershipSecondary(const uint64 Id, const uint64 PlayerId); + + bool InvokeInsertViewPkMembershipSecondary(const FReducerEventContext& Context, const UInsertViewPkMembershipSecondaryReducer* Args); + bool InvokeInsertViewPkMembershipSecondaryWithArgs(const FReducerEventContext& Context, const FInsertViewPkMembershipSecondaryArgs& Args); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FInsertViewPkPlayerHandler, + const FReducerEventContext&, Context, + uint64, Id, + const FString&, Name + ); + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FInsertViewPkPlayerHandler OnInsertViewPkPlayer; + + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + void InsertViewPkPlayer(const uint64 Id, const FString& Name); + + bool InvokeInsertViewPkPlayer(const FReducerEventContext& Context, const UInsertViewPkPlayerReducer* Args); + bool InvokeInsertViewPkPlayerWithArgs(const FReducerEventContext& Context, const FInsertViewPkPlayerArgs& Args); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FUpdateViewPkPlayerHandler, + const FReducerEventContext&, Context, + uint64, Id, + const FString&, Name + ); + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FUpdateViewPkPlayerHandler OnUpdateViewPkPlayer; + + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + void UpdateViewPkPlayer(const uint64 Id, const FString& Name); + + bool InvokeUpdateViewPkPlayer(const FReducerEventContext& Context, const UUpdateViewPkPlayerReducer* Args); + bool InvokeUpdateViewPkPlayerWithArgs(const FReducerEventContext& Context, const FUpdateViewPkPlayerArgs& Args); + + // Internal error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error); + FInternalOnUnhandledReducerError InternalOnUnhandledReducerError; + +private: + + friend UDbConnection; + + UPROPERTY() + class UDbConnection* Conn; +}; + +// RemoteProcedures class +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API URemoteProcedures : public UObject +{ + GENERATED_BODY() + +public: + + // Internal error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error); + FInternalOnUnhandledProcedureError InternalOnUnhandledProcedureError; + +private: + + friend UDbConnection; + + UPROPERTY() + class UDbConnection* Conn; +}; + +// QueryBuilder types +struct TESTVIEWPKCLIENT_API FAllViewPkPlayersCols; +struct TESTVIEWPKCLIENT_API FAllViewPkPlayersIxCols; +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersACols; +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersAIxCols; +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersBCols; +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersBIxCols; +struct TESTVIEWPKCLIENT_API FViewPkMembershipCols; +struct TESTVIEWPKCLIENT_API FViewPkMembershipIxCols; +struct TESTVIEWPKCLIENT_API FViewPkMembershipSecondaryCols; +struct TESTVIEWPKCLIENT_API FViewPkMembershipSecondaryIxCols; +struct TESTVIEWPKCLIENT_API FViewPkPlayerCols; +struct TESTVIEWPKCLIENT_API FViewPkPlayerIxCols; + +struct TESTVIEWPKCLIENT_API FAllViewPkPlayersCols +{ + explicit FAllViewPkPlayersCols(const char* TableName) + : Id(TableName, "id"), Name(TableName, "name") {} + + ::SpacetimeDB::query_builder::Col Id; + ::SpacetimeDB::query_builder::Col Name; +}; + +struct TESTVIEWPKCLIENT_API FAllViewPkPlayersIxCols +{ + explicit FAllViewPkPlayersIxCols(const char* TableName) + : Id(TableName, "id") {} + + ::SpacetimeDB::query_builder::IxCol Id; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersACols +{ + explicit FSenderViewPkPlayersACols(const char* TableName) + : Id(TableName, "id"), Name(TableName, "name") {} + + ::SpacetimeDB::query_builder::Col Id; + ::SpacetimeDB::query_builder::Col Name; +}; + +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersAIxCols +{ + explicit FSenderViewPkPlayersAIxCols(const char* TableName) + : Id(TableName, "id") {} + + ::SpacetimeDB::query_builder::IxCol Id; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersBCols +{ + explicit FSenderViewPkPlayersBCols(const char* TableName) + : Id(TableName, "id"), Name(TableName, "name") {} + + ::SpacetimeDB::query_builder::Col Id; + ::SpacetimeDB::query_builder::Col Name; +}; + +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersBIxCols +{ + explicit FSenderViewPkPlayersBIxCols(const char* TableName) + : Id(TableName, "id") {} + + ::SpacetimeDB::query_builder::IxCol Id; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWPKCLIENT_API FViewPkMembershipCols +{ + explicit FViewPkMembershipCols(const char* TableName) + : Id(TableName, "id"), PlayerId(TableName, "player_id") {} + + ::SpacetimeDB::query_builder::Col Id; + ::SpacetimeDB::query_builder::Col PlayerId; +}; + +struct TESTVIEWPKCLIENT_API FViewPkMembershipIxCols +{ + explicit FViewPkMembershipIxCols(const char* TableName) + : Id(TableName, "id"), PlayerId(TableName, "player_id") {} + + ::SpacetimeDB::query_builder::IxCol Id; + ::SpacetimeDB::query_builder::IxCol PlayerId; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWPKCLIENT_API FViewPkMembershipSecondaryCols +{ + explicit FViewPkMembershipSecondaryCols(const char* TableName) + : Id(TableName, "id"), PlayerId(TableName, "player_id") {} + + ::SpacetimeDB::query_builder::Col Id; + ::SpacetimeDB::query_builder::Col PlayerId; +}; + +struct TESTVIEWPKCLIENT_API FViewPkMembershipSecondaryIxCols +{ + explicit FViewPkMembershipSecondaryIxCols(const char* TableName) + : Id(TableName, "id"), PlayerId(TableName, "player_id") {} + + ::SpacetimeDB::query_builder::IxCol Id; + ::SpacetimeDB::query_builder::IxCol PlayerId; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWPKCLIENT_API FViewPkPlayerCols +{ + explicit FViewPkPlayerCols(const char* TableName) + : Id(TableName, "id"), Name(TableName, "name") {} + + ::SpacetimeDB::query_builder::Col Id; + ::SpacetimeDB::query_builder::Col Name; +}; + +struct TESTVIEWPKCLIENT_API FViewPkPlayerIxCols +{ + explicit FViewPkPlayerIxCols(const char* TableName) + : Id(TableName, "id") {} + + ::SpacetimeDB::query_builder::IxCol Id; +}; + +namespace SpacetimeDB::query_builder +{ + template<> + struct CanBeLookupTable> : std::true_type {}; +} + +struct TESTVIEWPKCLIENT_API FFrom +{ + [[nodiscard]] ::SpacetimeDB::query_builder::Table AllViewPkPlayers() const { return ::SpacetimeDB::query_builder::Table("all_view_pk_players", FAllViewPkPlayersCols("all_view_pk_players"), FAllViewPkPlayersIxCols("all_view_pk_players")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table SenderViewPkPlayersA() const { return ::SpacetimeDB::query_builder::Table("sender_view_pk_players_a", FSenderViewPkPlayersACols("sender_view_pk_players_a"), FSenderViewPkPlayersAIxCols("sender_view_pk_players_a")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table SenderViewPkPlayersB() const { return ::SpacetimeDB::query_builder::Table("sender_view_pk_players_b", FSenderViewPkPlayersBCols("sender_view_pk_players_b"), FSenderViewPkPlayersBIxCols("sender_view_pk_players_b")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ViewPkMembership() const { return ::SpacetimeDB::query_builder::Table("view_pk_membership", FViewPkMembershipCols("view_pk_membership"), FViewPkMembershipIxCols("view_pk_membership")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ViewPkMembershipSecondary() const { return ::SpacetimeDB::query_builder::Table("view_pk_membership_secondary", FViewPkMembershipSecondaryCols("view_pk_membership_secondary"), FViewPkMembershipSecondaryIxCols("view_pk_membership_secondary")); } + [[nodiscard]] ::SpacetimeDB::query_builder::Table ViewPkPlayer() const { return ::SpacetimeDB::query_builder::Table("view_pk_player", FViewPkPlayerCols("view_pk_player"), FViewPkPlayerIxCols("view_pk_player")); } +}; + +struct TESTVIEWPKCLIENT_API FQueryBuilder +{ + FFrom From; + + static TArray AllTablesSqlQueries() + { + TArray Sql; + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.AllViewPkPlayers().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.SenderViewPkPlayersA().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.SenderViewPkPlayersB().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ViewPkMembership().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ViewPkMembershipSecondary().into_sql().c_str()))); + Sql.Add(FString(UTF8_TO_TCHAR(FQueryBuilder().From.ViewPkPlayer().into_sql().c_str()))); + return Sql; + } +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintPredicate +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FAllViewPkPlayersQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersAQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FSenderViewPkPlayersBQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FViewPkMembershipQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FViewPkMembershipSecondaryQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FViewPkPlayerQuery +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString Sql; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintBoolColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintUInt8Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintInt32Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintInt64Column +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintFloatColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintDoubleColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintStringColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintIdentityColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintConnectionIdColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintTimestampColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FBlueprintUuidColumn +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ResultSourceName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB|Queries") + FString ColumnName; +}; + +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UQueryBuilderBlueprintLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|AllViewPkPlayers", meta=(DisplayName="From AllViewPkPlayers")) + static FAllViewPkPlayersQuery FromAllViewPkPlayers() + { + FAllViewPkPlayersQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.AllViewPkPlayers().into_sql().c_str())); + Query.ResultSourceName = TEXT("all_view_pk_players"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|AllViewPkPlayers", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_AllViewPkPlayersQueryToBlueprintQuery(const FAllViewPkPlayersQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|AllViewPkPlayers|Columns", meta=(DisplayName="AllViewPkPlayers Name")) + static FBlueprintStringColumn AllViewPkPlayersName(const FAllViewPkPlayersQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("all_view_pk_players") : Query.ResultSourceName; + Column.ColumnName = TEXT("name"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|AllViewPkPlayers", meta=(DisplayName="AllViewPkPlayers Where")) + static FAllViewPkPlayersQuery AllViewPkPlayersWhere(FAllViewPkPlayersQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersA", meta=(DisplayName="From SenderViewPkPlayersA")) + static FSenderViewPkPlayersAQuery FromSenderViewPkPlayersA() + { + FSenderViewPkPlayersAQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.SenderViewPkPlayersA().into_sql().c_str())); + Query.ResultSourceName = TEXT("sender_view_pk_players_a"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersA", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_SenderViewPkPlayersAQueryToBlueprintQuery(const FSenderViewPkPlayersAQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersA|Columns", meta=(DisplayName="SenderViewPkPlayersA Name")) + static FBlueprintStringColumn SenderViewPkPlayersAName(const FSenderViewPkPlayersAQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("sender_view_pk_players_a") : Query.ResultSourceName; + Column.ColumnName = TEXT("name"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersA", meta=(DisplayName="SenderViewPkPlayersA Where")) + static FSenderViewPkPlayersAQuery SenderViewPkPlayersAWhere(FSenderViewPkPlayersAQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersB", meta=(DisplayName="From SenderViewPkPlayersB")) + static FSenderViewPkPlayersBQuery FromSenderViewPkPlayersB() + { + FSenderViewPkPlayersBQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.SenderViewPkPlayersB().into_sql().c_str())); + Query.ResultSourceName = TEXT("sender_view_pk_players_b"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersB", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_SenderViewPkPlayersBQueryToBlueprintQuery(const FSenderViewPkPlayersBQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersB|Columns", meta=(DisplayName="SenderViewPkPlayersB Name")) + static FBlueprintStringColumn SenderViewPkPlayersBName(const FSenderViewPkPlayersBQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("sender_view_pk_players_b") : Query.ResultSourceName; + Column.ColumnName = TEXT("name"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|SenderViewPkPlayersB", meta=(DisplayName="SenderViewPkPlayersB Where")) + static FSenderViewPkPlayersBQuery SenderViewPkPlayersBWhere(FSenderViewPkPlayersBQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkMembership", meta=(DisplayName="From ViewPkMembership")) + static FViewPkMembershipQuery FromViewPkMembership() + { + FViewPkMembershipQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ViewPkMembership().into_sql().c_str())); + Query.ResultSourceName = TEXT("view_pk_membership"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkMembership", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ViewPkMembershipQueryToBlueprintQuery(const FViewPkMembershipQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkMembership", meta=(DisplayName="ViewPkMembership Where")) + static FViewPkMembershipQuery ViewPkMembershipWhere(FViewPkMembershipQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkMembershipSecondary", meta=(DisplayName="From ViewPkMembershipSecondary")) + static FViewPkMembershipSecondaryQuery FromViewPkMembershipSecondary() + { + FViewPkMembershipSecondaryQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ViewPkMembershipSecondary().into_sql().c_str())); + Query.ResultSourceName = TEXT("view_pk_membership_secondary"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkMembershipSecondary", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ViewPkMembershipSecondaryQueryToBlueprintQuery(const FViewPkMembershipSecondaryQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkMembershipSecondary", meta=(DisplayName="ViewPkMembershipSecondary Where")) + static FViewPkMembershipSecondaryQuery ViewPkMembershipSecondaryWhere(FViewPkMembershipSecondaryQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkPlayer", meta=(DisplayName="From ViewPkPlayer")) + static FViewPkPlayerQuery FromViewPkPlayer() + { + FViewPkPlayerQuery Query; + Query.Sql = FString(UTF8_TO_TCHAR(FQueryBuilder().From.ViewPkPlayer().into_sql().c_str())); + Query.ResultSourceName = TEXT("view_pk_player"); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkPlayer", meta=(DisplayName="To Query", BlueprintAutocast)) + static FBlueprintQuery Conv_ViewPkPlayerQueryToBlueprintQuery(const FViewPkPlayerQuery& Query) + { + FBlueprintQuery GenericQuery; + GenericQuery.Sql = Query.Sql; + GenericQuery.ResultSourceName = Query.ResultSourceName; + return GenericQuery; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkPlayer|Columns", meta=(DisplayName="ViewPkPlayer Name")) + static FBlueprintStringColumn ViewPkPlayerName(const FViewPkPlayerQuery& Query) + { + FBlueprintStringColumn Column; + Column.ResultSourceName = Query.ResultSourceName.IsEmpty() ? TEXT("view_pk_player") : Query.ResultSourceName; + Column.ColumnName = TEXT("name"); + return Column; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|ViewPkPlayer", meta=(DisplayName="ViewPkPlayer Where")) + static FViewPkPlayerQuery ViewPkPlayerWhere(FViewPkPlayerQuery Query, const FBlueprintPredicate& Predicate) + { + if (Query.ResultSourceName != Predicate.ResultSourceName || Predicate.Sql.IsEmpty()) + { + return Query; + } + Query.Sql = AppendPredicate(Query.Sql, Predicate.Sql); + return Query; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Bool Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate BoolEqual(const FBlueprintBoolColumn& Column, const bool Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UInt8Equal(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate UInt8GreaterThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate UInt8GreaterEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate UInt8LessThan(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="UInt8 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate UInt8LessEqual(const FBlueprintUInt8Column& Column, const uint8 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int32Equal(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int32GreaterThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int32GreaterEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int32LessThan(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int32 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int32LessEqual(const FBlueprintInt32Column& Column, const int32 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate Int64Equal(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate Int64GreaterThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate Int64GreaterEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate Int64LessThan(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Int64 Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate Int64LessEqual(const FBlueprintInt64Column& Column, const int64 Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate FloatEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate FloatGreaterThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate FloatGreaterEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate FloatLessThan(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Float Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate FloatLessEqual(const FBlueprintFloatColumn& Column, const float Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate DoubleEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate DoubleGreaterThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate DoubleGreaterEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate DoubleLessThan(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Double Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate DoubleLessEqual(const FBlueprintDoubleColumn& Column, const double Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="String Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate StringEqual(const FBlueprintStringColumn& Column, const FString& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Identity Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate IdentityEqual(const FBlueprintIdentityColumn& Column, const FSpacetimeDBIdentity& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="ConnectionId Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate ConnectionIdEqual(const FBlueprintConnectionIdColumn& Column, const FSpacetimeDBConnectionId& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate TimestampEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Than", CompactNodeTitle=">", Keywords="> greater")) + static FBlueprintPredicate TimestampGreaterThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" > %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Greater Equal", CompactNodeTitle=">=", Keywords=">= greater equal")) + static FBlueprintPredicate TimestampGreaterEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" >= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Than", CompactNodeTitle="<", Keywords="< less")) + static FBlueprintPredicate TimestampLessThan(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" < %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Timestamp Less Equal", CompactNodeTitle="<=", Keywords="<= less equal")) + static FBlueprintPredicate TimestampLessEqual(const FBlueprintTimestampColumn& Column, const FSpacetimeDBTimestamp& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" <= %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="Uuid Equal", CompactNodeTitle="==", Keywords="== equal")) + static FBlueprintPredicate UuidEqual(const FBlueprintUuidColumn& Column, const FSpacetimeDBUuid& Value) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = Column.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("\"%s\".\"%s\" = %s"), *Column.ResultSourceName, *Column.ColumnName, UTF8_TO_TCHAR(::SpacetimeDB::query_builder::detail::literal_sql(Value).c_str())); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="AND", CompactNodeTitle="AND", Keywords="and &&")) + static FBlueprintPredicate And(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) AND (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="OR", CompactNodeTitle="OR", Keywords="or ||")) + static FBlueprintPredicate Or(const FBlueprintPredicate& A, const FBlueprintPredicate& B) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("(%s) OR (%s)"), *A.Sql, *B.Sql); + return Predicate; + } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB|Queries|Predicates", meta=(DisplayName="NOT", CompactNodeTitle="NOT", Keywords="not !")) + static FBlueprintPredicate Not(const FBlueprintPredicate& A) + { + FBlueprintPredicate Predicate; + Predicate.ResultSourceName = A.ResultSourceName; + Predicate.Sql = FString::Printf(TEXT("NOT (%s)"), *A.Sql); + return Predicate; + } + +private: + static FString AppendPredicate(const FString& Sql, const FString& Predicate) + { + if (Sql.Contains(TEXT(" WHERE "))) + { + return Sql + TEXT(" AND (") + Predicate + TEXT(")"); + } + return Sql + TEXT(" WHERE (") + Predicate + TEXT(")"); + } +}; + +// SubscriptionBuilder class +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API USubscriptionBuilder : public USubscriptionBuilderBase +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + USubscriptionBuilder* OnApplied(FOnSubscriptionApplied Callback); + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + USubscriptionBuilder* OnError(FOnSubscriptionError Callback); + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + USubscriptionHandle* Subscribe(); + + USubscriptionHandle* Subscribe(const TArray& SQL); + + template + USubscriptionBuilder* AddQuery(TFn&& Build) + { + FQueryBuilder Q; + auto Query = std::forward(Build)(Q); + static_assert(::SpacetimeDB::query_builder::QueryBuilderReturn, + "Typed subscription queries must return a query_builder table/query expression."); + PendingSqlQueries.Add(FString(UTF8_TO_TCHAR(Query.into_sql().c_str()))); + return this; + } + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB", meta=(DisplayName="AddQuery", ScriptName="AddQuery")) + USubscriptionBuilder* AddBlueprintQuery(const FBlueprintQuery& Query); + + USubscriptionBuilder* AddAllViewPkPlayersQuery(const FAllViewPkPlayersQuery& Query); + + USubscriptionBuilder* AddSenderViewPkPlayersAQuery(const FSenderViewPkPlayersAQuery& Query); + + USubscriptionBuilder* AddSenderViewPkPlayersBQuery(const FSenderViewPkPlayersBQuery& Query); + + USubscriptionBuilder* AddViewPkMembershipQuery(const FViewPkMembershipQuery& Query); + + USubscriptionBuilder* AddViewPkMembershipSecondaryQuery(const FViewPkMembershipSecondaryQuery& Query); + + USubscriptionBuilder* AddViewPkPlayerQuery(const FViewPkPlayerQuery& Query); + + /** Convenience for subscribing to all rows from all public sources, including views */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + USubscriptionHandle* SubscribeToAllTables(); + + + friend class UDbConnection; + friend class UDbConnectionBase; + +protected: + UPROPERTY() + class UDbConnection* Conn; + + UPROPERTY() + TArray PendingSqlQueries; + + // Delegates stored so Subscribe() can bind forwarding callbacks + FOnSubscriptionApplied OnAppliedDelegateInternal; + FOnSubscriptionError OnErrorDelegateInternal; +}; + +// SubscriptionHandle class +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API USubscriptionHandle : public USubscriptionHandleBase +{ + GENERATED_BODY() + +public: + + USubscriptionHandle() {}; + + explicit USubscriptionHandle(UDbConnection* InConn); + + friend class USubscriptionBuilder; + +private: + UPROPERTY() + class UDbConnection* Conn; + + // Delegates that expose subscription events with connection aware contexts + FOnSubscriptionApplied OnAppliedDelegate; + FOnSubscriptionError OnErrorDelegate; + + UFUNCTION() + void ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx); + + UFUNCTION() + void ForwardOnError(const FErrorContextBase& BaseCtx); +}; + +/* + @Note: Child class of UDbConnectionBuilderBase. +*/ +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UDbConnectionBuilder : public UDbConnectionBuilderBase +{ + GENERATED_BODY() +public: + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithUri(const FString& InUri); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithDatabaseName(const FString& InName); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithToken(const FString& InToken); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* WithCompression(const ESpacetimeDBCompression& InCompression); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* OnConnect(FOnConnectDelegate Callback); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* OnConnectError(FOnConnectErrorDelegate Callback); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnectionBuilder* OnDisconnect(FOnDisconnectDelegate Callback); + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + UDbConnection* Build(); + +private: + + // Stored delegates which will be forwarded when the connection events occur. + FOnConnectDelegate OnConnectDelegateInternal; + FOnDisconnectDelegate OnDisconnectDelegateInternal; +}; + +// Main DbConnection class +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UDbConnection : public UDbConnectionBase +{ + GENERATED_BODY() + +public: + explicit UDbConnection(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); + + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + URemoteTables* Db; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + URemoteReducers* Reducers; + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + URemoteProcedures* Procedures; + + // Delegates that allow users to bind with the concrete connection type. + FOnConnectDelegate OnConnectDelegate; + FOnDisconnectDelegate OnDisconnectDelegate; + + UFUNCTION(BlueprintCallable, Category="SpacetimeDB") + USubscriptionBuilder* SubscriptionBuilder(); + + /** Static entry point for constructing a connection. */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB", DisplayName = "SpacetimeDB TestViewPkClient Builder") + static UDbConnectionBuilder* Builder(); + + // Error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error); + UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") + FOnUnhandledReducerError OnUnhandledReducerError; + + // Error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error); + UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") + FOnUnhandledProcedureError OnUnhandledProcedureError; + + +protected: + + // Hook up error handling to reducers and procedures + virtual void PostInitProperties() override; + + UFUNCTION() + void ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken); + UFUNCTION() + void ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error); + + UFUNCTION() + void OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error); + + UFUNCTION() + void OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error); + + // Override the DbConnectionBase methods to handle updates and events + virtual void DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event) override; + + // Override the reducer event handler to dispatch events to the appropriate reducers + virtual void ReducerEvent(const FReducerEvent& Event) override; + + // Override the reducer event failed handler + virtual void ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) override; + // Override the procedure event failed handler + virtual void ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) override; + + friend class USubscriptionBuilder; + friend class UDbConnectionBuilder; + friend class URemoteReducers; + + // Internal reducer correlation helpers (request_id -> typed reducer) + void RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer); + bool TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const; + bool TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer); + +private: + TMap PendingTypedReducers; +}; + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/AllViewPkPlayersTable.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/AllViewPkPlayersTable.g.h new file mode 100644 index 00000000000..0a0879db4e1 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/AllViewPkPlayersTable.g.h @@ -0,0 +1,64 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/ViewPkPlayerType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "AllViewPkPlayersTable.g.generated.h" + +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UAllViewPkPlayersTable : public URemoteTable +{ + GENERATED_BODY() + +public: + void PostInitialize(); + + /** Update function for all_view_pk_players table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnAllViewPkPlayersInsert, + const FEventContext&, Context, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnAllViewPkPlayersUpdate, + const FEventContext&, Context, + const FViewPkPlayerType&, OldRow, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnAllViewPkPlayersDelete, + const FEventContext&, Context, + const FViewPkPlayerType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnAllViewPkPlayersInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnAllViewPkPlayersUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnAllViewPkPlayersDelete OnDelete; + +private: + const FString TableName = TEXT("all_view_pk_players"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/SenderViewPkPlayersATable.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/SenderViewPkPlayersATable.g.h new file mode 100644 index 00000000000..b0ee3b0a181 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/SenderViewPkPlayersATable.g.h @@ -0,0 +1,64 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/ViewPkPlayerType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "SenderViewPkPlayersATable.g.generated.h" + +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API USenderViewPkPlayersATable : public URemoteTable +{ + GENERATED_BODY() + +public: + void PostInitialize(); + + /** Update function for sender_view_pk_players_a table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnSenderViewPkPlayersAInsert, + const FEventContext&, Context, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnSenderViewPkPlayersAUpdate, + const FEventContext&, Context, + const FViewPkPlayerType&, OldRow, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnSenderViewPkPlayersADelete, + const FEventContext&, Context, + const FViewPkPlayerType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnSenderViewPkPlayersAInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnSenderViewPkPlayersAUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnSenderViewPkPlayersADelete OnDelete; + +private: + const FString TableName = TEXT("sender_view_pk_players_a"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/SenderViewPkPlayersBTable.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/SenderViewPkPlayersBTable.g.h new file mode 100644 index 00000000000..c47ab25f1a3 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/SenderViewPkPlayersBTable.g.h @@ -0,0 +1,64 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/ViewPkPlayerType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "SenderViewPkPlayersBTable.g.generated.h" + +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API USenderViewPkPlayersBTable : public URemoteTable +{ + GENERATED_BODY() + +public: + void PostInitialize(); + + /** Update function for sender_view_pk_players_b table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnSenderViewPkPlayersBInsert, + const FEventContext&, Context, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnSenderViewPkPlayersBUpdate, + const FEventContext&, Context, + const FViewPkPlayerType&, OldRow, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnSenderViewPkPlayersBDelete, + const FEventContext&, Context, + const FViewPkPlayerType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnSenderViewPkPlayersBInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnSenderViewPkPlayersBUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnSenderViewPkPlayersBDelete OnDelete; + +private: + const FString TableName = TEXT("sender_view_pk_players_b"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.h new file mode 100644 index 00000000000..017c4f7d462 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkMembershipSecondaryTable.g.h @@ -0,0 +1,141 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/ViewPkMembershipSecondaryType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "ViewPkMembershipSecondaryTable.g.generated.h" + +UCLASS(Blueprintable) +class TESTVIEWPKCLIENT_API UViewPkMembershipSecondaryIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> IdIndexHelper; + +public: + UViewPkMembershipSecondaryIdUniqueIndex() + // Initialize the helper with the specific unique index name + : IdIndexHelper("id") { + } + + /** + * Finds a ViewPkMembershipSecondary by their unique id. + * @param Key The id to search for. + * @return The found FViewPkMembershipSecondaryType, or a default-constructed FViewPkMembershipSecondaryType if not found. + */ + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FViewPkMembershipSecondaryType Find(uint64 Key) + { + // Simply delegate the call to the internal helper + return IdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InViewPkMembershipSecondaryCache) + { + IdIndexHelper.Cache = InViewPkMembershipSecondaryCache; + } +}; +/***/ + +UCLASS(Blueprintable) +class UViewPkMembershipSecondaryPlayerIdIndex : public UObject +{ + GENERATED_BODY() + +public: + TArray Filter(const uint64& PlayerId) const + { + TArray OutResults; + + LocalCache->FindByMultiKeyBTreeIndex>( + OutResults, + TEXT("player_id"), + MakeTuple(PlayerId) + ); + + return OutResults; + } + + void SetCache(TSharedPtr> InCache) + { + LocalCache = InCache; + } + +private: + // NOTE: Not exposed to Blueprint because some parameter types are not Blueprint-compatible + void FilterPlayerId(TArray& OutResults, const uint64& PlayerId) + { + OutResults = Filter(PlayerId); + } + + TSharedPtr> LocalCache; +}; + +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UViewPkMembershipSecondaryTable : public URemoteTable +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly) + UViewPkMembershipSecondaryIdUniqueIndex* Id; + + UPROPERTY(BlueprintReadOnly) + UViewPkMembershipSecondaryPlayerIdIndex* PlayerId; + + void PostInitialize(); + + /** Update function for view_pk_membership_secondary table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnViewPkMembershipSecondaryInsert, + const FEventContext&, Context, + const FViewPkMembershipSecondaryType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnViewPkMembershipSecondaryUpdate, + const FEventContext&, Context, + const FViewPkMembershipSecondaryType&, OldRow, + const FViewPkMembershipSecondaryType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnViewPkMembershipSecondaryDelete, + const FEventContext&, Context, + const FViewPkMembershipSecondaryType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkMembershipSecondaryInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkMembershipSecondaryUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkMembershipSecondaryDelete OnDelete; + +private: + const FString TableName = TEXT("view_pk_membership_secondary"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkMembershipTable.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkMembershipTable.g.h new file mode 100644 index 00000000000..bcb477f4801 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkMembershipTable.g.h @@ -0,0 +1,141 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/ViewPkMembershipType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "ViewPkMembershipTable.g.generated.h" + +UCLASS(Blueprintable) +class TESTVIEWPKCLIENT_API UViewPkMembershipIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> IdIndexHelper; + +public: + UViewPkMembershipIdUniqueIndex() + // Initialize the helper with the specific unique index name + : IdIndexHelper("id") { + } + + /** + * Finds a ViewPkMembership by their unique id. + * @param Key The id to search for. + * @return The found FViewPkMembershipType, or a default-constructed FViewPkMembershipType if not found. + */ + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FViewPkMembershipType Find(uint64 Key) + { + // Simply delegate the call to the internal helper + return IdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InViewPkMembershipCache) + { + IdIndexHelper.Cache = InViewPkMembershipCache; + } +}; +/***/ + +UCLASS(Blueprintable) +class UViewPkMembershipPlayerIdIndex : public UObject +{ + GENERATED_BODY() + +public: + TArray Filter(const uint64& PlayerId) const + { + TArray OutResults; + + LocalCache->FindByMultiKeyBTreeIndex>( + OutResults, + TEXT("player_id"), + MakeTuple(PlayerId) + ); + + return OutResults; + } + + void SetCache(TSharedPtr> InCache) + { + LocalCache = InCache; + } + +private: + // NOTE: Not exposed to Blueprint because some parameter types are not Blueprint-compatible + void FilterPlayerId(TArray& OutResults, const uint64& PlayerId) + { + OutResults = Filter(PlayerId); + } + + TSharedPtr> LocalCache; +}; + +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UViewPkMembershipTable : public URemoteTable +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly) + UViewPkMembershipIdUniqueIndex* Id; + + UPROPERTY(BlueprintReadOnly) + UViewPkMembershipPlayerIdIndex* PlayerId; + + void PostInitialize(); + + /** Update function for view_pk_membership table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnViewPkMembershipInsert, + const FEventContext&, Context, + const FViewPkMembershipType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnViewPkMembershipUpdate, + const FEventContext&, Context, + const FViewPkMembershipType&, OldRow, + const FViewPkMembershipType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnViewPkMembershipDelete, + const FEventContext&, Context, + const FViewPkMembershipType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkMembershipInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkMembershipUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkMembershipDelete OnDelete; + +private: + const FString TableName = TEXT("view_pk_membership"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkPlayerTable.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkPlayerTable.g.h new file mode 100644 index 00000000000..380246018c2 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Tables/ViewPkPlayerTable.g.h @@ -0,0 +1,104 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "ModuleBindings/Types/ViewPkPlayerType.g.h" +#include "Tables/RemoteTable.h" +#include "DBCache/WithBsatn.h" +#include "DBCache/TableHandle.h" +#include "DBCache/TableCache.h" +#include "ViewPkPlayerTable.g.generated.h" + +UCLASS(Blueprintable) +class TESTVIEWPKCLIENT_API UViewPkPlayerIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> IdIndexHelper; + +public: + UViewPkPlayerIdUniqueIndex() + // Initialize the helper with the specific unique index name + : IdIndexHelper("id") { + } + + /** + * Finds a ViewPkPlayer by their unique id. + * @param Key The id to search for. + * @return The found FViewPkPlayerType, or a default-constructed FViewPkPlayerType if not found. + */ + // NOTE: Not exposed to Blueprint because uint64 types are not Blueprint-compatible + FViewPkPlayerType Find(uint64 Key) + { + // Simply delegate the call to the internal helper + return IdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InViewPkPlayerCache) + { + IdIndexHelper.Cache = InViewPkPlayerCache; + } +}; +/***/ + +UCLASS(BlueprintType) +class TESTVIEWPKCLIENT_API UViewPkPlayerTable : public URemoteTable +{ + GENERATED_BODY() + +public: + UPROPERTY(BlueprintReadOnly) + UViewPkPlayerIdUniqueIndex* Id; + + void PostInitialize(); + + /** Update function for view_pk_player table*/ + FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); + + /** Number of subscribed rows currently in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + int32 Count() const; + + /** Return all subscribed rows in the cache */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") + TArray Iter() const; + + // Table Events + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnViewPkPlayerInsert, + const FEventContext&, Context, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( + FOnViewPkPlayerUpdate, + const FEventContext&, Context, + const FViewPkPlayerType&, OldRow, + const FViewPkPlayerType&, NewRow); + + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FOnViewPkPlayerDelete, + const FEventContext&, Context, + const FViewPkPlayerType&, DeletedRow); + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkPlayerInsert OnInsert; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkPlayerUpdate OnUpdate; + + UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") + FOnViewPkPlayerDelete OnDelete; + +private: + const FString TableName = TEXT("view_pk_player"); + + TSharedPtr> Data; +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkMembershipSecondaryType.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkMembershipSecondaryType.g.h new file mode 100644 index 00000000000..aa50b8d2b77 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkMembershipSecondaryType.g.h @@ -0,0 +1,49 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ViewPkMembershipSecondaryType.g.generated.h" + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FViewPkMembershipSecondaryType +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 PlayerId = 0; + + FORCEINLINE bool operator==(const FViewPkMembershipSecondaryType& Other) const + { + return Id == Other.Id && PlayerId == Other.PlayerId; + } + + FORCEINLINE bool operator!=(const FViewPkMembershipSecondaryType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FViewPkMembershipSecondaryType. + * Combines the hashes of all fields that are compared in operator==. + * @param ViewPkMembershipSecondaryType The FViewPkMembershipSecondaryType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FViewPkMembershipSecondaryType& ViewPkMembershipSecondaryType) +{ + uint32 Hash = GetTypeHash(ViewPkMembershipSecondaryType.Id); + Hash = HashCombine(Hash, GetTypeHash(ViewPkMembershipSecondaryType.PlayerId)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FViewPkMembershipSecondaryType); + + UE_SPACETIMEDB_STRUCT(FViewPkMembershipSecondaryType, Id, PlayerId); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkMembershipType.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkMembershipType.g.h new file mode 100644 index 00000000000..77842753aab --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkMembershipType.g.h @@ -0,0 +1,49 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ViewPkMembershipType.g.generated.h" + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FViewPkMembershipType +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 PlayerId = 0; + + FORCEINLINE bool operator==(const FViewPkMembershipType& Other) const + { + return Id == Other.Id && PlayerId == Other.PlayerId; + } + + FORCEINLINE bool operator!=(const FViewPkMembershipType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FViewPkMembershipType. + * Combines the hashes of all fields that are compared in operator==. + * @param ViewPkMembershipType The FViewPkMembershipType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FViewPkMembershipType& ViewPkMembershipType) +{ + uint32 Hash = GetTypeHash(ViewPkMembershipType.Id); + Hash = HashCombine(Hash, GetTypeHash(ViewPkMembershipType.PlayerId)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FViewPkMembershipType); + + UE_SPACETIMEDB_STRUCT(FViewPkMembershipType, Id, PlayerId); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkPlayerType.g.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkPlayerType.g.h new file mode 100644 index 00000000000..afb955b37ef --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/ModuleBindings/Types/ViewPkPlayerType.g.h @@ -0,0 +1,49 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ViewPkPlayerType.g.generated.h" + +USTRUCT(BlueprintType) +struct TESTVIEWPKCLIENT_API FViewPkPlayerType +{ + GENERATED_BODY() + + // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements + uint64 Id = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FString Name; + + FORCEINLINE bool operator==(const FViewPkPlayerType& Other) const + { + return Id == Other.Id && Name == Other.Name; + } + + FORCEINLINE bool operator!=(const FViewPkPlayerType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FViewPkPlayerType. + * Combines the hashes of all fields that are compared in operator==. + * @param ViewPkPlayerType The FViewPkPlayerType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FViewPkPlayerType& ViewPkPlayerType) +{ + uint32 Hash = GetTypeHash(ViewPkPlayerType.Id); + Hash = HashCombine(Hash, GetTypeHash(ViewPkPlayerType.Name)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FViewPkPlayerType); + + UE_SPACETIMEDB_STRUCT(FViewPkPlayerType, Id, Name); +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/CommonTestFunctions.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/CommonTestFunctions.h new file mode 100644 index 00000000000..b0e2c2666e6 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/CommonTestFunctions.h @@ -0,0 +1,74 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Misc/AutomationTest.h" +#include "Tests/TestCounter.h" + +#include "Connection/Callback.h" +#include "Connection/Credentials.h" +#include "ModuleBindings/SpacetimeDBClient.g.h" + +#include "CommonTestFunctions.generated.h" + +#define TESTLOG_SUCCESS(Test, Format, ...) \ + do \ + { \ + const FString UserMessage = FString::Printf(Format, ##__VA_ARGS__); \ + const FString LogMessage = FString::Printf(TEXT(" + %s"), *UserMessage); \ + UE_LOG(LogTemp, Log, TEXT("%s"), *LogMessage); \ + Test.AddInfo(LogMessage); \ + } while (false) + +#define TESTLOG_FAIL(Test, Format, ...) \ + do \ + { \ + const FString UserMessage = FString::Printf(Format, ##__VA_ARGS__); \ + const FString LogMessage = FString::Printf(TEXT(" x %s"), *UserMessage); \ + UE_LOG(LogTemp, Error, TEXT("%s"), *LogMessage); \ + Test.AddError(LogMessage); \ + } while (false) + +UCLASS() +class TESTVIEWPKCLIENT_API UTestHelperDelegates : public UObject +{ + GENERATED_BODY() + +public: + TFunction OnConnect; + UFUNCTION() + void HandleConnect(UDbConnection* Conn, FSpacetimeDBIdentity Identity, const FString& Token); + + TFunction OnConnectError; + UFUNCTION() + void HandleConnectError(UDbConnection* Conn, const FString& Error); + + TFunction OnDisconnect; + UFUNCTION() + void HandleDisconnect(UDbConnection* Conn, const FString& Error); + + TFunction OnSubscriptionApplied; + UFUNCTION() + void HandleSubscriptionApplied(FSubscriptionEventContext Ctx); + + TFunction OnSubscriptionError; + UFUNCTION() + void HandleSubscriptionError(FErrorContext Ctx); +}; + +UDbConnection* ConnectThen( + TSharedPtr Counter, + const FString& TestName, + TFunction Callback); + +bool GetDbName(FString& DBName, FString& Error); +bool ValidateParameterConfig(FAutomationTestBase* Test); +bool ReportTestResult(FAutomationTestBase& Test, const FString& TestName, TSharedPtr Counter, bool bTimedOut); + +template +T* CreateTestHandler() +{ + T* Handler = NewObject(GetTransientPackage()); + Handler->AddToRoot(); + Handler->Counter = MakeShared(); + return Handler; +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/PrimitiveHandlerList.def b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/PrimitiveHandlerList.def new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/PrimitiveHandlerList.def @@ -0,0 +1 @@ + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/SpacetimeFullClientTests.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/SpacetimeFullClientTests.h new file mode 100644 index 00000000000..c957be034b4 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/SpacetimeFullClientTests.h @@ -0,0 +1,35 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Misc/AutomationTest.h" +#include "Tests/TestHandler.h" + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewPkQueryBuilderDirectSourcesTest, + "SpacetimeDB.TestViewPkClient.ViewPkQueryBuilderDirectSourcesTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewPkQueryBuilderSemijoinTest, + "SpacetimeDB.TestViewPkClient.ViewPkQueryBuilderSemijoinTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewPkSubscribeAllTablesTest, + "SpacetimeDB.TestViewPkClient.ViewPkSubscribeAllTablesTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewPkRuntimeUpdatePairingTest, + "SpacetimeDB.TestViewPkClient.ViewPkRuntimeUpdatePairingTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FViewPkBlueprintQueryBuilderFlowTest, + "SpacetimeDB.TestViewPkClient.ViewPkBlueprintQueryBuilderFlowTest", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/TestCounter.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/TestCounter.h new file mode 100644 index 00000000000..35b52debcb5 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/TestCounter.h @@ -0,0 +1,35 @@ +#pragma once + +#include "CoreMinimal.h" +#include "HAL/CriticalSection.h" + +struct FTestOutcome +{ + bool bSuccess = false; + FString Error; +}; + +class FTestCounter : public TSharedFromThis +{ +public: + FTestCounter() = default; + + void Register(const FString& TestName); + void MarkSuccess(const FString& TestName); + void MarkFailure(const FString& TestName, const FString& Error); + + bool IsComplete() const; + bool AllSucceeded() const; + TArray GetFailures() const; + TArray GetSuccesses() const; + + void Abort(); + bool IsAborted() const { return bAborted; } + + +private: + mutable FCriticalSection Mutex; + TMap Outcomes; + TSet Registered; + bool bAborted = false; +}; \ No newline at end of file diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/TestHandler.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/TestHandler.h new file mode 100644 index 00000000000..cf36e740c98 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/TestHandler.h @@ -0,0 +1,47 @@ +#pragma once + +#include "CoreMinimal.h" +#include "UObject/Object.h" + +#include "ModuleBindings/SpacetimeDBClient.g.h" +#include "Tests/TestCounter.h" + +#include "TestHandler.generated.h" + +UCLASS() +class TESTVIEWPKCLIENT_API UTestHandler : public UObject +{ + GENERATED_BODY() + +public: + TSharedPtr Counter; +}; + +UCLASS() +class TESTVIEWPKCLIENT_API UViewPkRuntimeHandler : public UTestHandler +{ + GENERATED_BODY() + +public: + uint64 ExpectedId = 1; + FString InitialName = TEXT("before"); + FString UpdatedName = TEXT("after"); + + UFUNCTION() + void OnAllViewPkPlayersInsert(const FEventContext& Context, const FViewPkPlayerType& Value); + + UFUNCTION() + void OnAllViewPkPlayersUpdate(const FEventContext& Context, const FViewPkPlayerType& OldValue, const FViewPkPlayerType& NewValue); + + UFUNCTION() + void OnAllViewPkPlayersDelete(const FEventContext& Context, const FViewPkPlayerType& Value); + + UFUNCTION() + void OnSenderViewPkPlayersAInsert(const FEventContext& Context, const FViewPkPlayerType& Value); + + UFUNCTION() + void OnSenderViewPkPlayersAUpdate(const FEventContext& Context, const FViewPkPlayerType& OldValue, const FViewPkPlayerType& NewValue); + + UFUNCTION() + void OnSenderViewPkPlayersADelete(const FEventContext& Context, const FViewPkPlayerType& Value); +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderReducers.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderReducers.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderReducers.h @@ -0,0 +1 @@ +#pragma once diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderTypes.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderTypes.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderTypes.h @@ -0,0 +1 @@ +#pragma once diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderaTables.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderaTables.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/Public/Tests/UmbreallaHeaderaTables.h @@ -0,0 +1 @@ +#pragma once diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.Build.cs b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.Build.cs new file mode 100644 index 00000000000..3567944f689 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.Build.cs @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; + +public class TestViewPkClient : ModuleRules +{ + public TestViewPkClient(ReadOnlyTargetRules Target) : base(Target) + { + // Set the module type to be a standard module + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + // Set the module to use C++20 standard + CppStandard = CppStandardVersion.Cpp20; + + + // Enable exceptions for this module + bEnableExceptions = true; + + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "SpacetimeDbSdk" }); + + PrivateDependencyModuleNames.AddRange(new string[] { "DeveloperSettings" }); + + } +} diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.cpp new file mode 100644 index 00000000000..7d8a2ef715d --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.cpp @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "TestViewPkClient.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, TestViewPkClient, "TestViewPkClient"); diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.h new file mode 100644 index 00000000000..90aad9e7e22 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClient.h @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClientGameModeBase.cpp b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClientGameModeBase.cpp new file mode 100644 index 00000000000..674d6a37ebb --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClientGameModeBase.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "TestViewPkClientGameModeBase.h" + diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClientGameModeBase.h b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClientGameModeBase.h new file mode 100644 index 00000000000..f041de9c976 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClient/TestViewPkClientGameModeBase.h @@ -0,0 +1,17 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameModeBase.h" +#include "TestViewPkClientGameModeBase.generated.h" + +/** + * + */ +UCLASS() +class TESTVIEWPKCLIENT_API ATestViewPkClientGameModeBase : public AGameModeBase +{ + GENERATED_BODY() + +}; diff --git a/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClientEditor.Target.cs b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClientEditor.Target.cs new file mode 100644 index 00000000000..b8438c36e51 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/Source/TestViewPkClientEditor.Target.cs @@ -0,0 +1,15 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class TestViewPkClientEditorTarget : TargetRules +{ + public TestViewPkClientEditorTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + DefaultBuildSettings = BuildSettingsVersion.V5; + + ExtraModuleNames.AddRange( new string[] { "TestViewPkClient" } ); + } +} diff --git a/sdks/unreal/tests/TestViewPkClient/TestViewPkClient.uproject b/sdks/unreal/tests/TestViewPkClient/TestViewPkClient.uproject new file mode 100644 index 00000000000..f9be1f0cca1 --- /dev/null +++ b/sdks/unreal/tests/TestViewPkClient/TestViewPkClient.uproject @@ -0,0 +1,25 @@ +{ + "FileVersion": 3, + "EngineAssociation": "5.6", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "TestViewPkClient", + "Type": "Runtime", + "LoadingPhase": "Default" + } + ], + "Plugins": [ + { + "Name": "ModelingToolsEditorMode", + "Enabled": true, + "TargetAllowList": [ + "Editor" + ] + } + ], + "AdditionalPluginDirectories": [ + "../../src" + ] +} diff --git a/sdks/unreal/tests/test.rs b/sdks/unreal/tests/test.rs index 2700f10ec14..b92696b01b2 100644 --- a/sdks/unreal/tests/test.rs +++ b/sdks/unreal/tests/test.rs @@ -309,3 +309,9 @@ fn unreal_overlapping_subscriptions() { fn unreal_insert_result_okay() { make_test("InsertResultOkTest").run(); } + +#[test] +#[serial(Group6)] +fn unreal_blueprint_query_builder_basic_flow() { + make_test("BlueprintQueryBuilderBasicFlowTest").run(); +} diff --git a/sdks/unreal/tests/test_view.rs b/sdks/unreal/tests/test_view.rs new file mode 100644 index 00000000000..5df4d2d4dab --- /dev/null +++ b/sdks/unreal/tests/test_view.rs @@ -0,0 +1,40 @@ +mod sdk_unreal_harness; +use sdk_unreal_harness::{make_test_with_suite, TestSuite}; + +use serial_test::serial; +use std::env; + +const SDK_TEST_SUITE: TestSuite = TestSuite { + module: "sdk-test-view", + client_root: concat!(env!("CARGO_MANIFEST_DIR"), "/tests/TestViewClient"), + unreal_module: "TestViewClient", + uproject_file: "TestViewClient.uproject", +}; + +fn make_test(test_name: &str) -> spacetimedb_testing::sdk::Test { + make_test_with_suite(&SDK_TEST_SUITE, test_name) +} + +#[test] +#[serial(ViewGroup)] +fn unreal_view_query_builder_direct_sources() { + make_test("ViewQueryBuilderDirectSourcesTest").run(); +} + +#[test] +#[serial(ViewGroup)] +fn unreal_view_subscribe_all_tables() { + make_test("ViewSubscribeAllTablesTest").run(); +} + +#[test] +#[serial(ViewGroup)] +fn unreal_view_blueprint_query_builder_flow() { + make_test("ViewBlueprintQueryBuilderFlowTest").run(); +} + +#[test] +#[serial(ViewGroup)] +fn unreal_view_blueprint_query_builder_runtime() { + make_test("ViewBlueprintQueryBuilderRuntimeTest").run(); +} diff --git a/sdks/unreal/tests/test_view_pk.rs b/sdks/unreal/tests/test_view_pk.rs new file mode 100644 index 00000000000..5a78abcb7d1 --- /dev/null +++ b/sdks/unreal/tests/test_view_pk.rs @@ -0,0 +1,46 @@ +mod sdk_unreal_harness; +use sdk_unreal_harness::{make_test_with_suite, TestSuite}; + +use serial_test::serial; +use std::env; + +const SDK_TEST_SUITE: TestSuite = TestSuite { + module: "sdk-test-view-pk", + client_root: concat!(env!("CARGO_MANIFEST_DIR"), "/tests/TestViewPkClient"), + unreal_module: "TestViewPkClient", + uproject_file: "TestViewPkClient.uproject", +}; + +fn make_test(test_name: &str) -> spacetimedb_testing::sdk::Test { + make_test_with_suite(&SDK_TEST_SUITE, test_name) +} + +#[test] +#[serial(ViewPkGroup)] +fn unreal_view_pk_query_builder_direct_sources() { + make_test("ViewPkQueryBuilderDirectSourcesTest").run(); +} + +#[test] +#[serial(ViewPkGroup)] +fn unreal_view_pk_query_builder_semijoin() { + make_test("ViewPkQueryBuilderSemijoinTest").run(); +} + +#[test] +#[serial(ViewPkGroup)] +fn unreal_view_pk_subscribe_all_tables() { + make_test("ViewPkSubscribeAllTablesTest").run(); +} + +#[test] +#[serial(ViewPkGroup)] +fn unreal_view_pk_runtime_update_pairing() { + make_test("ViewPkRuntimeUpdatePairingTest").run(); +} + +#[test] +#[serial(ViewPkGroup)] +fn unreal_view_pk_blueprint_query_builder_flow() { + make_test("ViewPkBlueprintQueryBuilderFlowTest").run(); +}