motion-yapper 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -2
- data/.travis.yml +2 -0
- data/Gemfile +1 -0
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/lib/motion-yapper.rb +1 -0
- data/lib/yapper.rb +3 -5
- data/lib/yapper/config.rb +2 -0
- data/lib/yapper/db.rb +105 -40
- data/lib/yapper/document.rb +7 -4
- data/lib/yapper/document/callbacks.rb +0 -7
- data/lib/yapper/document/{persistance.rb → persistence.rb} +27 -21
- data/lib/yapper/document/relation.rb +29 -22
- data/lib/yapper/document/selection.rb +122 -54
- data/lib/yapper/extensions.rb +12 -24
- data/lib/yapper/settings.rb +43 -0
- data/lib/yapper/timestamps.rb +2 -0
- data/lib/yapper/version.rb +1 -1
- data/{yapper.gemspec → motion-yapper.gemspec} +0 -0
- data/spec/integration/{where_spec.rb → criteria_spec.rb} +78 -10
- data/spec/integration/db_spec.rb +70 -0
- data/spec/integration/defaults_spec.rb +37 -0
- data/spec/integration/extensions_spec.rb +14 -0
- data/spec/integration/{persistance_spec.rb → persistence_spec.rb} +0 -0
- data/spec/integration/relation_spec.rb +4 -4
- data/vendor/Podfile.lock +9 -11
- data/vendor/Pods/.build/libPods-CocoaLumberjack.a +0 -0
- data/vendor/Pods/.build/libPods-NSData+MD5Digest.a +0 -0
- data/vendor/Pods/.build/libPods-YapDatabase.a +0 -0
- data/vendor/Pods/.build/libPods.a +0 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDASLLogger.h +4 -4
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDAbstractDatabaseLogger.h +14 -14
- data/vendor/Pods/{CocoaLumberjack/Lumberjack/Extensions/ContextFilterLogFormatter.h → BuildHeaders/CocoaLumberjack/DDContextFilterLogFormatter.h} +6 -8
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/{DispatchQueueLogFormatter.h → DDDispatchQueueLogFormatter.h} +18 -6
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDFileLogger.h +67 -32
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDLog+LOGV.h +99 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDLog.h +98 -65
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDMultiFormatter.h +30 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDTTYLogger.h +39 -25
- data/vendor/Pods/BuildHeaders/YapDatabase/NSDictionary+YapDatabase.h +8 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapCache.h +1 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapCollectionKey.h +3 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabase.h +4 -4
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseConnection.h +21 -19
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseDefaults.h +1 -1
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtensionPrivate.h +35 -31
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredView.h +8 -35
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewPrivate.h +0 -2
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewTransaction.h +17 -17
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewTypes.h +32 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchPrivate.h +8 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabasePrivate.h +43 -21
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationship.h +35 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipConnection.h +29 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipEdge.h +163 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipEdgePrivate.h +79 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipNode.h +99 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipOptions.h +59 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipPrivate.h +125 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipTransaction.h +384 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndex.h +49 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexPrivate.h +10 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexSetupPrivate.h +18 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseTransaction.h +131 -21
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseView.h +48 -107
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewChange.h +2 -2
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewConnection.h +1 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewMappings.h +17 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewOptions.h +10 -3
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewPrivate.h +18 -1
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewTransaction.h +75 -24
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewTypes.h +99 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDASLLogger.h +4 -4
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDASLLogger.m +51 -50
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDAbstractDatabaseLogger.h +14 -14
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDAbstractDatabaseLogger.m +546 -546
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDFileLogger.h +67 -32
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDFileLogger.m +1093 -907
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog+LOGV.h +99 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog.h +98 -65
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog.m +873 -748
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDTTYLogger.h +39 -25
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDTTYLogger.m +1284 -1243
- data/vendor/Pods/{BuildHeaders/CocoaLumberjack/ContextFilterLogFormatter.h → CocoaLumberjack/Lumberjack/Extensions/DDContextFilterLogFormatter.h} +6 -8
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/{ContextFilterLogFormatter.m → DDContextFilterLogFormatter.m} +70 -70
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/{DispatchQueueLogFormatter.h → DDDispatchQueueLogFormatter.h} +18 -6
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDDispatchQueueLogFormatter.m +253 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDMultiFormatter.h +30 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDMultiFormatter.m +127 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/README.txt +1 -1
- data/vendor/Pods/CocoaLumberjack/README.markdown +52 -15
- data/vendor/Pods/Headers/CocoaLumberjack/DDASLLogger.h +4 -4
- data/vendor/Pods/Headers/CocoaLumberjack/DDAbstractDatabaseLogger.h +14 -14
- data/vendor/Pods/Headers/CocoaLumberjack/{ContextFilterLogFormatter.h → DDContextFilterLogFormatter.h} +6 -8
- data/vendor/Pods/Headers/CocoaLumberjack/{DispatchQueueLogFormatter.h → DDDispatchQueueLogFormatter.h} +18 -6
- data/vendor/Pods/Headers/CocoaLumberjack/DDFileLogger.h +67 -32
- data/vendor/Pods/Headers/CocoaLumberjack/DDLog+LOGV.h +99 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DDLog.h +98 -65
- data/vendor/Pods/Headers/CocoaLumberjack/DDMultiFormatter.h +30 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DDTTYLogger.h +39 -25
- data/vendor/Pods/Headers/YapDatabase/YapCollectionKey.h +3 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabase.h +4 -4
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseConnection.h +21 -19
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredView.h +8 -35
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewTransaction.h +17 -17
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewTypes.h +32 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationship.h +35 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipConnection.h +29 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipEdge.h +163 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipNode.h +99 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipOptions.h +59 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipTransaction.h +384 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndex.h +49 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseTransaction.h +131 -21
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseView.h +48 -107
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewChange.h +2 -2
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewConnection.h +1 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewMappings.h +17 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewOptions.h +10 -3
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewTransaction.h +75 -24
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewTypes.h +99 -0
- data/vendor/Pods/Headers/____Pods-CocoaLumberjack-prefix.h +2 -0
- data/vendor/Pods/Headers/____Pods-environment.h +15 -15
- data/vendor/Pods/Manifest.lock +9 -11
- data/vendor/Pods/Pods-CocoaLumberjack-Private.xcconfig +1 -1
- data/vendor/Pods/Pods-CocoaLumberjack-prefix.pch +2 -0
- data/vendor/Pods/Pods-NSData+MD5Digest-Private.xcconfig +1 -1
- data/vendor/Pods/Pods-YapDatabase-Private.xcconfig +1 -1
- data/vendor/Pods/{Pods-Acknowledgements.markdown → Pods-acknowledgements.markdown} +0 -37
- data/vendor/Pods/{Pods-Acknowledgements.plist → Pods-acknowledgements.plist} +0 -45
- data/vendor/Pods/Pods-environment.h +15 -15
- data/vendor/Pods/Pods.xcconfig +3 -3
- data/vendor/Pods/Pods.xcodeproj/project.pbxproj +2426 -3155
- data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods-CocoaLumberjack.xcscheme +59 -0
- data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods-NSData+MD5Digest.xcscheme +59 -0
- data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods-YapDatabase.xcscheme +59 -0
- data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods.xcscheme +59 -0
- data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/xcschememanagement.plist +31 -0
- data/vendor/Pods/YapDatabase/README.md +3 -1
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/Internal/YapDatabaseFilteredViewPrivate.h +0 -2
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredView.h +8 -35
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredView.m +25 -41
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTransaction.h +17 -17
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTransaction.m +403 -134
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTypes.h +32 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/Internal/YapDatabaseFullTextSearchPrivate.h +8 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchConnection.m +8 -8
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchTransaction.m +113 -62
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/Internal/YapDatabaseExtensionPrivate.h +35 -31
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtension.m +25 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionConnection.m +1 -1
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionTransaction.m +25 -1
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/Internal/YapDatabaseRelationshipEdgePrivate.h +79 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/Internal/YapDatabaseRelationshipPrivate.h +125 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationship.h +35 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationship.m +129 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipConnection.h +29 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipConnection.m +802 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipEdge.h +163 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipEdge.m +408 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipNode.h +99 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipOptions.h +59 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipOptions.m +29 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipTransaction.h +384 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipTransaction.m +5254 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/Internal/YapDatabaseSecondaryIndexPrivate.h +10 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/Internal/YapDatabaseSecondaryIndexSetupPrivate.h +18 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndex.h +49 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndex.m +12 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexConnection.m +9 -8
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexSetup.m +62 -1
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.m +148 -45
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPrivate.h +18 -1
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewChange.h +2 -2
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewChange.m +15 -9
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewMappings.h +17 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewMappings.m +211 -64
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseView.h +48 -107
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseView.m +10 -7
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewConnection.h +1 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewConnection.m +13 -22
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewOptions.h +10 -3
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTransaction.h +75 -24
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTransaction.m +725 -244
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTypes.h +99 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/NSDictionary+YapDatabase.h +8 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/NSDictionary+YapDatabase.m +19 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapCache.h +1 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapCache.m +12 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseDefaults.h +1 -1
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseDefaults.m +3 -3
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabasePrivate.h +43 -21
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapNull.m +4 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapCollectionKey.h +3 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapCollectionKey.m +5 -0
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabase.h +4 -4
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabase.m +84 -93
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseConnection.h +21 -19
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseConnection.m +381 -209
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseTransaction.h +131 -21
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseTransaction.m +587 -267
- data/vendor/Pods/{Pods.bridgesupport → build-iPhoneSimulator/Pods.bridgesupport} +633 -2557
- data/vendor/Pods/build-iPhoneSimulator/libPods.a +0 -0
- data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.bridgesupport +2 -1
- data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.h +2 -1
- data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.m +4 -2
- metadata +80 -108
- data/Gemfile.lock +0 -63
- data/lib/yapper/attachment.rb +0 -48
- data/lib/yapper/document/attachment.rb +0 -26
- data/lib/yapper/sync.rb +0 -134
- data/lib/yapper/sync/data.rb +0 -12
- data/lib/yapper/sync/event.rb +0 -194
- data/lib/yapper/sync/queue.rb +0 -164
- data/spec/integration/all_spec.rb +0 -40
- data/spec/integration/sync_spec.rb +0 -42
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.h +0 -641
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.m +0 -1396
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h +0 -133
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m +0 -327
- data/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.h +0 -113
- data/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.m +0 -321
- data/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.h +0 -71
- data/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.m +0 -150
- data/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.h +0 -75
- data/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.m +0 -157
- data/vendor/Pods/AFNetworking/AFNetworking/AFNetworking.h +0 -43
- data/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.h +0 -68
- data/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.m +0 -143
- data/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h +0 -370
- data/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m +0 -848
- data/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.h +0 -89
- data/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.m +0 -167
- data/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.h +0 -78
- data/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.m +0 -191
- data/vendor/Pods/AFNetworking/LICENSE +0 -19
- data/vendor/Pods/AFNetworking/README.md +0 -208
- data/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPClient.h +0 -641
- data/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h +0 -133
- data/vendor/Pods/BuildHeaders/AFNetworking/AFImageRequestOperation.h +0 -113
- data/vendor/Pods/BuildHeaders/AFNetworking/AFJSONRequestOperation.h +0 -71
- data/vendor/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h +0 -75
- data/vendor/Pods/BuildHeaders/AFNetworking/AFNetworking.h +0 -43
- data/vendor/Pods/BuildHeaders/AFNetworking/AFPropertyListRequestOperation.h +0 -68
- data/vendor/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h +0 -370
- data/vendor/Pods/BuildHeaders/AFNetworking/AFXMLRequestOperation.h +0 -89
- data/vendor/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h +0 -78
- data/vendor/Pods/BuildHeaders/Reachability/Reachability.h +0 -109
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DispatchQueueLogFormatter.m +0 -251
- data/vendor/Pods/Headers/AFNetworking/AFHTTPClient.h +0 -641
- data/vendor/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h +0 -133
- data/vendor/Pods/Headers/AFNetworking/AFImageRequestOperation.h +0 -113
- data/vendor/Pods/Headers/AFNetworking/AFJSONRequestOperation.h +0 -71
- data/vendor/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h +0 -75
- data/vendor/Pods/Headers/AFNetworking/AFNetworking.h +0 -43
- data/vendor/Pods/Headers/AFNetworking/AFPropertyListRequestOperation.h +0 -68
- data/vendor/Pods/Headers/AFNetworking/AFURLConnectionOperation.h +0 -370
- data/vendor/Pods/Headers/AFNetworking/AFXMLRequestOperation.h +0 -89
- data/vendor/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h +0 -78
- data/vendor/Pods/Headers/Reachability/Reachability.h +0 -109
- data/vendor/Pods/Headers/YapDatabase/YapCache.h +0 -90
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseConnectionState.h +0 -29
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseDefaults.h +0 -37
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtensionPrivate.h +0 -440
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewPrivate.h +0 -19
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchPrivate.h +0 -69
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseLogging.h +0 -158
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseManager.h +0 -17
- data/vendor/Pods/Headers/YapDatabase/YapDatabasePrivate.h +0 -424
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexPrivate.h +0 -73
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseStatement.h +0 -13
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseString.h +0 -121
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewChangePrivate.h +0 -94
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewMappingsPrivate.h +0 -72
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewPage.h +0 -36
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewPageMetadata.h +0 -27
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewPrivate.h +0 -153
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewRangeOptionsPrivate.h +0 -17
- data/vendor/Pods/Headers/YapDatabase/YapMemoryTable.h +0 -74
- data/vendor/Pods/Headers/YapDatabase/YapNull.h +0 -17
- data/vendor/Pods/Headers/YapDatabase/YapTouch.h +0 -15
- data/vendor/Pods/Headers/____Pods-AFNetworking-prefix.h +0 -17
- data/vendor/Pods/Headers/____Pods-Reachability-prefix.h +0 -5
- data/vendor/Pods/Pods-AFNetworking-Private.xcconfig +0 -5
- data/vendor/Pods/Pods-AFNetworking-dummy.m +0 -5
- data/vendor/Pods/Pods-AFNetworking-prefix.pch +0 -17
- data/vendor/Pods/Pods-AFNetworking.xcconfig +0 -1
- data/vendor/Pods/Pods-Reachability-Private.xcconfig +0 -5
- data/vendor/Pods/Pods-Reachability-dummy.m +0 -5
- data/vendor/Pods/Pods-Reachability-prefix.pch +0 -5
- data/vendor/Pods/Pods-Reachability.xcconfig +0 -1
- data/vendor/Pods/Reachability/LICENCE.txt +0 -24
- data/vendor/Pods/Reachability/README.md +0 -65
- data/vendor/Pods/Reachability/Reachability.h +0 -109
- data/vendor/Pods/Reachability/Reachability.m +0 -527
@@ -443,40 +443,148 @@
|
|
443
443
|
|
444
444
|
/**
|
445
445
|
* Primitive access.
|
446
|
+
* This method is available in case you need to store irregular data that
|
447
|
+
* shouldn't go through the configured serializer/deserializer.
|
446
448
|
*
|
447
|
-
*
|
448
|
-
*
|
449
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
450
|
+
*
|
451
|
+
* Remember that if you place primitive data into the database via this method,
|
452
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
453
|
+
* primitiveDataForKey:inCollection:). If you attempt to access it via the object accessor
|
454
|
+
* (objectForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
455
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
456
|
+
*
|
457
|
+
* This method is the primitive version of setObject:forKey:inCollection:.
|
458
|
+
* For more information see the documentation for setObject:forKey:inCollection:.
|
459
|
+
*
|
460
|
+
* @see setObject:forKey:inCollection:
|
461
|
+
* @see primitiveDataForKey:inCollection:
|
462
|
+
**/
|
463
|
+
- (void)setPrimitiveData:(NSData *)primitiveData forKey:(NSString *)key inCollection:(NSString *)collection;
|
464
|
+
|
465
|
+
/**
|
466
|
+
* Primitive access.
|
467
|
+
* This method is available in case you need to store irregular data that
|
468
|
+
* shouldn't go through the configured serializer/deserializer.
|
469
|
+
*
|
470
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
449
471
|
*
|
450
|
-
*
|
472
|
+
* Remember that if you place primitive data into the database via this method,
|
473
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
474
|
+
* primitiveDataForKey:inCollection:). If you attempt to access it via the object accessor
|
475
|
+
* (objectForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
476
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
477
|
+
*
|
478
|
+
* This method is the primitive version of setObject:forKey:inCollection:withMetadata:.
|
479
|
+
* For more information see the documentation for setObject:forKey:inCollection:withMetadata:.
|
480
|
+
*
|
481
|
+
* @see setObject:forKey:inCollection:withMetadata:
|
482
|
+
* @see primitiveDataForKey:inCollection:
|
483
|
+
* @see primitiveMetadataForKey:inCollection:
|
451
484
|
**/
|
452
|
-
- (void)setPrimitiveData:(NSData *)
|
453
|
-
- (void)setPrimitiveData:(NSData *)data
|
485
|
+
- (void)setPrimitiveData:(NSData *)primitiveData
|
454
486
|
forKey:(NSString *)key
|
455
487
|
inCollection:(NSString *)collection
|
456
488
|
withPrimitiveMetadata:(NSData *)primitiveMetadata;
|
457
|
-
|
489
|
+
|
490
|
+
/**
|
491
|
+
* Primitive access.
|
492
|
+
* This method is available in case you need to store irregular data that
|
493
|
+
* shouldn't go through the configured serializer/deserializer.
|
494
|
+
*
|
495
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
496
|
+
*
|
497
|
+
* Remember that if you place primitive data into the database via this method,
|
498
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
499
|
+
* primitiveDataForKey:inCollection:). If you attempt to access it via the object accessor
|
500
|
+
* (objectForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
501
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
502
|
+
*
|
503
|
+
* This method is the primitive version of replaceObject:forKey:inCollection:.
|
504
|
+
* For more information see the documentation for replaceObject:forKey:inCollection:.
|
505
|
+
*
|
506
|
+
* @see replaceObject:forKey:inCollection:
|
507
|
+
* @see primitiveDataForKey:inCollection:
|
508
|
+
**/
|
509
|
+
- (void)replacePrimitiveData:(NSData *)primitiveData forKey:(NSString *)key inCollection:(NSString *)collection;
|
510
|
+
|
511
|
+
/**
|
512
|
+
* Primitive access.
|
513
|
+
* This method is available in case you need to store irregular data that
|
514
|
+
* shouldn't go through the configured serializer/deserializer.
|
515
|
+
*
|
516
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
517
|
+
*
|
518
|
+
* Remember that if you place primitive data into the database via this method,
|
519
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
520
|
+
* primitiveMetadataForKey:inCollection:). If you attempt to access it via the object accessor
|
521
|
+
* (metadataForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
522
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
523
|
+
*
|
524
|
+
* This method is the primitive version of replaceMetadata:forKey:inCollection:.
|
525
|
+
* For more information see the documentation for replaceMetadata:forKey:inCollection:.
|
526
|
+
*
|
527
|
+
* @see replaceMetadata:forKey:inCollection:
|
528
|
+
* @see primitiveMetadataForKey:inCollection:
|
529
|
+
**/
|
530
|
+
- (void)replacePrimitiveMetadata:(NSData *)primitiveMetadata forKey:(NSString *)key inCollection:(NSString *)collection;
|
531
|
+
|
532
|
+
/**
|
533
|
+
* DEPRECATED: Use replacePrimitiveMetadata:forKey:inCollection: instead.
|
534
|
+
**/
|
535
|
+
- (void)setPrimitiveMetadata:(NSData *)primitiveMetadata forKey:(NSString *)key inCollection:(NSString *)collection
|
536
|
+
__attribute((deprecated("Use method replacePrimitiveMetadata:forKey:inCollection: instead")));
|
458
537
|
|
459
538
|
#pragma mark Object & Metadata
|
460
539
|
|
461
540
|
/**
|
462
541
|
* Sets the object for the given key/collection.
|
463
|
-
*
|
542
|
+
* The object is automatically serialized using the database's configured objectSerializer.
|
464
543
|
*
|
465
|
-
*
|
466
|
-
*
|
467
|
-
*
|
544
|
+
* If you pass nil for the object, then this method will remove the row from the database (if it exists).
|
545
|
+
*
|
546
|
+
* This method implicitly sets the associated metadata to nil.
|
468
547
|
**/
|
469
548
|
- (void)setObject:(id)object forKey:(NSString *)key inCollection:(NSString *)collection;
|
549
|
+
|
550
|
+
/**
|
551
|
+
* Sets the object & metadata for the given key/collection.
|
552
|
+
*
|
553
|
+
* The object is automatically serialized using the database's configured objectSerializer.
|
554
|
+
* The metadata is automatically serialized using the database's configured metadataSerializer.
|
555
|
+
*
|
556
|
+
* The metadata is optional. You can pass nil for the metadata is unneeded.
|
557
|
+
* If non-nil then the metadata is also written to the database (metadata is also persistent).
|
558
|
+
*
|
559
|
+
* If you pass nil for the object, then this method will remove the row from the database (if it exists).
|
560
|
+
**/
|
470
561
|
- (void)setObject:(id)object forKey:(NSString *)key inCollection:(NSString *)collection withMetadata:(id)metadata;
|
471
562
|
|
472
563
|
/**
|
473
|
-
*
|
474
|
-
*
|
564
|
+
* If a row with the given key/collection exists, then replaces the object for that row with the new value.
|
565
|
+
* It only replaces the object. The metadata for the row doesn't change.
|
566
|
+
*
|
567
|
+
* If there is no row in the database for the given key/collection then this method does nothing.
|
568
|
+
*
|
569
|
+
* If you pass nil for the object, then this method will remove
|
570
|
+
**/
|
571
|
+
- (void)replaceObject:(id)object forKey:(NSString *)key inCollection:(NSString *)collection;
|
572
|
+
|
573
|
+
/**
|
574
|
+
* If a row with the given key/collection exists, then replaces the metadata for that row with the new value.
|
575
|
+
* It only replaces the metadata. The object for the row doesn't change.
|
475
576
|
*
|
476
|
-
*
|
477
|
-
*
|
577
|
+
* If there is no row in the database for the given key/collection then this method does nothing.
|
578
|
+
*
|
579
|
+
* If you pass nil for the metadata, any metadata previously associated with the key/collection is removed.
|
580
|
+
**/
|
581
|
+
- (void)replaceMetadata:(id)metadata forKey:(NSString *)key inCollection:(NSString *)collection;
|
582
|
+
|
583
|
+
/**
|
584
|
+
* DEPRECATED: Use replaceMetadata:forKey:inCollection: instead.
|
478
585
|
**/
|
479
|
-
- (void)setMetadata:(id)metadata forKey:(NSString *)key inCollection:(NSString *)collection
|
586
|
+
- (void)setMetadata:(id)metadata forKey:(NSString *)key inCollection:(NSString *)collection
|
587
|
+
__attribute((deprecated("Use method replaceMetadata:forKey:inCollection: instead")));
|
480
588
|
|
481
589
|
#pragma mark Touch
|
482
590
|
|
@@ -487,11 +595,13 @@
|
|
487
595
|
*
|
488
596
|
* You have a BNBook object in your database.
|
489
597
|
* One of the properties of the book object is a URL pointing to an image for the front cover of the book.
|
490
|
-
* This image gets changed. Thus the UI representation of the book needs to be updated
|
491
|
-
* You realize that all your views are already listening for
|
492
|
-
* so if you update the object in the database
|
493
|
-
* However, the actual object itself didn't change. So while
|
494
|
-
* update the object on disk, doing so would be the
|
598
|
+
* This image gets changed on the server. Thus the UI representation of the book needs to be updated
|
599
|
+
* to reflect the updated image on the server. You realize that all your views are already listening for
|
600
|
+
* YapDatabaseModified notifications, so if you update the object in the database then all your views are
|
601
|
+
* already wired to update the UI appropriately. However, the actual object itself didn't change. So while
|
602
|
+
* there technically isn't any reason to update the object on disk, doing so would be the easiest way to
|
603
|
+
* keep the UI up-to-date. So what you really want is a way to "mark" the object as updated, without actually
|
604
|
+
* incurring the overhead of rewriting it to disk.
|
495
605
|
*
|
496
606
|
* And this is exactly what the touch methods were designed for.
|
497
607
|
* It won't actually cause the object to get rewritten to disk.
|
@@ -502,7 +612,7 @@
|
|
502
612
|
* and passing the object & metadata that already exists for the key. But without the overhead of fetching the items,
|
503
613
|
* or re-writing the items to disk.
|
504
614
|
*
|
505
|
-
* The touchMetadataForKey: method is similar to calling
|
615
|
+
* The touchMetadataForKey: method is similar to calling replaceMetadata:forKey:,
|
506
616
|
* and passing the metadata that already exists for the key. But without the overhead of fetching the metadata,
|
507
617
|
* or re-writing the metadata to disk.
|
508
618
|
*
|
@@ -78,12 +78,57 @@
|
|
78
78
|
|
79
79
|
- (void)preCommitReadWriteTransaction
|
80
80
|
{
|
81
|
+
// Step 1:
|
82
|
+
//
|
83
|
+
// Allow extensions to flush changes to the main database table.
|
84
|
+
// This is different from flushing changes to their own private tables.
|
85
|
+
// We're referring here to the main collection/key/value table that's public.
|
86
|
+
|
87
|
+
__block BOOL restart;
|
88
|
+
__block BOOL prevExtModifiesMainDatabaseTable;
|
89
|
+
do
|
90
|
+
{
|
91
|
+
isMutated = NO;
|
92
|
+
|
93
|
+
restart = NO;
|
94
|
+
prevExtModifiesMainDatabaseTable = NO;
|
95
|
+
|
96
|
+
[extensions enumerateKeysAndObjectsUsingBlock:^(id extNameObj, id extTransactionObj, BOOL *stop) {
|
97
|
+
|
98
|
+
BOOL extModifiesMainDatabaseTable =
|
99
|
+
[(YapDatabaseExtensionTransaction *)extTransactionObj flushPendingChangesToMainDatabaseTable];
|
100
|
+
|
101
|
+
if (extModifiesMainDatabaseTable)
|
102
|
+
{
|
103
|
+
if (!isMutated)
|
104
|
+
{
|
105
|
+
prevExtModifiesMainDatabaseTable = YES;
|
106
|
+
}
|
107
|
+
else
|
108
|
+
{
|
109
|
+
if (prevExtModifiesMainDatabaseTable)
|
110
|
+
{
|
111
|
+
restart = YES;
|
112
|
+
*stop = YES;
|
113
|
+
}
|
114
|
+
else
|
115
|
+
{
|
116
|
+
prevExtModifiesMainDatabaseTable = YES;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}];
|
121
|
+
|
122
|
+
} while (restart);
|
123
|
+
|
124
|
+
// Step 2:
|
125
|
+
//
|
81
126
|
// Allow extensions to perform any "cleanup" code needed before the changesets are requested,
|
82
127
|
// and before the commit is executed.
|
83
128
|
|
84
129
|
[extensions enumerateKeysAndObjectsUsingBlock:^(id extNameObj, id extTransactionObj, BOOL *stop) {
|
85
130
|
|
86
|
-
[(YapDatabaseExtensionTransaction *)extTransactionObj
|
131
|
+
[(YapDatabaseExtensionTransaction *)extTransactionObj prepareChangeset];
|
87
132
|
}];
|
88
133
|
}
|
89
134
|
|
@@ -328,23 +373,25 @@
|
|
328
373
|
return result;
|
329
374
|
}
|
330
375
|
|
331
|
-
- (
|
376
|
+
- (YapCollectionKey *)collectionKeyForRowid:(int64_t)rowid
|
332
377
|
{
|
378
|
+
NSNumber *rowidNumber = @(rowid);
|
379
|
+
|
380
|
+
YapCollectionKey *collectionKey = [connection->keyCache objectForKey:rowidNumber];
|
381
|
+
if (collectionKey)
|
382
|
+
{
|
383
|
+
return collectionKey;
|
384
|
+
}
|
385
|
+
|
333
386
|
sqlite3_stmt *statement = [connection getKeyForRowidStatement];
|
334
387
|
if (statement == NULL) {
|
335
|
-
|
336
|
-
if (collectionPtr) *collectionPtr = nil;
|
337
|
-
return NO;
|
388
|
+
return nil;
|
338
389
|
}
|
339
390
|
|
340
391
|
// SELECT "collection", "key" FROM "database2" WHERE "rowid" = ?;
|
341
392
|
|
342
393
|
sqlite3_bind_int64(statement, 1, rowid);
|
343
394
|
|
344
|
-
NSString *collection = nil;
|
345
|
-
NSString *key = nil;
|
346
|
-
BOOL result = NO;
|
347
|
-
|
348
395
|
int status = sqlite3_step(statement);
|
349
396
|
if (status == SQLITE_ROW)
|
350
397
|
{
|
@@ -357,10 +404,12 @@
|
|
357
404
|
const unsigned char *text1 = sqlite3_column_text(statement, 1);
|
358
405
|
int textSize1 = sqlite3_column_bytes(statement, 1);
|
359
406
|
|
360
|
-
collection = [[NSString alloc] initWithBytes:text0 length:textSize0 encoding:NSUTF8StringEncoding];
|
361
|
-
key = [[NSString alloc] initWithBytes:text1 length:textSize1 encoding:NSUTF8StringEncoding];
|
407
|
+
NSString *collection = [[NSString alloc] initWithBytes:text0 length:textSize0 encoding:NSUTF8StringEncoding];
|
408
|
+
NSString *key = [[NSString alloc] initWithBytes:text1 length:textSize1 encoding:NSUTF8StringEncoding];
|
362
409
|
|
363
|
-
|
410
|
+
collectionKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
411
|
+
|
412
|
+
[connection->keyCache setObject:collectionKey forKey:rowidNumber];
|
364
413
|
}
|
365
414
|
else if (status == SQLITE_ERROR)
|
366
415
|
{
|
@@ -370,249 +419,127 @@
|
|
370
419
|
sqlite3_clear_bindings(statement);
|
371
420
|
sqlite3_reset(statement);
|
372
421
|
|
373
|
-
|
374
|
-
if (collectionPtr) *collectionPtr = collection;
|
375
|
-
return result;
|
422
|
+
return collectionKey;
|
376
423
|
}
|
377
424
|
|
378
|
-
- (BOOL)
|
379
|
-
collection:(NSString **)collectionPtr
|
380
|
-
object:(id *)objectPtr
|
381
|
-
forRowid:(int64_t)rowid
|
425
|
+
- (BOOL)getCollectionKey:(YapCollectionKey **)collectionKeyPtr object:(id *)objectPtr forRowid:(int64_t)rowid
|
382
426
|
{
|
383
|
-
|
384
|
-
if (
|
385
|
-
|
386
|
-
|
427
|
+
YapCollectionKey *collectionKey = [self collectionKeyForRowid:rowid];
|
428
|
+
if (collectionKey)
|
429
|
+
{
|
430
|
+
id object = [self objectForCollectionKey:collectionKey withRowid:rowid];
|
431
|
+
|
432
|
+
if (collectionKeyPtr) *collectionKeyPtr = collectionKey;
|
433
|
+
if (objectPtr) *objectPtr = object;
|
434
|
+
return YES;
|
435
|
+
}
|
436
|
+
else
|
437
|
+
{
|
438
|
+
if (collectionKeyPtr) *collectionKeyPtr = nil;
|
387
439
|
if (objectPtr) *objectPtr = nil;
|
388
440
|
return NO;
|
389
441
|
}
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
NSString *key = nil;
|
397
|
-
id object = nil;
|
398
|
-
BOOL result = NO;
|
399
|
-
|
400
|
-
int status = sqlite3_step(statement);
|
401
|
-
if (status == SQLITE_ROW)
|
442
|
+
}
|
443
|
+
|
444
|
+
- (BOOL)getCollectionKey:(YapCollectionKey **)collectionKeyPtr metadata:(id *)metadataPtr forRowid:(int64_t)rowid
|
445
|
+
{
|
446
|
+
YapCollectionKey *collectionKey = [self collectionKeyForRowid:rowid];
|
447
|
+
if (collectionKey)
|
402
448
|
{
|
403
|
-
|
404
|
-
[connection markSqlLevelSharedReadLockAcquired];
|
405
|
-
|
406
|
-
const unsigned char *text0 = sqlite3_column_text(statement, 0);
|
407
|
-
int textSize0 = sqlite3_column_bytes(statement, 0);
|
408
|
-
|
409
|
-
const unsigned char *text1 = sqlite3_column_text(statement, 1);
|
410
|
-
int textSize1 = sqlite3_column_bytes(statement, 1);
|
411
|
-
|
412
|
-
collection = [[NSString alloc] initWithBytes:text0 length:textSize0 encoding:NSUTF8StringEncoding];
|
413
|
-
key = [[NSString alloc] initWithBytes:text1 length:textSize1 encoding:NSUTF8StringEncoding];
|
414
|
-
|
415
|
-
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
416
|
-
|
417
|
-
object = [connection->objectCache objectForKey:cacheKey];
|
418
|
-
if (object == nil)
|
419
|
-
{
|
420
|
-
const void *blob = sqlite3_column_blob(statement, 2);
|
421
|
-
int blobSize = sqlite3_column_bytes(statement, 2);
|
422
|
-
|
423
|
-
// Performance tuning:
|
424
|
-
// Use dataWithBytesNoCopy to avoid an extra allocation and memcpy.
|
425
|
-
|
426
|
-
NSData *data = [NSData dataWithBytesNoCopy:(void *)blob length:blobSize freeWhenDone:NO];
|
427
|
-
object = connection->database->objectDeserializer(collection, key, data);
|
428
|
-
|
429
|
-
if (object)
|
430
|
-
[connection->objectCache setObject:object forKey:cacheKey];
|
431
|
-
}
|
449
|
+
id metadata = [self metadataForCollectionKey:collectionKey withRowid:rowid];
|
432
450
|
|
433
|
-
|
451
|
+
if (collectionKeyPtr) *collectionKeyPtr = collectionKey;
|
452
|
+
if (metadataPtr) *metadataPtr = metadata;
|
453
|
+
return YES;
|
434
454
|
}
|
435
|
-
else
|
455
|
+
else
|
436
456
|
{
|
437
|
-
|
457
|
+
if (collectionKeyPtr) *collectionKeyPtr = nil;
|
458
|
+
if (metadataPtr) *metadataPtr = nil;
|
459
|
+
return NO;
|
438
460
|
}
|
439
|
-
|
440
|
-
sqlite3_clear_bindings(statement);
|
441
|
-
sqlite3_reset(statement);
|
442
|
-
|
443
|
-
if (keyPtr) *keyPtr = key;
|
444
|
-
if (collectionPtr) *collectionPtr = collection;
|
445
|
-
if (objectPtr) *objectPtr = object;
|
446
|
-
return result;
|
447
461
|
}
|
448
462
|
|
449
|
-
- (BOOL)
|
450
|
-
|
451
|
-
|
452
|
-
|
463
|
+
- (BOOL)getCollectionKey:(YapCollectionKey **)collectionKeyPtr
|
464
|
+
object:(id *)objectPtr
|
465
|
+
metadata:(id *)metadataPtr
|
466
|
+
forRowid:(int64_t)rowid
|
453
467
|
{
|
454
|
-
|
455
|
-
if (
|
456
|
-
|
457
|
-
if (
|
468
|
+
YapCollectionKey *collectionKey = [self collectionKeyForRowid:rowid];
|
469
|
+
if (collectionKey == nil)
|
470
|
+
{
|
471
|
+
if (collectionKeyPtr) *collectionKeyPtr = nil;
|
472
|
+
if (objectPtr) *objectPtr = nil;
|
458
473
|
if (metadataPtr) *metadataPtr = nil;
|
459
474
|
return NO;
|
460
475
|
}
|
461
476
|
|
462
|
-
|
477
|
+
id object = [connection->objectCache objectForKey:collectionKey];
|
478
|
+
id metadata = [connection->metadataCache objectForKey:collectionKey];
|
463
479
|
|
464
|
-
|
465
|
-
|
466
|
-
NSString *collection = nil;
|
467
|
-
NSString *key = nil;
|
468
|
-
id metadata = nil;
|
469
|
-
BOOL result = NO;
|
470
|
-
|
471
|
-
int status = sqlite3_step(statement);
|
472
|
-
if (status == SQLITE_ROW)
|
480
|
+
if (object || metadata)
|
473
481
|
{
|
474
|
-
if (
|
475
|
-
[connection markSqlLevelSharedReadLockAcquired];
|
476
|
-
|
477
|
-
const unsigned char *text0 = sqlite3_column_text(statement, 0);
|
478
|
-
int textSize0 = sqlite3_column_bytes(statement, 0);
|
479
|
-
|
480
|
-
const unsigned char *text1 = sqlite3_column_text(statement, 1);
|
481
|
-
int textSize1 = sqlite3_column_bytes(statement, 1);
|
482
|
-
|
483
|
-
collection = [[NSString alloc] initWithBytes:text0 length:textSize0 encoding:NSUTF8StringEncoding];
|
484
|
-
key = [[NSString alloc] initWithBytes:text1 length:textSize1 encoding:NSUTF8StringEncoding];
|
485
|
-
|
486
|
-
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
487
|
-
|
488
|
-
metadata = [connection->metadataCache objectForKey:cacheKey];
|
489
|
-
if (metadata)
|
482
|
+
if (object == nil)
|
490
483
|
{
|
491
|
-
|
492
|
-
metadata = nil;
|
484
|
+
object = [self objectForCollectionKey:collectionKey withRowid:rowid];
|
493
485
|
}
|
494
|
-
else
|
486
|
+
else if (metadata == nil)
|
495
487
|
{
|
496
|
-
|
497
|
-
int blobSize = sqlite3_column_bytes(statement, 2);
|
498
|
-
|
499
|
-
if (blobSize > 0)
|
500
|
-
{
|
501
|
-
// Performance tuning:
|
502
|
-
// Use dataWithBytesNoCopy to avoid an extra allocation and memcpy.
|
503
|
-
|
504
|
-
NSData *mData = [NSData dataWithBytesNoCopy:(void *)blob length:blobSize freeWhenDone:NO];
|
505
|
-
metadata = connection->database->metadataDeserializer(collection, key, mData);
|
506
|
-
}
|
507
|
-
|
508
|
-
if (metadata)
|
509
|
-
[connection->metadataCache setObject:metadata forKey:cacheKey];
|
510
|
-
else
|
511
|
-
[connection->metadataCache setObject:[YapNull null] forKey:cacheKey];
|
488
|
+
metadata = [self metadataForCollectionKey:collectionKey withRowid:rowid];
|
512
489
|
}
|
513
490
|
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
YDBLogError(@"Error executing 'getKeyMetadataForRowidStatement': %d %s",
|
519
|
-
status, sqlite3_errmsg(connection->db));
|
491
|
+
if (collectionKeyPtr) *collectionKeyPtr = collectionKey;
|
492
|
+
if (objectPtr) *objectPtr = object;
|
493
|
+
if (metadataPtr) *metadataPtr = metadata;
|
494
|
+
return YES;
|
520
495
|
}
|
521
496
|
|
522
|
-
sqlite3_clear_bindings(statement);
|
523
|
-
sqlite3_reset(statement);
|
524
|
-
|
525
|
-
if (keyPtr) *keyPtr = key;
|
526
|
-
if (collectionPtr) *collectionPtr = collection;
|
527
|
-
if (metadataPtr) *metadataPtr = metadata;
|
528
|
-
return result;
|
529
|
-
}
|
530
|
-
|
531
|
-
- (BOOL)getKey:(NSString **)keyPtr
|
532
|
-
collection:(NSString **)collectionPtr
|
533
|
-
object:(id *)objectPtr
|
534
|
-
metadata:(id *)metadataPtr
|
535
|
-
forRowid:(int64_t)rowid
|
536
|
-
{
|
537
497
|
sqlite3_stmt *statement = [connection getAllForRowidStatement];
|
538
498
|
if (statement == NULL) {
|
539
|
-
if (
|
540
|
-
if (collectionPtr) *collectionPtr = nil;
|
499
|
+
if (collectionKeyPtr) *collectionKeyPtr = nil;
|
541
500
|
if (objectPtr) *objectPtr = nil;
|
542
501
|
if (metadataPtr) *metadataPtr = nil;
|
543
502
|
return NO;
|
544
503
|
}
|
545
504
|
|
546
|
-
// SELECT "
|
505
|
+
// SELECT "data", "metadata" FROM "database2" WHERE "rowid" = ?;
|
547
506
|
|
548
507
|
sqlite3_bind_int64(statement, 1, rowid);
|
549
508
|
|
550
|
-
NSString *collection = nil;
|
551
|
-
NSString *key = nil;
|
552
|
-
id object = nil;
|
553
|
-
id metadata = nil;
|
554
|
-
BOOL result = NO;
|
555
|
-
|
556
509
|
int status = sqlite3_step(statement);
|
557
510
|
if (status == SQLITE_ROW)
|
558
511
|
{
|
559
512
|
if (connection->needsMarkSqlLevelSharedReadLock)
|
560
513
|
[connection markSqlLevelSharedReadLockAcquired];
|
561
514
|
|
562
|
-
const
|
563
|
-
int
|
515
|
+
const void *blob = sqlite3_column_blob(statement, 0);
|
516
|
+
int blobSize = sqlite3_column_bytes(statement, 0);
|
564
517
|
|
565
|
-
|
566
|
-
|
518
|
+
// Performance tuning:
|
519
|
+
// Use dataWithBytesNoCopy to avoid an extra allocation and memcpy.
|
567
520
|
|
568
|
-
|
569
|
-
|
521
|
+
NSData *data = [NSData dataWithBytesNoCopy:(void *)blob length:blobSize freeWhenDone:NO];
|
522
|
+
object = connection->database->objectDeserializer(collectionKey.collection, collectionKey.key, data);
|
570
523
|
|
571
|
-
|
524
|
+
if (object)
|
525
|
+
[connection->objectCache setObject:object forKey:collectionKey];
|
572
526
|
|
573
|
-
|
574
|
-
|
527
|
+
const void *mBlob = sqlite3_column_blob(statement, 1);
|
528
|
+
int mBlobSize = sqlite3_column_bytes(statement, 1);
|
529
|
+
|
530
|
+
if (mBlobSize > 0)
|
575
531
|
{
|
576
|
-
const void *blob = sqlite3_column_blob(statement, 2);
|
577
|
-
int blobSize = sqlite3_column_bytes(statement, 2);
|
578
|
-
|
579
532
|
// Performance tuning:
|
580
533
|
// Use dataWithBytesNoCopy to avoid an extra allocation and memcpy.
|
581
534
|
|
582
|
-
NSData *
|
583
|
-
|
584
|
-
|
585
|
-
if (object)
|
586
|
-
[connection->objectCache setObject:object forKey:cacheKey];
|
535
|
+
NSData *mData = [NSData dataWithBytesNoCopy:(void *)mBlob length:mBlobSize freeWhenDone:NO];
|
536
|
+
metadata = connection->database->metadataDeserializer(collectionKey.collection, collectionKey.key, mData);
|
587
537
|
}
|
588
538
|
|
589
|
-
metadata = [connection->metadataCache objectForKey:cacheKey];
|
590
539
|
if (metadata)
|
591
|
-
|
592
|
-
if (metadata == [YapNull null])
|
593
|
-
metadata = nil;
|
594
|
-
}
|
540
|
+
[connection->metadataCache setObject:metadata forKey:collectionKey];
|
595
541
|
else
|
596
|
-
|
597
|
-
const void *blob = sqlite3_column_blob(statement, 3);
|
598
|
-
int blobSize = sqlite3_column_bytes(statement, 3);
|
599
|
-
|
600
|
-
if (blobSize > 0)
|
601
|
-
{
|
602
|
-
// Performance tuning:
|
603
|
-
// Use dataWithBytesNoCopy to avoid an extra allocation and memcpy.
|
604
|
-
|
605
|
-
NSData *mData = [NSData dataWithBytesNoCopy:(void *)blob length:blobSize freeWhenDone:NO];
|
606
|
-
metadata = connection->database->metadataDeserializer(collection, key, mData);
|
607
|
-
}
|
608
|
-
|
609
|
-
if (metadata)
|
610
|
-
[connection->metadataCache setObject:metadata forKey:cacheKey];
|
611
|
-
else
|
612
|
-
[connection->metadataCache setObject:[YapNull null] forKey:cacheKey];
|
613
|
-
}
|
614
|
-
|
615
|
-
result = YES;
|
542
|
+
[connection->metadataCache setObject:[YapNull null] forKey:collectionKey];
|
616
543
|
}
|
617
544
|
else if (status == SQLITE_ERROR)
|
618
545
|
{
|
@@ -622,14 +549,13 @@
|
|
622
549
|
sqlite3_clear_bindings(statement);
|
623
550
|
sqlite3_reset(statement);
|
624
551
|
|
625
|
-
if (
|
626
|
-
if (collectionPtr) *collectionPtr = collection;
|
552
|
+
if (collectionKeyPtr) *collectionKeyPtr = collectionKey;
|
627
553
|
if (objectPtr) *objectPtr = object;
|
628
554
|
if (metadataPtr) *metadataPtr = metadata;
|
629
|
-
return
|
555
|
+
return YES;
|
630
556
|
}
|
631
557
|
|
632
|
-
- (BOOL)
|
558
|
+
- (BOOL)hasRowid:(int64_t)rowid
|
633
559
|
{
|
634
560
|
sqlite3_stmt *statement = [connection getCountForRowidStatement];
|
635
561
|
if (statement == NULL) return NO;
|
@@ -661,11 +587,15 @@
|
|
661
587
|
|
662
588
|
- (id)objectForKey:(NSString *)key inCollection:(NSString *)collection withRowid:(int64_t)rowid
|
663
589
|
{
|
664
|
-
if (key == nil) return nil;
|
665
|
-
if (collection == nil) collection = @"";
|
666
|
-
|
667
590
|
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
668
591
|
|
592
|
+
return [self objectForCollectionKey:cacheKey withRowid:rowid];
|
593
|
+
}
|
594
|
+
|
595
|
+
- (id)objectForCollectionKey:(YapCollectionKey *)cacheKey withRowid:(int64_t)rowid
|
596
|
+
{
|
597
|
+
if (cacheKey == nil) return nil;
|
598
|
+
|
669
599
|
id object = [connection->objectCache objectForKey:cacheKey];
|
670
600
|
if (object)
|
671
601
|
return object;
|
@@ -690,7 +620,7 @@
|
|
690
620
|
// Use dataWithBytesNoCopy to avoid an extra allocation and memcpy.
|
691
621
|
|
692
622
|
NSData *data = [NSData dataWithBytesNoCopy:(void *)blob length:blobSize freeWhenDone:NO];
|
693
|
-
object = connection->database->objectDeserializer(collection, key, data);
|
623
|
+
object = connection->database->objectDeserializer(cacheKey.collection, cacheKey.key, data);
|
694
624
|
|
695
625
|
if (object)
|
696
626
|
[connection->objectCache setObject:object forKey:cacheKey];
|
@@ -706,6 +636,57 @@
|
|
706
636
|
return object;
|
707
637
|
}
|
708
638
|
|
639
|
+
- (id)metadataForKey:(NSString *)key inCollection:(NSString *)collection withRowid:(int64_t)rowid
|
640
|
+
{
|
641
|
+
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
642
|
+
|
643
|
+
return [self metadataForCollectionKey:cacheKey withRowid:rowid];
|
644
|
+
}
|
645
|
+
|
646
|
+
- (id)metadataForCollectionKey:(YapCollectionKey *)cacheKey withRowid:(int64_t)rowid
|
647
|
+
{
|
648
|
+
if (cacheKey == nil) return nil;
|
649
|
+
|
650
|
+
id metadata = [connection->metadataCache objectForKey:cacheKey];
|
651
|
+
if (metadata)
|
652
|
+
return metadata;
|
653
|
+
|
654
|
+
sqlite3_stmt *statement = [connection getMetadataForRowidStatement];
|
655
|
+
if (statement == NULL) return nil;
|
656
|
+
|
657
|
+
// SELECT "metadata" FROM "database2" WHERE "rowid" = ?;
|
658
|
+
|
659
|
+
sqlite3_bind_int64(statement, 1, rowid);
|
660
|
+
|
661
|
+
int status = sqlite3_step(statement);
|
662
|
+
if (status == SQLITE_ROW)
|
663
|
+
{
|
664
|
+
if (connection->needsMarkSqlLevelSharedReadLock)
|
665
|
+
[connection markSqlLevelSharedReadLockAcquired];
|
666
|
+
|
667
|
+
const void *blob = sqlite3_column_blob(statement, 0);
|
668
|
+
int blobSize = sqlite3_column_bytes(statement, 0);
|
669
|
+
|
670
|
+
// Performance tuning:
|
671
|
+
// Use dataWithBytesNoCopy to avoid an extra allocation and memcpy.
|
672
|
+
|
673
|
+
NSData *data = [NSData dataWithBytesNoCopy:(void *)blob length:blobSize freeWhenDone:NO];
|
674
|
+
metadata = connection->database->metadataDeserializer(cacheKey.collection, cacheKey.key, data);
|
675
|
+
|
676
|
+
if (metadata)
|
677
|
+
[connection->metadataCache setObject:metadata forKey:cacheKey];
|
678
|
+
}
|
679
|
+
else if (status == SQLITE_ERROR)
|
680
|
+
{
|
681
|
+
YDBLogError(@"Error executing 'getMetadataForRowidStatement': %d %s", status, sqlite3_errmsg(connection->db));
|
682
|
+
}
|
683
|
+
|
684
|
+
sqlite3_clear_bindings(statement);
|
685
|
+
sqlite3_reset(statement);
|
686
|
+
|
687
|
+
return metadata;
|
688
|
+
}
|
689
|
+
|
709
690
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
710
691
|
#pragma mark Primitive
|
711
692
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
@@ -4140,6 +4121,45 @@
|
|
4140
4121
|
FreeYapDatabaseString(&_key);
|
4141
4122
|
}
|
4142
4123
|
|
4124
|
+
- (void)removeValueForKey:(NSString *)key extension:(NSString *)extensionName
|
4125
|
+
{
|
4126
|
+
// Be careful with this statement.
|
4127
|
+
//
|
4128
|
+
// The snapshot value is in the yap table, and uses an empty string for the extensionName.
|
4129
|
+
// The snapshot value is critical to the underlying architecture of the system.
|
4130
|
+
// Removing it could cripple the system.
|
4131
|
+
|
4132
|
+
NSAssert(key != nil, @"Invalid key!");
|
4133
|
+
NSAssert(extensionName != nil, @"Invalid extensionName!");
|
4134
|
+
|
4135
|
+
sqlite3_stmt *statement = [connection yapRemoveForKeyStatement];
|
4136
|
+
if (statement == NULL) return;
|
4137
|
+
|
4138
|
+
// DELETE FROM "yap2" WHERE "extension" = ? AND "key" = ?;
|
4139
|
+
|
4140
|
+
YapDatabaseString _extension; MakeYapDatabaseString(&_extension, extensionName);
|
4141
|
+
sqlite3_bind_text(statement, 1, _extension.str, _extension.length, SQLITE_STATIC);
|
4142
|
+
|
4143
|
+
YapDatabaseString _key; MakeYapDatabaseString(&_key, key);
|
4144
|
+
sqlite3_bind_text(statement, 2, _key.str, _key.length, SQLITE_STATIC);
|
4145
|
+
|
4146
|
+
int status = sqlite3_step(statement);
|
4147
|
+
if (status == SQLITE_DONE)
|
4148
|
+
{
|
4149
|
+
connection->hasDiskChanges = YES;
|
4150
|
+
}
|
4151
|
+
else
|
4152
|
+
{
|
4153
|
+
YDBLogError(@"Error executing 'yapRemoveForKeyStatement': %d %s, extension(%@)",
|
4154
|
+
status, sqlite3_errmsg(connection->db), extensionName);
|
4155
|
+
}
|
4156
|
+
|
4157
|
+
sqlite3_clear_bindings(statement);
|
4158
|
+
sqlite3_reset(statement);
|
4159
|
+
FreeYapDatabaseString(&_extension);
|
4160
|
+
FreeYapDatabaseString(&_key);
|
4161
|
+
}
|
4162
|
+
|
4143
4163
|
- (void)removeAllValuesForExtension:(NSString *)extensionName
|
4144
4164
|
{
|
4145
4165
|
// Be careful with this statement.
|
@@ -4148,7 +4168,7 @@
|
|
4148
4168
|
// The snapshot value is critical to the underlying architecture of the system.
|
4149
4169
|
// Removing it could cripple the system.
|
4150
4170
|
|
4151
|
-
NSAssert(extensionName != nil, @"Invalid extensionName
|
4171
|
+
NSAssert(extensionName != nil, @"Invalid extensionName!");
|
4152
4172
|
|
4153
4173
|
sqlite3_stmt *statement = [connection yapRemoveExtensionStatement];
|
4154
4174
|
if (statement == NULL) return;
|
@@ -4239,11 +4259,50 @@
|
|
4239
4259
|
#pragma mark Primitive
|
4240
4260
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
4241
4261
|
|
4262
|
+
/**
|
4263
|
+
* Primitive access.
|
4264
|
+
* This method is available in case you need to store irregular data that
|
4265
|
+
* shouldn't go through the configured serializer/deserializer.
|
4266
|
+
*
|
4267
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
4268
|
+
*
|
4269
|
+
* Remember that if you place primitive data into the database via this method,
|
4270
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
4271
|
+
* primitiveDataForKey:inCollection:). If you attempt to access it via the object accessor
|
4272
|
+
* (objectForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
4273
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
4274
|
+
*
|
4275
|
+
* This method is the primitive version of setObject:forKey:inCollection:.
|
4276
|
+
* For more information see the documentation for setObject:forKey:inCollection:.
|
4277
|
+
*
|
4278
|
+
* @see setObject:forKey:inCollection:
|
4279
|
+
* @see primitiveDataForKey:inCollection:
|
4280
|
+
**/
|
4242
4281
|
- (void)setPrimitiveData:(NSData *)primitiveData forKey:(NSString *)key inCollection:(NSString *)collection
|
4243
4282
|
{
|
4244
4283
|
[self setPrimitiveData:primitiveData forKey:key inCollection:collection withPrimitiveMetadata:nil];
|
4245
4284
|
}
|
4246
4285
|
|
4286
|
+
/**
|
4287
|
+
* Primitive access.
|
4288
|
+
* This method is available in case you need to store irregular data that
|
4289
|
+
* shouldn't go through the configured serializer/deserializer.
|
4290
|
+
*
|
4291
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
4292
|
+
*
|
4293
|
+
* Remember that if you place primitive data into the database via this method,
|
4294
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
4295
|
+
* primitiveDataForKey:inCollection:). If you attempt to access it via the object accessor
|
4296
|
+
* (objectForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
4297
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
4298
|
+
*
|
4299
|
+
* This method is the primitive version of setObject:forKey:inCollection:withMetadata:.
|
4300
|
+
* For more information see the documentation for setObject:forKey:inCollection:withMetadata:.
|
4301
|
+
*
|
4302
|
+
* @see setObject:forKey:inCollection:withMetadata:
|
4303
|
+
* @see primitiveDataForKey:inCollection:
|
4304
|
+
* @see primitiveMetadataForKey:inCollection:
|
4305
|
+
**/
|
4247
4306
|
- (void)setPrimitiveData:(NSData *)primitiveData
|
4248
4307
|
forKey:(NSString *)key
|
4249
4308
|
inCollection:(NSString *)collection
|
@@ -4374,14 +4433,99 @@
|
|
4374
4433
|
|
4375
4434
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4376
4435
|
{
|
4377
|
-
[extTransaction
|
4378
|
-
inCollection:cacheKey.collection // mutable string protection
|
4379
|
-
withRowid:rowid];
|
4436
|
+
[extTransaction handleRemoveObjectForCollectionKey:cacheKey withRowid:rowid];
|
4380
4437
|
}
|
4381
4438
|
}
|
4382
4439
|
}
|
4383
4440
|
|
4384
|
-
|
4441
|
+
/**
|
4442
|
+
* Primitive access.
|
4443
|
+
* This method is available in case you need to store irregular data that
|
4444
|
+
* shouldn't go through the configured serializer/deserializer.
|
4445
|
+
*
|
4446
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
4447
|
+
*
|
4448
|
+
* Remember that if you place primitive data into the database via this method,
|
4449
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
4450
|
+
* primitiveDataForKey:inCollection:). If you attempt to access it via the object accessor
|
4451
|
+
* (objectForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
4452
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
4453
|
+
*
|
4454
|
+
* This method is the primitive version of replaceObject:forKey:inCollection:.
|
4455
|
+
* For more information see the documentation for replaceObject:forKey:inCollection:.
|
4456
|
+
*
|
4457
|
+
* @see replaceObject:forKey:inCollection:
|
4458
|
+
* @see primitiveDataForKey:inCollection:
|
4459
|
+
**/
|
4460
|
+
- (void)replacePrimitiveData:(NSData *)primitiveData forKey:(NSString *)key inCollection:(NSString *)collection
|
4461
|
+
{
|
4462
|
+
if (primitiveData == nil)
|
4463
|
+
{
|
4464
|
+
[self removeObjectForKey:key inCollection:collection];
|
4465
|
+
return;
|
4466
|
+
}
|
4467
|
+
|
4468
|
+
if (collection == nil) collection = @"";
|
4469
|
+
|
4470
|
+
int64_t rowid = 0;
|
4471
|
+
if (![self getRowid:&rowid forKey:key inCollection:collection]) return;
|
4472
|
+
|
4473
|
+
sqlite3_stmt *statement = [connection updateObjectForRowidStatement];
|
4474
|
+
if (statement == NULL) return;
|
4475
|
+
|
4476
|
+
// UPDATE "database2" SET "data" = ? WHERE "rowid" = ?;
|
4477
|
+
|
4478
|
+
sqlite3_bind_blob(statement, 1, primitiveData.bytes, (int)primitiveData.length, SQLITE_STATIC);
|
4479
|
+
sqlite3_bind_int64(statement, 2, rowid);
|
4480
|
+
|
4481
|
+
BOOL updated = YES;
|
4482
|
+
|
4483
|
+
int status = sqlite3_step(statement);
|
4484
|
+
if (status != SQLITE_DONE)
|
4485
|
+
{
|
4486
|
+
YDBLogError(@"Error executing 'updateObjectForRowidStatement': %d %s",
|
4487
|
+
status, sqlite3_errmsg(connection->db));
|
4488
|
+
updated = NO;
|
4489
|
+
}
|
4490
|
+
|
4491
|
+
sqlite3_clear_bindings(statement);
|
4492
|
+
sqlite3_reset(statement);
|
4493
|
+
|
4494
|
+
if (!updated) return;
|
4495
|
+
|
4496
|
+
connection->hasDiskChanges = YES;
|
4497
|
+
isMutated = YES; // mutation during enumeration protection
|
4498
|
+
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
4499
|
+
|
4500
|
+
[connection->objectCache removeObjectForKey:cacheKey];
|
4501
|
+
[connection->objectChanges setObject:[YapNull null] forKey:cacheKey];
|
4502
|
+
|
4503
|
+
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4504
|
+
{
|
4505
|
+
[extTransaction handleRemoveObjectForCollectionKey:cacheKey withRowid:rowid];
|
4506
|
+
}
|
4507
|
+
}
|
4508
|
+
|
4509
|
+
/**
|
4510
|
+
* Primitive access.
|
4511
|
+
* This method is available in case you need to store irregular data that
|
4512
|
+
* shouldn't go through the configured serializer/deserializer.
|
4513
|
+
*
|
4514
|
+
* Primitive data is stored into the database, but doesn't get routed through any of the extensions.
|
4515
|
+
*
|
4516
|
+
* Remember that if you place primitive data into the database via this method,
|
4517
|
+
* you are responsible for accessing it via the appropriate primitive accessor (such as
|
4518
|
+
* primitiveMetadataForKey:inCollection:). If you attempt to access it via the object accessor
|
4519
|
+
* (metadataForKey:inCollection), then the system will attempt to deserialize the primitive data via the
|
4520
|
+
* configured deserializer, which may or may not work depending on the primitive data you're storing.
|
4521
|
+
*
|
4522
|
+
* This method is the primitive version of replaceMetadata:forKey:inCollection:.
|
4523
|
+
* For more information see the documentation for replaceMetadata:forKey:inCollection:.
|
4524
|
+
*
|
4525
|
+
* @see replaceMetadata:forKey:inCollection:
|
4526
|
+
* @see primitiveMetadataForKey:inCollection:
|
4527
|
+
**/
|
4528
|
+
- (void)replacePrimitiveMetadata:(NSData *)primitiveMetadata forKey:(NSString *)key inCollection:(NSString *)collection
|
4385
4529
|
{
|
4386
4530
|
if (collection == nil) collection = @"";
|
4387
4531
|
|
@@ -4392,9 +4536,6 @@
|
|
4392
4536
|
if (statement == NULL) return;
|
4393
4537
|
|
4394
4538
|
// UPDATE "database2" SET "metadata" = ? WHERE "rowid" = ?;
|
4395
|
-
//
|
4396
|
-
// To use SQLITE_STATIC on our data blob, we use the objc_precise_lifetime attribute.
|
4397
|
-
// This ensures the data isn't released until it goes out of scope.
|
4398
4539
|
|
4399
4540
|
sqlite3_bind_blob(statement, 1, primitiveMetadata.bytes, (int)primitiveMetadata.length, SQLITE_STATIC);
|
4400
4541
|
sqlite3_bind_int64(statement, 2, rowid);
|
@@ -4423,13 +4564,18 @@
|
|
4423
4564
|
|
4424
4565
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4425
4566
|
{
|
4426
|
-
[extTransaction
|
4427
|
-
forKey:cacheKey.key // mutable string protection
|
4428
|
-
inCollection:cacheKey.collection // mutable string protection
|
4429
|
-
withRowid:rowid];
|
4567
|
+
[extTransaction handleReplaceMetadata:nil forCollectionKey:cacheKey withRowid:rowid];
|
4430
4568
|
}
|
4431
4569
|
}
|
4432
4570
|
|
4571
|
+
/**
|
4572
|
+
* DEPRECATED: Use replacePrimitiveMetadata:forKey:inCollection: instead.
|
4573
|
+
**/
|
4574
|
+
- (void)setPrimitiveMetadata:(NSData *)primitiveMetadata forKey:(NSString *)key inCollection:(NSString *)collection
|
4575
|
+
{
|
4576
|
+
[self replacePrimitiveMetadata:primitiveMetadata forKey:key inCollection:collection];
|
4577
|
+
}
|
4578
|
+
|
4433
4579
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
4434
4580
|
#pragma mark Object & Metadata
|
4435
4581
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
@@ -4591,6 +4737,8 @@
|
|
4591
4737
|
isMutated = YES; // mutation during enumeration protection
|
4592
4738
|
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
4593
4739
|
|
4740
|
+
[connection->keyCache setObject:cacheKey forKey:@(rowid)];
|
4741
|
+
|
4594
4742
|
id _object = nil;
|
4595
4743
|
if (connection->objectPolicy == YapDatabasePolicyContainment) {
|
4596
4744
|
_object = [YapNull null];
|
@@ -4639,25 +4787,138 @@
|
|
4639
4787
|
{
|
4640
4788
|
if (found)
|
4641
4789
|
[extTransaction handleUpdateObject:object
|
4642
|
-
|
4643
|
-
inCollection:cacheKey.collection // mutable string protection
|
4790
|
+
forCollectionKey:cacheKey
|
4644
4791
|
withMetadata:metadata
|
4645
4792
|
rowid:rowid];
|
4646
4793
|
else
|
4647
4794
|
[extTransaction handleInsertObject:object
|
4648
|
-
|
4649
|
-
inCollection:cacheKey.collection // mutable string protection
|
4795
|
+
forCollectionKey:cacheKey
|
4650
4796
|
withMetadata:metadata
|
4651
4797
|
rowid:rowid];
|
4652
4798
|
}
|
4653
4799
|
}
|
4654
4800
|
|
4655
|
-
|
4801
|
+
/**
|
4802
|
+
* If a row with the given key/collection exists, then replaces the object for that row with the new value.
|
4803
|
+
* It only replaces the object. The metadata for the row doesn't change.
|
4804
|
+
*
|
4805
|
+
* If there is no row in the database for the given key/collection then this method does nothing.
|
4806
|
+
*
|
4807
|
+
* If you pass nil for the object, then this method will remove
|
4808
|
+
**/
|
4809
|
+
- (void)replaceObject:(id)object forKey:(NSString *)key inCollection:(NSString *)collection
|
4656
4810
|
{
|
4811
|
+
int64_t rowid = 0;
|
4812
|
+
if ([self getRowid:&rowid forKey:key inCollection:collection])
|
4813
|
+
{
|
4814
|
+
[self replaceObject:object forKey:key inCollection:collection withRowid:rowid];
|
4815
|
+
}
|
4816
|
+
}
|
4817
|
+
|
4818
|
+
- (void)replaceObject:(id)object forKey:(NSString *)key inCollection:(NSString *)collection withRowid:(int64_t)rowid
|
4819
|
+
{
|
4820
|
+
if (object == nil)
|
4821
|
+
{
|
4822
|
+
[self removeObjectForKey:key inCollection:collection];
|
4823
|
+
return;
|
4824
|
+
}
|
4825
|
+
|
4826
|
+
NSAssert(key != nil, @"Internal error");
|
4657
4827
|
if (collection == nil) collection = @"";
|
4658
4828
|
|
4829
|
+
if (connection->database->objectSanitizer)
|
4830
|
+
{
|
4831
|
+
object = connection->database->objectSanitizer(collection, key, object);
|
4832
|
+
if (object == nil)
|
4833
|
+
{
|
4834
|
+
YDBLogWarn(@"Object sanitizer returned nil for key(%@) object: %@", key, object);
|
4835
|
+
|
4836
|
+
[self removeObjectForKey:key inCollection:collection withRowid:rowid];
|
4837
|
+
return;
|
4838
|
+
}
|
4839
|
+
}
|
4840
|
+
|
4841
|
+
sqlite3_stmt *statement = [connection updateObjectForRowidStatement];
|
4842
|
+
if (statement == NULL) return;
|
4843
|
+
|
4844
|
+
// UPDATE "database2" SET "data" = ? WHERE "rowid" = ?;
|
4845
|
+
//
|
4846
|
+
// To use SQLITE_STATIC on our data blob, we use the objc_precise_lifetime attribute.
|
4847
|
+
// This ensures the data isn't released until it goes out of scope.
|
4848
|
+
|
4849
|
+
__attribute__((objc_precise_lifetime)) NSData *rawData =
|
4850
|
+
connection->database->objectSerializer(collection, key, object);
|
4851
|
+
sqlite3_bind_blob(statement, 1, rawData.bytes, (int)rawData.length, SQLITE_STATIC);
|
4852
|
+
|
4853
|
+
sqlite3_bind_int64(statement, 2, rowid);
|
4854
|
+
|
4855
|
+
BOOL updated = YES;
|
4856
|
+
|
4857
|
+
int status = sqlite3_step(statement);
|
4858
|
+
if (status != SQLITE_DONE)
|
4859
|
+
{
|
4860
|
+
YDBLogError(@"Error executing 'updateDataForRowidStatement': %d %s",
|
4861
|
+
status, sqlite3_errmsg(connection->db));
|
4862
|
+
updated = NO;
|
4863
|
+
}
|
4864
|
+
|
4865
|
+
sqlite3_clear_bindings(statement);
|
4866
|
+
sqlite3_reset(statement);
|
4867
|
+
|
4868
|
+
if (!updated) return;
|
4869
|
+
|
4870
|
+
connection->hasDiskChanges = YES;
|
4871
|
+
isMutated = YES; // mutation during enumeration protection
|
4872
|
+
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
4873
|
+
|
4874
|
+
id _object = nil;
|
4875
|
+
if (connection->objectPolicy == YapDatabasePolicyContainment) {
|
4876
|
+
_object = [YapNull null];
|
4877
|
+
}
|
4878
|
+
else if (connection->objectPolicy == YapDatabasePolicyShare) {
|
4879
|
+
_object = object;
|
4880
|
+
}
|
4881
|
+
else // if (connection->objectPolicy = YapDatabasePolicyCopy)
|
4882
|
+
{
|
4883
|
+
if ([object conformsToProtocol:@protocol(NSCopying)])
|
4884
|
+
_object = [object copy];
|
4885
|
+
else
|
4886
|
+
_object = [YapNull null];
|
4887
|
+
}
|
4888
|
+
|
4889
|
+
[connection->objectCache setObject:object forKey:cacheKey];
|
4890
|
+
[connection->objectChanges setObject:_object forKey:cacheKey];
|
4891
|
+
|
4892
|
+
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4893
|
+
{
|
4894
|
+
[extTransaction handleReplaceObject:object forCollectionKey:cacheKey withRowid:rowid];
|
4895
|
+
}
|
4896
|
+
}
|
4897
|
+
|
4898
|
+
/**
|
4899
|
+
* If a row with the given key/collection exists, then replaces the metadata for that row with the new value.
|
4900
|
+
* It only replaces the metadata. The object for the row doesn't change.
|
4901
|
+
*
|
4902
|
+
* If there is no row in the database for the given key/collection then this method does nothing.
|
4903
|
+
*
|
4904
|
+
* If you pass nil for the metadata, any metadata previously associated with the key/collection is removed.
|
4905
|
+
**/
|
4906
|
+
- (void)replaceMetadata:(id)metadata forKey:(NSString *)key inCollection:(NSString *)collection
|
4907
|
+
{
|
4659
4908
|
int64_t rowid = 0;
|
4660
|
-
if (
|
4909
|
+
if ([self getRowid:&rowid forKey:key inCollection:collection])
|
4910
|
+
{
|
4911
|
+
[self replaceMetadata:metadata forKey:key inCollection:collection withRowid:rowid];
|
4912
|
+
}
|
4913
|
+
}
|
4914
|
+
|
4915
|
+
- (void)replaceMetadata:(id)metadata
|
4916
|
+
forKey:(NSString *)key
|
4917
|
+
inCollection:(NSString *)collection
|
4918
|
+
withRowid:(int64_t)rowid
|
4919
|
+
{
|
4920
|
+
NSAssert(key != nil, @"Internal error");
|
4921
|
+
if (collection == nil) collection = @"";
|
4661
4922
|
|
4662
4923
|
if (metadata && connection->database->metadataSanitizer)
|
4663
4924
|
{
|
@@ -4729,13 +4990,18 @@
|
|
4729
4990
|
|
4730
4991
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4731
4992
|
{
|
4732
|
-
[extTransaction
|
4733
|
-
forKey:cacheKey.key // mutable string protection
|
4734
|
-
inCollection:cacheKey.collection // mutable string protection
|
4735
|
-
withRowid:rowid];
|
4993
|
+
[extTransaction handleReplaceMetadata:metadata forCollectionKey:cacheKey withRowid:rowid];
|
4736
4994
|
}
|
4737
4995
|
}
|
4738
4996
|
|
4997
|
+
/**
|
4998
|
+
* DEPRECATED: Use replaceMetadata:forKey:inCollection: instead.
|
4999
|
+
**/
|
5000
|
+
- (void)setMetadata:(id)metadata forKey:(NSString *)key inCollection:(NSString *)collection
|
5001
|
+
{
|
5002
|
+
[self replaceMetadata:metadata forKey:key inCollection:collection];
|
5003
|
+
}
|
5004
|
+
|
4739
5005
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
4740
5006
|
#pragma mark Touch
|
4741
5007
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
@@ -4757,9 +5023,7 @@
|
|
4757
5023
|
|
4758
5024
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4759
5025
|
{
|
4760
|
-
[extTransaction
|
4761
|
-
inCollection:cacheKey.collection // mutable string protection
|
4762
|
-
withRowid:rowid];
|
5026
|
+
[extTransaction handleTouchObjectForCollectionKey:cacheKey withRowid:rowid];
|
4763
5027
|
}
|
4764
5028
|
}
|
4765
5029
|
|
@@ -4777,9 +5041,7 @@
|
|
4777
5041
|
|
4778
5042
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4779
5043
|
{
|
4780
|
-
[extTransaction
|
4781
|
-
inCollection:cacheKey.collection // mutable string protection
|
4782
|
-
withRowid:rowid];
|
5044
|
+
[extTransaction handleTouchMetadataForCollectionKey:cacheKey withRowid:rowid];
|
4783
5045
|
}
|
4784
5046
|
}
|
4785
5047
|
|
@@ -4787,13 +5049,11 @@
|
|
4787
5049
|
#pragma mark Remove
|
4788
5050
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
4789
5051
|
|
4790
|
-
- (void)removeObjectForKey:(NSString *)key inCollection:(NSString *)collection
|
5052
|
+
- (void)removeObjectForKey:(NSString *)key inCollection:(NSString *)collection withRowid:(int64_t)rowid
|
4791
5053
|
{
|
5054
|
+
if (key == nil) return;
|
4792
5055
|
if (collection == nil) collection = @"";
|
4793
5056
|
|
4794
|
-
int64_t rowid = 0;
|
4795
|
-
if (![self getRowid:&rowid forKey:key inCollection:collection]) return;
|
4796
|
-
|
4797
5057
|
sqlite3_stmt *statement = [connection removeForRowidStatement];
|
4798
5058
|
if (statement == NULL) return;
|
4799
5059
|
|
@@ -4819,19 +5079,29 @@
|
|
4819
5079
|
connection->hasDiskChanges = YES;
|
4820
5080
|
isMutated = YES; // mutation during enumeration protection
|
4821
5081
|
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
5082
|
+
NSNumber *rowidNumber = @(rowid);
|
4822
5083
|
|
5084
|
+
[connection->keyCache removeObjectForKey:rowidNumber];
|
4823
5085
|
[connection->objectCache removeObjectForKey:cacheKey];
|
4824
5086
|
[connection->metadataCache removeObjectForKey:cacheKey];
|
4825
5087
|
|
4826
5088
|
[connection->objectChanges removeObjectForKey:cacheKey];
|
4827
5089
|
[connection->metadataChanges removeObjectForKey:cacheKey];
|
4828
5090
|
[connection->removedKeys addObject:cacheKey];
|
5091
|
+
[connection->removedRowids addObject:rowidNumber];
|
4829
5092
|
|
4830
5093
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
4831
5094
|
{
|
4832
|
-
[extTransaction
|
4833
|
-
|
4834
|
-
|
5095
|
+
[extTransaction handleRemoveObjectForCollectionKey:cacheKey withRowid:rowid];
|
5096
|
+
}
|
5097
|
+
}
|
5098
|
+
|
5099
|
+
- (void)removeObjectForKey:(NSString *)key inCollection:(NSString *)collection
|
5100
|
+
{
|
5101
|
+
int64_t rowid = 0;
|
5102
|
+
if ([self getRowid:&rowid forKey:key inCollection:collection])
|
5103
|
+
{
|
5104
|
+
[self removeObjectForKey:key inCollection:collection withRowid:rowid];
|
4835
5105
|
}
|
4836
5106
|
}
|
4837
5107
|
|
@@ -4998,6 +5268,9 @@
|
|
4998
5268
|
connection->hasDiskChanges = YES;
|
4999
5269
|
isMutated = YES; // mutation during enumeration protection
|
5000
5270
|
|
5271
|
+
[connection->keyCache removeObjectsForKeys:foundRowids];
|
5272
|
+
[connection->removedRowids addObjectsFromArray:foundRowids];
|
5273
|
+
|
5001
5274
|
for (NSString *key in foundKeys)
|
5002
5275
|
{
|
5003
5276
|
YapCollectionKey *cacheKey = [[YapCollectionKey alloc] initWithCollection:collection key:key];
|
@@ -5038,38 +5311,82 @@
|
|
5038
5311
|
|
5039
5312
|
// Purge the caches and changesets
|
5040
5313
|
|
5041
|
-
NSMutableArray *
|
5314
|
+
NSMutableArray *toRemove = [NSMutableArray array];
|
5042
5315
|
|
5043
|
-
|
5316
|
+
{ // keyCache
|
5044
5317
|
|
5045
|
-
|
5046
|
-
|
5047
|
-
|
5048
|
-
|
5049
|
-
|
5050
|
-
|
5051
|
-
|
5052
|
-
|
5053
|
-
|
5054
|
-
|
5055
|
-
|
5056
|
-
|
5057
|
-
for (id key in [connection->objectChanges keyEnumerator]) {
|
5058
|
-
block(key, NULL);
|
5318
|
+
[connection->keyCache enumerateKeysAndObjectsWithBlock:^(id key, id obj, BOOL *stop) {
|
5319
|
+
|
5320
|
+
__unsafe_unretained NSNumber *rowidNumber = (NSNumber *)key;
|
5321
|
+
__unsafe_unretained YapCollectionKey *collectionKey = (YapCollectionKey *)obj;
|
5322
|
+
if ([collectionKey.collection isEqualToString:collection])
|
5323
|
+
{
|
5324
|
+
[toRemove addObject:rowidNumber];
|
5325
|
+
}
|
5326
|
+
}];
|
5327
|
+
|
5328
|
+
[connection->keyCache removeObjectsForKeys:toRemove];
|
5329
|
+
[toRemove removeAllObjects];
|
5059
5330
|
}
|
5060
|
-
[connection->objectChanges removeObjectsForKeys:keysToRemove];
|
5061
5331
|
|
5062
|
-
|
5332
|
+
{ // objectCache
|
5333
|
+
|
5334
|
+
[connection->objectCache enumerateKeysWithBlock:^(id key, BOOL *stop) {
|
5335
|
+
|
5336
|
+
__unsafe_unretained YapCollectionKey *cacheKey = (YapCollectionKey *)key;
|
5337
|
+
if ([cacheKey.collection isEqualToString:collection])
|
5338
|
+
{
|
5339
|
+
[toRemove addObject:cacheKey];
|
5340
|
+
}
|
5341
|
+
}];
|
5342
|
+
|
5343
|
+
[connection->objectCache removeObjectsForKeys:toRemove];
|
5344
|
+
[toRemove removeAllObjects];
|
5345
|
+
}
|
5063
5346
|
|
5064
|
-
|
5065
|
-
|
5347
|
+
{ // objectChanges
|
5348
|
+
|
5349
|
+
for (id key in [connection->objectChanges keyEnumerator])
|
5350
|
+
{
|
5351
|
+
__unsafe_unretained YapCollectionKey *cacheKey = (YapCollectionKey *)key;
|
5352
|
+
if ([cacheKey.collection isEqualToString:collection])
|
5353
|
+
{
|
5354
|
+
[toRemove addObject:cacheKey];
|
5355
|
+
}
|
5356
|
+
}
|
5357
|
+
|
5358
|
+
[connection->objectChanges removeObjectsForKeys:toRemove];
|
5359
|
+
[toRemove removeAllObjects];
|
5360
|
+
}
|
5066
5361
|
|
5067
|
-
|
5362
|
+
{ // metadataCache
|
5363
|
+
|
5364
|
+
[connection->metadataCache enumerateKeysWithBlock:^(id key, BOOL *stop) {
|
5365
|
+
|
5366
|
+
__unsafe_unretained YapCollectionKey *cacheKey = (YapCollectionKey *)key;
|
5367
|
+
if ([cacheKey.collection isEqualToString:collection])
|
5368
|
+
{
|
5369
|
+
[toRemove addObject:cacheKey];
|
5370
|
+
}
|
5371
|
+
}];
|
5372
|
+
|
5373
|
+
[connection->metadataCache removeObjectsForKeys:toRemove];
|
5374
|
+
[toRemove removeAllObjects];
|
5375
|
+
}
|
5068
5376
|
|
5069
|
-
|
5070
|
-
|
5377
|
+
{ // metadataChanges
|
5378
|
+
|
5379
|
+
for (id key in [connection->metadataChanges keyEnumerator])
|
5380
|
+
{
|
5381
|
+
__unsafe_unretained YapCollectionKey *cacheKey = (YapCollectionKey *)key;
|
5382
|
+
if ([cacheKey.collection isEqualToString:collection])
|
5383
|
+
{
|
5384
|
+
[toRemove addObject:cacheKey];
|
5385
|
+
}
|
5386
|
+
}
|
5387
|
+
|
5388
|
+
[connection->metadataChanges removeObjectsForKeys:toRemove];
|
5071
5389
|
}
|
5072
|
-
[connection->metadataChanges removeObjectsForKeys:keysToRemove];
|
5073
5390
|
|
5074
5391
|
[connection->removedCollections addObject:collection];
|
5075
5392
|
|
@@ -5230,6 +5547,8 @@
|
|
5230
5547
|
connection->hasDiskChanges = YES;
|
5231
5548
|
isMutated = YES; // mutation during enumeration protection
|
5232
5549
|
|
5550
|
+
[connection->removedRowids addObjectsFromArray:foundRowids];
|
5551
|
+
|
5233
5552
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|
5234
5553
|
{
|
5235
5554
|
[extTransaction handleRemoveObjectsForKeys:foundKeys
|
@@ -5271,6 +5590,7 @@
|
|
5271
5590
|
[connection->metadataChanges removeAllObjects];
|
5272
5591
|
[connection->removedKeys removeAllObjects];
|
5273
5592
|
[connection->removedCollections removeAllObjects];
|
5593
|
+
[connection->removedRowids removeAllObjects];
|
5274
5594
|
connection->allKeysRemoved = YES;
|
5275
5595
|
|
5276
5596
|
for (id <YapDatabaseExtensionTransaction_Hooks> extTransaction in [self orderedExtensions])
|