From 95c4395c11e7132487f730dfca1df2cc5664b765 Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Thu, 5 Dec 2024 13:39:03 -0600 Subject: [PATCH] Resolve Prolonged Type Checking (#1338) Co-authored-by: chickdan <=> --- .../StoredValue/StoredValue.swift | 6 +++++- Shared/SwiftfinStore/V2Schema/V2AnyData.swift | 18 +++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Shared/SwiftfinStore/StoredValue/StoredValue.swift b/Shared/SwiftfinStore/StoredValue/StoredValue.swift index 364c8da0..5438c7ee 100644 --- a/Shared/SwiftfinStore/StoredValue/StoredValue.swift +++ b/Shared/SwiftfinStore/StoredValue/StoredValue.swift @@ -94,8 +94,12 @@ extension StoredValue { let domain = key.domain ?? "none" + let ownerFilter: Where = Where(\.$ownerID == key.ownerID) + let keyFilter: Where = Where(\.$key == key.name) + let domainFilter: Where = Where(\.$domain == domain) + let clause = From() - .where(\.$ownerID == key.ownerID && \.$key == key.name && \.$domain == domain) + .where(ownerFilter && keyFilter && domainFilter) if let values = try? SwiftfinStore.dataStack.fetchAll(clause), let first = values.first { let publisher = first.asPublisher(in: SwiftfinStore.dataStack) diff --git a/Shared/SwiftfinStore/V2Schema/V2AnyData.swift b/Shared/SwiftfinStore/V2Schema/V2AnyData.swift index 6a70e936..c31142f0 100644 --- a/Shared/SwiftfinStore/V2Schema/V2AnyData.swift +++ b/Shared/SwiftfinStore/V2Schema/V2AnyData.swift @@ -56,8 +56,12 @@ extension AnyStoredData { let domain = domain ?? "none" + let ownerFilter: Where = Where(\.$ownerID == ownerID) + let keyFilter: Where = Where(\.$key == key) + let domainFilter: Where = Where(\.$domain == domain) + let clause = From() - .where(\.$ownerID == ownerID && \.$key == key && \.$domain == domain) + .where(ownerFilter && keyFilter && domainFilter) let values = try SwiftfinStore.dataStack .fetchAll( @@ -78,8 +82,12 @@ extension AnyStoredData { let domain = domain ?? "none" + let ownerFilter: Where = Where(\.$ownerID == ownerID) + let keyFilter: Where = Where(\.$key == key) + let domainFilter: Where = Where(\.$domain == domain) + let clause = From() - .where(\.$ownerID == ownerID && \.$key == key && \.$domain == domain) + .where(ownerFilter && keyFilter && domainFilter) try SwiftfinStore.dataStack.perform { transaction in let existing = try transaction.fetchAll(clause) @@ -124,8 +132,12 @@ extension AnyStoredData { static func fetchClause(key: String, ownerID: String, domain: String? = nil) throws -> FetchChainBuilder { let domain = domain ?? "none" + let ownerFilter: Where = Where(\.$ownerID == ownerID) + let keyFilter: Where = Where(\.$key == key) + let domainFilter: Where = Where(\.$domain == domain) + return From() - .where(\.$ownerID == ownerID && \.$key == key && \.$domain == domain) + .where(ownerFilter && keyFilter && domainFilter) } /// Delete all data with the given `ownerID`