mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-29 05:31:53 +02:00
changed protocol naming
This commit is contained in:
@@ -287,7 +287,7 @@ extension BaseDataTransaction: FetchableSource, QueryableSource {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
public func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
|
||||
CoreStore.assert(
|
||||
self.isRunningInAllowedQueue(),
|
||||
@@ -306,7 +306,7 @@ extension BaseDataTransaction: FetchableSource, QueryableSource {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
public func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
|
||||
CoreStore.assert(
|
||||
self.isRunningInAllowedQueue(),
|
||||
|
||||
@@ -36,19 +36,6 @@ import CoreData
|
||||
public protocol SelectResultType {}
|
||||
|
||||
|
||||
// MARK: - SelectValueResultType
|
||||
|
||||
/**
|
||||
The `SelectValueResultType` protocol is implemented by return types supported by the `queryValue(...)` methods.
|
||||
*/
|
||||
public protocol SelectValueResultType: SelectResultType {
|
||||
|
||||
static var cs_rawAttributeType: NSAttributeType { get }
|
||||
|
||||
static func cs_fromQueryResultNativeType(_ value: Any) -> Self?
|
||||
}
|
||||
|
||||
|
||||
// MARK: - SelectAttributesResultType
|
||||
|
||||
/**
|
||||
@@ -395,193 +382,6 @@ public extension Select where T: NSManagedObjectID {
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSManagedObjectID: SelectValueResultType
|
||||
|
||||
extension NSManagedObjectID: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Self? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSNumber: SelectValueResultType
|
||||
|
||||
extension NSNumber: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Self? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSString: SelectValueResultType
|
||||
|
||||
extension NSString: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Self? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSDate: SelectValueResultType
|
||||
|
||||
extension NSDate: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Self? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSData: SelectValueResultType
|
||||
|
||||
extension NSData: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Self? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Bool: SelectValueResultType
|
||||
|
||||
extension Bool: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Bool? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int8: SelectValueResultType
|
||||
|
||||
extension Int8: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Int8? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int16: SelectValueResultType
|
||||
|
||||
extension Int16: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Int16? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int32: SelectValueResultType
|
||||
|
||||
extension Int32: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Int32? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int64: SelectValueResultType
|
||||
|
||||
extension Int64: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Int64? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int: SelectValueResultType
|
||||
|
||||
extension Int: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Int? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Double: SelectValueResultType
|
||||
|
||||
extension Double: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Double? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Float: SelectValueResultType
|
||||
|
||||
extension Float: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Float? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - CGFloat: SelectValueResultType
|
||||
|
||||
extension CGFloat: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> CGFloat? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Date: SelectValueResultType
|
||||
|
||||
extension Date: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Date? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - String: SelectValueResultType
|
||||
|
||||
extension String: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> String? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Data: SelectValueResultType
|
||||
|
||||
extension Data: SelectValueResultType {
|
||||
|
||||
public static func cs_fromQueryResultNativeType(_ value: Any) -> Data? {
|
||||
|
||||
return (value as? QueryableNativeType).flatMap(self.cs_fromQueryableNativeType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSDictionary: SelectAttributesResultType
|
||||
|
||||
extension NSDictionary: SelectAttributesResultType {
|
||||
|
||||
@@ -120,7 +120,7 @@ public struct Where: FetchClause, QueryClause, DeleteClause, Hashable {
|
||||
- parameter keyPath: the keyPath to compare with
|
||||
- parameter value: the arguments for the `==` operator
|
||||
*/
|
||||
public init<T: CoreStoreQueryableAttributeType>(_ keyPath: KeyPath, isEqualTo value: T?) {
|
||||
public init<T: QueryableAttributeType>(_ keyPath: KeyPath, isEqualTo value: T?) {
|
||||
|
||||
switch value {
|
||||
|
||||
@@ -139,7 +139,7 @@ public struct Where: FetchClause, QueryClause, DeleteClause, Hashable {
|
||||
- parameter keyPath: the keyPath to compare with
|
||||
- parameter list: the sequence to check membership of
|
||||
*/
|
||||
public init<S: Sequence>(_ keyPath: KeyPath, isMemberOf list: S) where S.Iterator.Element: CoreStoreQueryableAttributeType {
|
||||
public init<S: Sequence>(_ keyPath: KeyPath, isMemberOf list: S) where S.Iterator.Element: QueryableAttributeType {
|
||||
|
||||
self.init(NSPredicate(format: "\(keyPath) IN %@", list.map({ $0.cs_toQueryableNativeType() }) as NSArray))
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ public extension CoreStore {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
public static func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
public static func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
|
||||
return self.defaultStack.queryValue(from, selectClause, queryClauses)
|
||||
}
|
||||
@@ -220,7 +220,7 @@ public extension CoreStore {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
public static func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
public static func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
|
||||
return self.defaultStack.queryValue(from, selectClause, queryClauses)
|
||||
}
|
||||
|
||||
@@ -250,7 +250,7 @@ extension DataStack: FetchableSource, QueryableSource {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
public func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
|
||||
CoreStore.assert(
|
||||
Thread.isMainThread,
|
||||
@@ -269,7 +269,7 @@ extension DataStack: FetchableSource, QueryableSource {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
public func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
|
||||
CoreStore.assert(
|
||||
Thread.isMainThread,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// CoreStoreQueryableAttributeType.swift
|
||||
// QueryableAttributeType.swift
|
||||
// CoreStore
|
||||
//
|
||||
// Copyright © 2017 John Rommel Estropia
|
||||
@@ -28,9 +28,9 @@ import CoreGraphics
|
||||
import CoreData
|
||||
|
||||
|
||||
// MARK: - CoreStoreQueryableAttributeType
|
||||
// MARK: - QueryableAttributeType
|
||||
|
||||
public protocol CoreStoreQueryableAttributeType: Hashable {
|
||||
public protocol QueryableAttributeType: Hashable, SelectResultType {
|
||||
|
||||
associatedtype QueryableNativeType: CoreDataNativeType
|
||||
|
||||
@@ -44,25 +44,9 @@ public protocol CoreStoreQueryableAttributeType: Hashable {
|
||||
}
|
||||
|
||||
|
||||
//// MARK: - NSManagedObject
|
||||
//
|
||||
//extension NSManagedObject: CoreStoreQueryableAttributeType {
|
||||
//
|
||||
// public typealias QueryableNativeType = NSManagedObjectID
|
||||
//
|
||||
// public static let cs_rawAttributeType: NSAttributeType = .objectIDAttributeType
|
||||
//
|
||||
// @inline(__always)
|
||||
// public func cs_toQueryableNativeType() -> QueryableNativeType {
|
||||
//
|
||||
// return self.objectID
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
// MARK: - NSManagedObjectID
|
||||
|
||||
extension NSManagedObjectID: CoreStoreQueryableAttributeType {
|
||||
extension NSManagedObjectID: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSManagedObjectID
|
||||
|
||||
@@ -78,7 +62,7 @@ extension NSManagedObjectID: CoreStoreQueryableAttributeType {
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toQueryableNativeType() -> QueryableNativeType {
|
||||
|
||||
return self
|
||||
@@ -88,7 +72,7 @@ extension NSManagedObjectID: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - NSNumber
|
||||
|
||||
extension NSNumber: CoreStoreQueryableAttributeType {
|
||||
extension NSNumber: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -107,6 +91,7 @@ extension NSNumber: CoreStoreQueryableAttributeType {
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toQueryableNativeType() -> QueryableNativeType {
|
||||
|
||||
return self
|
||||
@@ -116,7 +101,7 @@ extension NSNumber: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - NSNumber
|
||||
|
||||
extension NSDecimalNumber /*: CoreStoreQueryableAttributeType */ {
|
||||
extension NSDecimalNumber /*: QueryableAttributeType */ {
|
||||
|
||||
public override class var cs_rawAttributeType: NSAttributeType {
|
||||
|
||||
@@ -127,7 +112,7 @@ extension NSDecimalNumber /*: CoreStoreQueryableAttributeType */ {
|
||||
|
||||
// MARK: - NSString
|
||||
|
||||
extension NSString: CoreStoreQueryableAttributeType {
|
||||
extension NSString: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSString
|
||||
|
||||
@@ -143,7 +128,7 @@ extension NSString: CoreStoreQueryableAttributeType {
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toQueryableNativeType() -> QueryableNativeType {
|
||||
|
||||
return self
|
||||
@@ -153,7 +138,7 @@ extension NSString: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - NSDate
|
||||
|
||||
extension NSDate: CoreStoreQueryableAttributeType {
|
||||
extension NSDate: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSDate
|
||||
|
||||
@@ -169,7 +154,7 @@ extension NSDate: CoreStoreQueryableAttributeType {
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toQueryableNativeType() -> QueryableNativeType {
|
||||
|
||||
return self
|
||||
@@ -179,7 +164,7 @@ extension NSDate: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - NSData
|
||||
|
||||
extension NSData: CoreStoreQueryableAttributeType {
|
||||
extension NSData: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSData
|
||||
|
||||
@@ -195,7 +180,7 @@ extension NSData: CoreStoreQueryableAttributeType {
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toQueryableNativeType() -> QueryableNativeType {
|
||||
|
||||
return self
|
||||
@@ -205,7 +190,7 @@ extension NSData: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Bool
|
||||
|
||||
extension Bool: CoreStoreQueryableAttributeType {
|
||||
extension Bool: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -236,7 +221,7 @@ extension Bool: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Int8
|
||||
|
||||
extension Int8: CoreStoreQueryableAttributeType {
|
||||
extension Int8: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -258,7 +243,7 @@ extension Int8: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Int16
|
||||
|
||||
extension Int16: CoreStoreQueryableAttributeType {
|
||||
extension Int16: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -280,7 +265,7 @@ extension Int16: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Int32
|
||||
|
||||
extension Int32: CoreStoreQueryableAttributeType {
|
||||
extension Int32: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -302,7 +287,7 @@ extension Int32: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Int64
|
||||
|
||||
extension Int64: CoreStoreQueryableAttributeType {
|
||||
extension Int64: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -324,7 +309,7 @@ extension Int64: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Int
|
||||
|
||||
extension Int: CoreStoreQueryableAttributeType {
|
||||
extension Int: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -346,7 +331,7 @@ extension Int: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Double
|
||||
|
||||
extension Double: CoreStoreQueryableAttributeType {
|
||||
extension Double: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -368,7 +353,7 @@ extension Double: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Float
|
||||
|
||||
extension Float: CoreStoreQueryableAttributeType {
|
||||
extension Float: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -390,7 +375,7 @@ extension Float: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - CGFloat
|
||||
|
||||
extension CGFloat: CoreStoreQueryableAttributeType {
|
||||
extension CGFloat: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNumber
|
||||
|
||||
@@ -412,7 +397,7 @@ extension CGFloat: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Date
|
||||
|
||||
extension Date: CoreStoreQueryableAttributeType {
|
||||
extension Date: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSDate
|
||||
|
||||
@@ -434,7 +419,7 @@ extension Date: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - String
|
||||
|
||||
extension String: CoreStoreQueryableAttributeType {
|
||||
extension String: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSString
|
||||
|
||||
@@ -456,7 +441,7 @@ extension String: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - Data
|
||||
|
||||
extension Data: CoreStoreQueryableAttributeType {
|
||||
extension Data: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSData
|
||||
|
||||
@@ -478,19 +463,19 @@ extension Data: CoreStoreQueryableAttributeType {
|
||||
|
||||
// MARK: - NSNull
|
||||
|
||||
extension NSNull: CoreStoreQueryableAttributeType {
|
||||
extension NSNull: QueryableAttributeType {
|
||||
|
||||
public typealias QueryableNativeType = NSNull
|
||||
|
||||
public static let cs_rawAttributeType: NSAttributeType = .undefinedAttributeType
|
||||
|
||||
@inline(__always)
|
||||
@nonobjc @inline(__always)
|
||||
public static func cs_fromQueryableNativeType(_ value: QueryableNativeType) -> Self? {
|
||||
|
||||
return self.init()
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toQueryableNativeType() -> QueryableNativeType {
|
||||
|
||||
return self
|
||||
@@ -44,7 +44,7 @@ public protocol QueryableSource: class {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U?
|
||||
func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U?
|
||||
|
||||
/**
|
||||
Queries aggregate values as specified by the `QueryClause`s. Requires at least a `Select` clause, and optional `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
@@ -56,7 +56,7 @@ public protocol QueryableSource: class {
|
||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||
*/
|
||||
func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U?
|
||||
func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U?
|
||||
|
||||
/**
|
||||
Queries a dictionary of attribute values as specified by the `QueryClause`s. Requires at least a `Select` clause, and optional `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// CoreStoreImportableAttributeType.swift
|
||||
// ImportableAttributeType.swift
|
||||
// CoreStore
|
||||
//
|
||||
// Copyright © 2017 John Rommel Estropia
|
||||
@@ -27,9 +27,9 @@ import Foundation
|
||||
import CoreData
|
||||
|
||||
|
||||
// MARK: - CoreStoreImportableAttributeType
|
||||
// MARK: - ImportableAttributeType
|
||||
|
||||
public protocol CoreStoreImportableAttributeType: CoreStoreQueryableAttributeType {
|
||||
public protocol ImportableAttributeType: QueryableAttributeType {
|
||||
|
||||
associatedtype ImportableNativeType: QueryableNativeType
|
||||
|
||||
@@ -38,12 +38,15 @@ public protocol CoreStoreImportableAttributeType: CoreStoreQueryableAttributeTyp
|
||||
|
||||
@inline(__always)
|
||||
static func cs_fromImportableNativeType(_ value: ImportableNativeType) -> Self?
|
||||
|
||||
@inline(__always)
|
||||
func cs_toImportableNativeType() -> ImportableNativeType
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSNumber
|
||||
|
||||
extension NSNumber: CoreStoreImportableAttributeType {
|
||||
extension NSNumber: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSNumber
|
||||
|
||||
@@ -62,12 +65,18 @@ extension NSNumber: CoreStoreImportableAttributeType {
|
||||
}
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSString
|
||||
|
||||
extension NSString: CoreStoreImportableAttributeType {
|
||||
extension NSString: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSString
|
||||
|
||||
@@ -86,12 +95,18 @@ extension NSString: CoreStoreImportableAttributeType {
|
||||
}
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSDate
|
||||
|
||||
extension NSDate: CoreStoreImportableAttributeType {
|
||||
extension NSDate: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSDate
|
||||
|
||||
@@ -110,12 +125,18 @@ extension NSDate: CoreStoreImportableAttributeType {
|
||||
}
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - NSData
|
||||
|
||||
extension NSData: CoreStoreImportableAttributeType {
|
||||
extension NSData: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSData
|
||||
|
||||
@@ -134,12 +155,18 @@ extension NSData: CoreStoreImportableAttributeType {
|
||||
}
|
||||
return forceCast(value)
|
||||
}
|
||||
|
||||
@nonobjc @inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Bool
|
||||
|
||||
extension Bool: CoreStoreImportableAttributeType {
|
||||
extension Bool: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSNumber
|
||||
|
||||
@@ -157,18 +184,24 @@ extension Bool: CoreStoreImportableAttributeType {
|
||||
case let decimal as NSDecimalNumber:
|
||||
// iOS: NSDecimalNumber(string: "0.5").boolValue // true
|
||||
// OSX: NSDecimalNumber(string: "0.5").boolValue // false
|
||||
return NSNumber(value: decimal.doubleValue).boolValue
|
||||
return decimal != NSDecimalNumber.zero
|
||||
|
||||
default:
|
||||
return value.boolValue
|
||||
}
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSNumber
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int16
|
||||
|
||||
extension Int16: CoreStoreImportableAttributeType {
|
||||
extension Int16: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSNumber
|
||||
|
||||
@@ -183,12 +216,18 @@ extension Int16: CoreStoreImportableAttributeType {
|
||||
|
||||
return value.int16Value
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSNumber
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int32
|
||||
|
||||
extension Int32: CoreStoreImportableAttributeType {
|
||||
extension Int32: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSNumber
|
||||
|
||||
@@ -203,12 +242,18 @@ extension Int32: CoreStoreImportableAttributeType {
|
||||
|
||||
return value.int32Value
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSNumber
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Int64
|
||||
|
||||
extension Int64: CoreStoreImportableAttributeType {
|
||||
extension Int64: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSNumber
|
||||
|
||||
@@ -223,12 +268,18 @@ extension Int64: CoreStoreImportableAttributeType {
|
||||
|
||||
return value.int64Value
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSNumber
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Double
|
||||
|
||||
extension Double: CoreStoreImportableAttributeType {
|
||||
extension Double: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSNumber
|
||||
|
||||
@@ -243,12 +294,18 @@ extension Double: CoreStoreImportableAttributeType {
|
||||
|
||||
return value.doubleValue
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSNumber
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Float
|
||||
|
||||
extension Float: CoreStoreImportableAttributeType {
|
||||
extension Float: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSNumber
|
||||
|
||||
@@ -263,12 +320,18 @@ extension Float: CoreStoreImportableAttributeType {
|
||||
|
||||
return value.floatValue
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSNumber
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Date
|
||||
|
||||
extension Date: CoreStoreImportableAttributeType {
|
||||
extension Date: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSDate
|
||||
|
||||
@@ -283,12 +346,18 @@ extension Date: CoreStoreImportableAttributeType {
|
||||
|
||||
return value as Date
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSDate
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - String
|
||||
|
||||
extension String: CoreStoreImportableAttributeType {
|
||||
extension String: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSString
|
||||
|
||||
@@ -303,12 +372,18 @@ extension String: CoreStoreImportableAttributeType {
|
||||
|
||||
return value as String
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSString
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Data
|
||||
|
||||
extension Data: CoreStoreImportableAttributeType {
|
||||
extension Data: ImportableAttributeType {
|
||||
|
||||
public typealias ImportableNativeType = NSData
|
||||
|
||||
@@ -323,4 +398,10 @@ extension Data: CoreStoreImportableAttributeType {
|
||||
|
||||
return value as Data
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
public func cs_toImportableNativeType() -> ImportableNativeType {
|
||||
|
||||
return self as NSData
|
||||
}
|
||||
}
|
||||
@@ -59,7 +59,7 @@ public protocol ImportableUniqueObject: ImportableObject {
|
||||
/**
|
||||
The data type for the entity's unique ID attribute
|
||||
*/
|
||||
associatedtype UniqueIDType: CoreStoreImportableAttributeType
|
||||
associatedtype UniqueIDType: ImportableAttributeType
|
||||
|
||||
/**
|
||||
The keyPath to the entity's unique ID attribute
|
||||
@@ -199,7 +199,7 @@ public extension ImportableUniqueObject where Self: NSManagedObject {
|
||||
set {
|
||||
|
||||
self.setValue(
|
||||
newValue.cs_toQueryableNativeType(),
|
||||
newValue.cs_toImportableNativeType(),
|
||||
forKey: type(of: self).uniqueIDKeyPath
|
||||
)
|
||||
}
|
||||
|
||||
@@ -238,13 +238,13 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
||||
// MARK: QueryableSource
|
||||
|
||||
@nonobjc
|
||||
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
public func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
||||
|
||||
return self.queryValue(from, selectClause, queryClauses)
|
||||
}
|
||||
|
||||
@nonobjc
|
||||
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
public func queryValue<T: NSManagedObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
||||
|
||||
let fetchRequest = CoreStoreFetchRequest()
|
||||
let storeFound = from.applyToFetchRequest(fetchRequest, context: self)
|
||||
@@ -415,7 +415,7 @@ internal extension NSManagedObjectContext {
|
||||
// MARK: Querying
|
||||
|
||||
@nonobjc
|
||||
internal func queryValue<U: SelectValueResultType>(_ selectTerms: [SelectTerm], fetchRequest: NSFetchRequest<NSFetchRequestResult>) -> U? {
|
||||
internal func queryValue<U: QueryableAttributeType>(_ selectTerms: [SelectTerm], fetchRequest: NSFetchRequest<NSFetchRequestResult>) -> U? {
|
||||
|
||||
var fetchResults: [Any]?
|
||||
var fetchError: Error?
|
||||
@@ -433,9 +433,9 @@ internal extension NSManagedObjectContext {
|
||||
if let fetchResults = fetchResults {
|
||||
|
||||
if let rawResult = fetchResults.first as? NSDictionary,
|
||||
let rawObject = rawResult[selectTerms.keyPathForFirstSelectTerm()] {
|
||||
let rawObject = rawResult[selectTerms.keyPathForFirstSelectTerm()] as? U.QueryableNativeType {
|
||||
|
||||
return Select<U>.ReturnType.cs_fromQueryResultNativeType(rawObject)
|
||||
return Select<U>.ReturnType.cs_fromQueryableNativeType(rawObject)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -359,7 +359,7 @@ public final class CSSelect: NSObject {
|
||||
|
||||
// MARK: CoreStoreObjectiveCType
|
||||
|
||||
public init<T: SelectValueResultType>(_ swiftValue: Select<T>) {
|
||||
public init<T: QueryableAttributeType>(_ swiftValue: Select<T>) {
|
||||
|
||||
self.attributeType = T.cs_rawAttributeType
|
||||
self.selectTerms = swiftValue.selectTerms
|
||||
|
||||
Reference in New Issue
Block a user