motion-yapper 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -29,12 +29,14 @@
|
|
|
29
29
|
* But for conncurrent access between multiple threads you must use multiple connections.
|
|
30
30
|
**/
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
enum {
|
|
33
|
+
YapDatabaseConnectionFlushMemoryFlags_None = 0,
|
|
34
|
+
YapDatabaseConnectionFlushMemoryFlags_Caches = 1 << 0,
|
|
35
|
+
YapDatabaseConnectionFlushMemoryFlags_Statements = 1 << 1,
|
|
36
|
+
YapDatabaseConnectionFlushMemoryFlags_All = (YapDatabaseConnectionFlushMemoryFlags_Caches |
|
|
37
|
+
YapDatabaseConnectionFlushMemoryFlags_Statements),
|
|
38
|
+
};
|
|
39
|
+
typedef int YapDatabaseConnectionFlushMemoryFlags;
|
|
38
40
|
|
|
39
41
|
typedef enum {
|
|
40
42
|
YapDatabasePolicyContainment = 0,
|
|
@@ -418,30 +420,30 @@ typedef enum {
|
|
|
418
420
|
* Depending upon how often you use the database connection,
|
|
419
421
|
* you may want to be more or less aggressive on how much stuff you flush.
|
|
420
422
|
*
|
|
421
|
-
*
|
|
422
|
-
* No-op. Doesn't flush
|
|
423
|
+
* YapDatabaseConnectionFlushMemoryFlags_None:
|
|
424
|
+
* No-op. Doesn't flush anything.
|
|
423
425
|
*
|
|
424
|
-
*
|
|
425
|
-
* Flushes the object cache and metadata cache.
|
|
426
|
+
* YapDatabaseConnectionFlushMemoryFlags_Caches:
|
|
427
|
+
* Flushes all caches, including the object cache and metadata cache.
|
|
426
428
|
*
|
|
427
|
-
*
|
|
428
|
-
*
|
|
429
|
+
* YapDatabaseConnectionFlushMemoryFlags_Statements:
|
|
430
|
+
* Flushes all pre-compiled sqlite statements.
|
|
429
431
|
*
|
|
430
|
-
*
|
|
431
|
-
* Full flush of all caches and
|
|
432
|
+
* YapDatabaseConnectionFlushMemoryFlags_All:
|
|
433
|
+
* Full flush of all caches and pre-compiled sqlite statements.
|
|
432
434
|
**/
|
|
433
|
-
- (void)
|
|
435
|
+
- (void)flushMemoryWithFlags:(YapDatabaseConnectionFlushMemoryFlags)flags;
|
|
434
436
|
|
|
435
437
|
#if TARGET_OS_IPHONE
|
|
436
438
|
/**
|
|
437
439
|
* When a UIApplicationDidReceiveMemoryWarningNotification is received,
|
|
438
|
-
* the code automatically invokes
|
|
440
|
+
* the code automatically invokes flushMemoryWithFlags and passes the set flags.
|
|
439
441
|
*
|
|
440
|
-
* The default value is
|
|
442
|
+
* The default value is YapDatabaseConnectionFlushMemoryFlags_All.
|
|
441
443
|
*
|
|
442
|
-
* @see
|
|
444
|
+
* @see flushMemoryWithFlags:
|
|
443
445
|
**/
|
|
444
|
-
@property (atomic, assign, readwrite)
|
|
446
|
+
@property (atomic, assign, readwrite) YapDatabaseConnectionFlushMemoryFlags autoFlushMemoryFlags;
|
|
445
447
|
#endif
|
|
446
448
|
|
|
447
449
|
@end
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
static const int ydbLogLevel = YDB_LOG_LEVEL_WARN;
|
|
30
30
|
#endif
|
|
31
31
|
|
|
32
|
+
#define UNLIMITED_CACHE_LIMIT 0
|
|
33
|
+
#define MIN_KEY_CACHE_LIMIT 500
|
|
32
34
|
#define DEFAULT_OBJECT_CACHE_LIMIT 250
|
|
33
35
|
#define DEFAULT_METADATA_CACHE_LIMIT 500
|
|
34
36
|
|
|
@@ -42,6 +44,7 @@
|
|
|
42
44
|
|
|
43
45
|
sqlite3_stmt *yapGetDataForKeyStatement; // Against "yap" database, for internal use
|
|
44
46
|
sqlite3_stmt *yapSetDataForKeyStatement; // Against "yap" database, for internal use
|
|
47
|
+
sqlite3_stmt *yapRemoveForKeyStatement; // Against "yap" database, for internal use
|
|
45
48
|
sqlite3_stmt *yapRemoveExtensionStatement; // Against "yap" database, for internal use
|
|
46
49
|
|
|
47
50
|
sqlite3_stmt *getCollectionCountStatement;
|
|
@@ -50,15 +53,15 @@
|
|
|
50
53
|
sqlite3_stmt *getCountForRowidStatement;
|
|
51
54
|
sqlite3_stmt *getRowidForKeyStatement;
|
|
52
55
|
sqlite3_stmt *getKeyForRowidStatement;
|
|
53
|
-
sqlite3_stmt *getKeyDataForRowidStatement;
|
|
54
|
-
sqlite3_stmt *getKeyMetadataForRowidStatement;
|
|
55
56
|
sqlite3_stmt *getDataForRowidStatement;
|
|
57
|
+
sqlite3_stmt *getMetadataForRowidStatement;
|
|
56
58
|
sqlite3_stmt *getAllForRowidStatement;
|
|
57
59
|
sqlite3_stmt *getDataForKeyStatement;
|
|
58
60
|
sqlite3_stmt *getMetadataForKeyStatement;
|
|
59
61
|
sqlite3_stmt *getAllForKeyStatement;
|
|
60
62
|
sqlite3_stmt *insertForRowidStatement;
|
|
61
63
|
sqlite3_stmt *updateAllForRowidStatement;
|
|
64
|
+
sqlite3_stmt *updateObjectForRowidStatement;
|
|
62
65
|
sqlite3_stmt *updateMetadataForRowidStatement;
|
|
63
66
|
sqlite3_stmt *removeForRowidStatement;
|
|
64
67
|
sqlite3_stmt *removeCollectionStatement;
|
|
@@ -123,21 +126,41 @@
|
|
|
123
126
|
|
|
124
127
|
YapDatabaseDefaults *defaults = [database defaults];
|
|
125
128
|
|
|
129
|
+
NSUInteger keyCacheLimit = MIN_KEY_CACHE_LIMIT;
|
|
130
|
+
|
|
126
131
|
if (defaults.objectCacheEnabled)
|
|
127
132
|
{
|
|
128
133
|
objectCacheLimit = defaults.objectCacheLimit;
|
|
129
134
|
objectCache = [[YapCache alloc] initWithKeyClass:[YapCollectionKey class]];
|
|
130
135
|
objectCache.countLimit = objectCacheLimit;
|
|
136
|
+
|
|
137
|
+
if (keyCacheLimit != UNLIMITED_CACHE_LIMIT)
|
|
138
|
+
{
|
|
139
|
+
if (objectCacheLimit == UNLIMITED_CACHE_LIMIT)
|
|
140
|
+
keyCacheLimit = UNLIMITED_CACHE_LIMIT;
|
|
141
|
+
else
|
|
142
|
+
keyCacheLimit = MAX(keyCacheLimit, objectCacheLimit);
|
|
143
|
+
}
|
|
131
144
|
}
|
|
132
145
|
if (defaults.metadataCacheEnabled)
|
|
133
146
|
{
|
|
134
147
|
metadataCacheLimit = defaults.metadataCacheLimit;
|
|
135
148
|
metadataCache = [[YapCache alloc] initWithKeyClass:[YapCollectionKey class]];
|
|
136
149
|
metadataCache.countLimit = metadataCacheLimit;
|
|
150
|
+
|
|
151
|
+
if (keyCacheLimit != UNLIMITED_CACHE_LIMIT)
|
|
152
|
+
{
|
|
153
|
+
if (metadataCacheLimit == UNLIMITED_CACHE_LIMIT)
|
|
154
|
+
keyCacheLimit = UNLIMITED_CACHE_LIMIT;
|
|
155
|
+
else
|
|
156
|
+
keyCacheLimit = MAX(keyCacheLimit, objectCacheLimit);
|
|
157
|
+
}
|
|
137
158
|
}
|
|
138
159
|
|
|
160
|
+
keyCache = [[YapCache alloc] initWithKeyClass:[NSNumber class] countLimit:keyCacheLimit];
|
|
161
|
+
|
|
139
162
|
#if TARGET_OS_IPHONE
|
|
140
|
-
self.
|
|
163
|
+
self.autoFlushMemoryFlags = defaults.autoFlushMemoryFlags;
|
|
141
164
|
#endif
|
|
142
165
|
|
|
143
166
|
lock = OS_SPINLOCK_INIT;
|
|
@@ -214,6 +237,7 @@
|
|
|
214
237
|
registeredExtensions = [database registeredExtensions];
|
|
215
238
|
registeredTables = [database registeredTables];
|
|
216
239
|
extensionsOrder = [database extensionsOrder];
|
|
240
|
+
extensionDependencies = [database extensionDependencies];
|
|
217
241
|
|
|
218
242
|
extensionsReady = ([registeredExtensions count] == 0);
|
|
219
243
|
}
|
|
@@ -240,12 +264,43 @@
|
|
|
240
264
|
|
|
241
265
|
[extensions removeAllObjects];
|
|
242
266
|
|
|
267
|
+
[self _flushStatements];
|
|
268
|
+
|
|
269
|
+
if (db)
|
|
270
|
+
{
|
|
271
|
+
if (![database connectionPoolEnqueue:db])
|
|
272
|
+
{
|
|
273
|
+
int status = sqlite3_close(db);
|
|
274
|
+
if (status != SQLITE_OK)
|
|
275
|
+
{
|
|
276
|
+
YDBLogError(@"Error in sqlite_close: %d %s", status, sqlite3_errmsg(db));
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
db = NULL;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
[database removeConnection:self];
|
|
284
|
+
|
|
285
|
+
#if !OS_OBJECT_USE_OBJC
|
|
286
|
+
if (connectionQueue)
|
|
287
|
+
dispatch_release(connectionQueue);
|
|
288
|
+
#endif
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
292
|
+
#pragma mark Memory
|
|
293
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
294
|
+
|
|
295
|
+
- (void)_flushStatements
|
|
296
|
+
{
|
|
243
297
|
sqlite_finalize_null(&beginTransactionStatement);
|
|
244
298
|
sqlite_finalize_null(&commitTransactionStatement);
|
|
245
299
|
sqlite_finalize_null(&rollbackTransactionStatement);
|
|
246
300
|
|
|
247
301
|
sqlite_finalize_null(&yapGetDataForKeyStatement);
|
|
248
302
|
sqlite_finalize_null(&yapSetDataForKeyStatement);
|
|
303
|
+
sqlite_finalize_null(&yapRemoveForKeyStatement);
|
|
249
304
|
sqlite_finalize_null(&yapRemoveExtensionStatement);
|
|
250
305
|
|
|
251
306
|
sqlite_finalize_null(&getCollectionCountStatement);
|
|
@@ -254,13 +309,15 @@
|
|
|
254
309
|
sqlite_finalize_null(&getCountForRowidStatement);
|
|
255
310
|
sqlite_finalize_null(&getRowidForKeyStatement);
|
|
256
311
|
sqlite_finalize_null(&getKeyForRowidStatement);
|
|
257
|
-
sqlite_finalize_null(&getKeyDataForRowidStatement);
|
|
258
|
-
sqlite_finalize_null(&getKeyMetadataForRowidStatement);
|
|
259
312
|
sqlite_finalize_null(&getDataForRowidStatement);
|
|
313
|
+
sqlite_finalize_null(&getMetadataForRowidStatement);
|
|
260
314
|
sqlite_finalize_null(&getAllForRowidStatement);
|
|
261
315
|
sqlite_finalize_null(&getDataForKeyStatement);
|
|
316
|
+
sqlite_finalize_null(&getMetadataForKeyStatement);
|
|
317
|
+
sqlite_finalize_null(&getAllForKeyStatement);
|
|
262
318
|
sqlite_finalize_null(&insertForRowidStatement);
|
|
263
319
|
sqlite_finalize_null(&updateAllForRowidStatement);
|
|
320
|
+
sqlite_finalize_null(&updateObjectForRowidStatement);
|
|
264
321
|
sqlite_finalize_null(&updateMetadataForRowidStatement);
|
|
265
322
|
sqlite_finalize_null(&removeForRowidStatement);
|
|
266
323
|
sqlite_finalize_null(&removeCollectionStatement);
|
|
@@ -275,91 +332,25 @@
|
|
|
275
332
|
sqlite_finalize_null(&enumerateKeysAndObjectsInAllCollectionsStatement);
|
|
276
333
|
sqlite_finalize_null(&enumerateRowsInCollectionStatement);
|
|
277
334
|
sqlite_finalize_null(&enumerateRowsInAllCollectionsStatement);
|
|
278
|
-
|
|
279
|
-
if (db)
|
|
280
|
-
{
|
|
281
|
-
if (![database connectionPoolEnqueue:db])
|
|
282
|
-
{
|
|
283
|
-
int status = sqlite3_close(db);
|
|
284
|
-
if (status != SQLITE_OK)
|
|
285
|
-
{
|
|
286
|
-
YDBLogError(@"Error in sqlite_close: %d %s", status, sqlite3_errmsg(db));
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
db = NULL;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
[database removeConnection:self];
|
|
294
|
-
|
|
295
|
-
#if !OS_OBJECT_USE_OBJC
|
|
296
|
-
if (connectionQueue)
|
|
297
|
-
dispatch_release(connectionQueue);
|
|
298
|
-
#endif
|
|
299
335
|
}
|
|
300
336
|
|
|
301
|
-
|
|
302
|
-
#pragma mark Memory
|
|
303
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
304
|
-
|
|
305
|
-
/**
|
|
306
|
-
* Optional override hook.
|
|
307
|
-
* Don't forget to invoke [super _flushMemoryWithLevel:level].
|
|
308
|
-
**/
|
|
309
|
-
- (void)_flushMemoryWithLevel:(int)level
|
|
337
|
+
- (void)_flushMemoryWithFlags:(YapDatabaseConnectionFlushMemoryFlags)flags
|
|
310
338
|
{
|
|
311
|
-
if (
|
|
339
|
+
if (flags & YapDatabaseConnectionFlushMemoryFlags_Caches)
|
|
312
340
|
{
|
|
341
|
+
[keyCache removeAllObjects];
|
|
313
342
|
[objectCache removeAllObjects];
|
|
314
343
|
[metadataCache removeAllObjects];
|
|
315
344
|
}
|
|
316
345
|
|
|
317
|
-
if (
|
|
318
|
-
{
|
|
319
|
-
|
|
320
|
-
sqlite_finalize_null(&rollbackTransactionStatement);
|
|
321
|
-
|
|
322
|
-
sqlite_finalize_null(&getCollectionCountStatement);
|
|
323
|
-
sqlite_finalize_null(&getKeyCountForCollectionStatement);
|
|
324
|
-
sqlite_finalize_null(&getKeyCountForAllStatement);
|
|
325
|
-
sqlite_finalize_null(&getCountForRowidStatement);
|
|
326
|
-
sqlite_finalize_null(&getKeyForRowidStatement);
|
|
327
|
-
sqlite_finalize_null(&getKeyDataForRowidStatement);
|
|
328
|
-
sqlite_finalize_null(&getKeyMetadataForRowidStatement);
|
|
329
|
-
sqlite_finalize_null(&getDataForRowidStatement);
|
|
330
|
-
sqlite_finalize_null(&getAllForRowidStatement);
|
|
331
|
-
sqlite_finalize_null(&updateMetadataForRowidStatement);
|
|
332
|
-
sqlite_finalize_null(&removeForRowidStatement);
|
|
333
|
-
sqlite_finalize_null(&removeCollectionStatement);
|
|
334
|
-
sqlite_finalize_null(&removeAllStatement);
|
|
335
|
-
sqlite_finalize_null(&enumerateCollectionsStatement);
|
|
336
|
-
sqlite_finalize_null(&enumerateCollectionsForKeyStatement);
|
|
337
|
-
sqlite_finalize_null(&enumerateKeysInCollectionStatement);
|
|
338
|
-
sqlite_finalize_null(&enumerateKeysInAllCollectionsStatement);
|
|
339
|
-
sqlite_finalize_null(&enumerateKeysAndMetadataInCollectionStatement);
|
|
340
|
-
sqlite_finalize_null(&enumerateKeysAndMetadataInAllCollectionsStatement);
|
|
341
|
-
sqlite_finalize_null(&enumerateKeysAndObjectsInCollectionStatement);
|
|
342
|
-
sqlite_finalize_null(&enumerateKeysAndObjectsInAllCollectionsStatement);
|
|
343
|
-
sqlite_finalize_null(&enumerateRowsInCollectionStatement);
|
|
344
|
-
sqlite_finalize_null(&enumerateRowsInAllCollectionsStatement);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
if (level >= YapDatabaseConnectionFlushMemoryLevelFull)
|
|
348
|
-
{
|
|
349
|
-
sqlite_finalize_null(&yapGetDataForKeyStatement);
|
|
350
|
-
sqlite_finalize_null(&yapSetDataForKeyStatement);
|
|
351
|
-
sqlite_finalize_null(&beginTransactionStatement);
|
|
352
|
-
sqlite_finalize_null(&commitTransactionStatement);
|
|
353
|
-
|
|
354
|
-
sqlite_finalize_null(&getRowidForKeyStatement);
|
|
355
|
-
sqlite_finalize_null(&getDataForKeyStatement);
|
|
356
|
-
sqlite_finalize_null(&insertForRowidStatement);
|
|
357
|
-
sqlite_finalize_null(&updateAllForRowidStatement);
|
|
346
|
+
if (flags & YapDatabaseConnectionFlushMemoryFlags_Statements)
|
|
347
|
+
{
|
|
348
|
+
[self _flushStatements];
|
|
358
349
|
}
|
|
359
350
|
|
|
360
351
|
[extensions enumerateKeysAndObjectsUsingBlock:^(id extNameObj, id extConnectionObj, BOOL *stop) {
|
|
361
352
|
|
|
362
|
-
[(YapDatabaseExtensionConnection *)extConnectionObj
|
|
353
|
+
[(YapDatabaseExtensionConnection *)extConnectionObj _flushMemoryWithFlags:flags];
|
|
363
354
|
}];
|
|
364
355
|
}
|
|
365
356
|
|
|
@@ -381,11 +372,11 @@
|
|
|
381
372
|
* YapDatabaseConnectionFlushMemoryLevelFull (3):
|
|
382
373
|
* Full flush of all caches and removes all pre-compiled sqlite statements.
|
|
383
374
|
**/
|
|
384
|
-
- (void)
|
|
375
|
+
- (void)flushMemoryWithFlags:(YapDatabaseConnectionFlushMemoryFlags)flags
|
|
385
376
|
{
|
|
386
377
|
dispatch_block_t block = ^{
|
|
387
378
|
|
|
388
|
-
[self
|
|
379
|
+
[self _flushMemoryWithFlags:flags];
|
|
389
380
|
};
|
|
390
381
|
|
|
391
382
|
if (dispatch_get_specific(IsOnConnectionQueueKey))
|
|
@@ -397,7 +388,7 @@
|
|
|
397
388
|
#if TARGET_OS_IPHONE
|
|
398
389
|
- (void)didReceiveMemoryWarning:(NSNotification *)notification
|
|
399
390
|
{
|
|
400
|
-
[self
|
|
391
|
+
[self flushMemoryWithFlags:[self autoFlushMemoryFlags]];
|
|
401
392
|
}
|
|
402
393
|
#endif
|
|
403
394
|
|
|
@@ -408,10 +399,8 @@
|
|
|
408
399
|
@synthesize database = database;
|
|
409
400
|
@synthesize name = _name;
|
|
410
401
|
|
|
411
|
-
//@synthesize connectionQueue = connectionQueue;
|
|
412
|
-
|
|
413
402
|
#if TARGET_OS_IPHONE
|
|
414
|
-
@synthesize
|
|
403
|
+
@synthesize autoFlushMemoryFlags;
|
|
415
404
|
#endif
|
|
416
405
|
|
|
417
406
|
- (BOOL)objectCacheEnabled
|
|
@@ -446,6 +435,8 @@
|
|
|
446
435
|
{
|
|
447
436
|
objectCache = nil;
|
|
448
437
|
}
|
|
438
|
+
|
|
439
|
+
[self updateKeyCacheLimit];
|
|
449
440
|
};
|
|
450
441
|
|
|
451
442
|
if (dispatch_get_specific(IsOnConnectionQueueKey))
|
|
@@ -480,11 +471,12 @@
|
|
|
480
471
|
|
|
481
472
|
if (objectCache == nil)
|
|
482
473
|
{
|
|
483
|
-
|
|
474
|
+
// Limit changed, but objectCache is still disabled
|
|
484
475
|
}
|
|
485
476
|
else
|
|
486
477
|
{
|
|
487
478
|
objectCache.countLimit = objectCacheLimit;
|
|
479
|
+
[self updateKeyCacheLimit];
|
|
488
480
|
}
|
|
489
481
|
}
|
|
490
482
|
};
|
|
@@ -527,6 +519,8 @@
|
|
|
527
519
|
{
|
|
528
520
|
metadataCache = nil;
|
|
529
521
|
}
|
|
522
|
+
|
|
523
|
+
[self updateKeyCacheLimit];
|
|
530
524
|
};
|
|
531
525
|
|
|
532
526
|
if (dispatch_get_specific(IsOnConnectionQueueKey))
|
|
@@ -561,11 +555,12 @@
|
|
|
561
555
|
|
|
562
556
|
if (metadataCache == nil)
|
|
563
557
|
{
|
|
564
|
-
|
|
558
|
+
// Limit changed but metadataCache still disabled
|
|
565
559
|
}
|
|
566
560
|
else
|
|
567
561
|
{
|
|
568
562
|
metadataCache.countLimit = metadataCacheLimit;
|
|
563
|
+
[self updateKeyCacheLimit];
|
|
569
564
|
}
|
|
570
565
|
}
|
|
571
566
|
};
|
|
@@ -664,6 +659,39 @@
|
|
|
664
659
|
return result;
|
|
665
660
|
}
|
|
666
661
|
|
|
662
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
663
|
+
#pragma mark Utilities
|
|
664
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
665
|
+
|
|
666
|
+
- (void)updateKeyCacheLimit
|
|
667
|
+
{
|
|
668
|
+
NSUInteger keyCacheLimit = MIN_KEY_CACHE_LIMIT;
|
|
669
|
+
|
|
670
|
+
if (keyCacheLimit != UNLIMITED_CACHE_LIMIT)
|
|
671
|
+
{
|
|
672
|
+
if (objectCache)
|
|
673
|
+
{
|
|
674
|
+
if (objectCacheLimit == UNLIMITED_CACHE_LIMIT)
|
|
675
|
+
keyCacheLimit = UNLIMITED_CACHE_LIMIT;
|
|
676
|
+
else
|
|
677
|
+
keyCacheLimit = MAX(keyCacheLimit, objectCacheLimit);
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
if (keyCacheLimit != UNLIMITED_CACHE_LIMIT)
|
|
682
|
+
{
|
|
683
|
+
if (metadataCache)
|
|
684
|
+
{
|
|
685
|
+
if (objectCacheLimit == UNLIMITED_CACHE_LIMIT)
|
|
686
|
+
keyCacheLimit = UNLIMITED_CACHE_LIMIT;
|
|
687
|
+
else
|
|
688
|
+
keyCacheLimit = MAX(keyCacheLimit, objectCacheLimit);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
keyCache.countLimit = keyCacheLimit;
|
|
693
|
+
}
|
|
694
|
+
|
|
667
695
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
668
696
|
#pragma mark Statements
|
|
669
697
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
@@ -678,7 +706,7 @@
|
|
|
678
706
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &beginTransactionStatement, NULL);
|
|
679
707
|
if (status != SQLITE_OK)
|
|
680
708
|
{
|
|
681
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
709
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
682
710
|
}
|
|
683
711
|
}
|
|
684
712
|
|
|
@@ -695,7 +723,7 @@
|
|
|
695
723
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &commitTransactionStatement, NULL);
|
|
696
724
|
if (status != SQLITE_OK)
|
|
697
725
|
{
|
|
698
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
726
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
699
727
|
}
|
|
700
728
|
}
|
|
701
729
|
|
|
@@ -712,7 +740,7 @@
|
|
|
712
740
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &rollbackTransactionStatement, NULL);
|
|
713
741
|
if (status != SQLITE_OK)
|
|
714
742
|
{
|
|
715
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
743
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
716
744
|
}
|
|
717
745
|
}
|
|
718
746
|
|
|
@@ -729,7 +757,7 @@
|
|
|
729
757
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &yapGetDataForKeyStatement, NULL);
|
|
730
758
|
if (status != SQLITE_OK)
|
|
731
759
|
{
|
|
732
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
760
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
733
761
|
}
|
|
734
762
|
}
|
|
735
763
|
|
|
@@ -746,13 +774,30 @@
|
|
|
746
774
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &yapSetDataForKeyStatement, NULL);
|
|
747
775
|
if (status != SQLITE_OK)
|
|
748
776
|
{
|
|
749
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
777
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
750
778
|
}
|
|
751
779
|
}
|
|
752
780
|
|
|
753
781
|
return yapSetDataForKeyStatement;
|
|
754
782
|
}
|
|
755
783
|
|
|
784
|
+
- (sqlite3_stmt *)yapRemoveForKeyStatement
|
|
785
|
+
{
|
|
786
|
+
if (yapRemoveForKeyStatement == NULL)
|
|
787
|
+
{
|
|
788
|
+
char *stmt = "DELETE FROM \"yap2\" WHERE \"extension\" = ? AND \"key\" = ?;";
|
|
789
|
+
int stmtLen = (int)strlen(stmt);
|
|
790
|
+
|
|
791
|
+
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &yapRemoveForKeyStatement, NULL);
|
|
792
|
+
if (status != SQLITE_OK)
|
|
793
|
+
{
|
|
794
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
return yapRemoveForKeyStatement;
|
|
799
|
+
}
|
|
800
|
+
|
|
756
801
|
- (sqlite3_stmt *)yapRemoveExtensionStatement
|
|
757
802
|
{
|
|
758
803
|
if (yapRemoveExtensionStatement == NULL)
|
|
@@ -763,7 +808,7 @@
|
|
|
763
808
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &yapRemoveExtensionStatement, NULL);
|
|
764
809
|
if (status != SQLITE_OK)
|
|
765
810
|
{
|
|
766
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
811
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
767
812
|
}
|
|
768
813
|
}
|
|
769
814
|
|
|
@@ -780,7 +825,7 @@
|
|
|
780
825
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getCollectionCountStatement, NULL);
|
|
781
826
|
if (status != SQLITE_OK)
|
|
782
827
|
{
|
|
783
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
828
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
784
829
|
}
|
|
785
830
|
}
|
|
786
831
|
|
|
@@ -797,7 +842,7 @@
|
|
|
797
842
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getKeyCountForCollectionStatement, NULL);
|
|
798
843
|
if (status != SQLITE_OK)
|
|
799
844
|
{
|
|
800
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
845
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
801
846
|
}
|
|
802
847
|
}
|
|
803
848
|
|
|
@@ -814,7 +859,7 @@
|
|
|
814
859
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getKeyCountForAllStatement, NULL);
|
|
815
860
|
if (status != SQLITE_OK)
|
|
816
861
|
{
|
|
817
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
862
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
818
863
|
}
|
|
819
864
|
}
|
|
820
865
|
|
|
@@ -831,7 +876,7 @@
|
|
|
831
876
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getCountForRowidStatement, NULL);
|
|
832
877
|
if (status != SQLITE_OK)
|
|
833
878
|
{
|
|
834
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
879
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
835
880
|
}
|
|
836
881
|
}
|
|
837
882
|
|
|
@@ -848,7 +893,7 @@
|
|
|
848
893
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getRowidForKeyStatement, NULL);
|
|
849
894
|
if (status != SQLITE_OK)
|
|
850
895
|
{
|
|
851
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
896
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
852
897
|
}
|
|
853
898
|
}
|
|
854
899
|
|
|
@@ -865,75 +910,58 @@
|
|
|
865
910
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getKeyForRowidStatement, NULL);
|
|
866
911
|
if (status != SQLITE_OK)
|
|
867
912
|
{
|
|
868
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
913
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
869
914
|
}
|
|
870
915
|
}
|
|
871
916
|
|
|
872
917
|
return getKeyForRowidStatement;
|
|
873
918
|
}
|
|
874
919
|
|
|
875
|
-
- (sqlite3_stmt *)
|
|
876
|
-
{
|
|
877
|
-
if (getKeyDataForRowidStatement == NULL)
|
|
878
|
-
{
|
|
879
|
-
char *stmt = "SELECT \"collection\", \"key\", \"data\" FROM \"database2\" WHERE \"rowid\" = ?;";
|
|
880
|
-
int stmtLen = (int)strlen(stmt);
|
|
881
|
-
|
|
882
|
-
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getKeyDataForRowidStatement, NULL);
|
|
883
|
-
if (status != SQLITE_OK)
|
|
884
|
-
{
|
|
885
|
-
YDBLogError(@"Error creating '%@': %d %s", NSStringFromSelector(_cmd), status, sqlite3_errmsg(db));
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
|
|
889
|
-
return getKeyDataForRowidStatement;
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
- (sqlite3_stmt *)getKeyMetadataForRowidStatement
|
|
920
|
+
- (sqlite3_stmt *)getDataForRowidStatement
|
|
893
921
|
{
|
|
894
|
-
if (
|
|
922
|
+
if (getDataForRowidStatement == NULL)
|
|
895
923
|
{
|
|
896
|
-
char *stmt = "SELECT \"
|
|
924
|
+
char *stmt = "SELECT \"data\" FROM \"database2\" WHERE \"rowid\" = ?;";
|
|
897
925
|
int stmtLen = (int)strlen(stmt);
|
|
898
926
|
|
|
899
|
-
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &
|
|
927
|
+
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getDataForRowidStatement, NULL);
|
|
900
928
|
if (status != SQLITE_OK)
|
|
901
929
|
{
|
|
902
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
930
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
903
931
|
}
|
|
904
932
|
}
|
|
905
933
|
|
|
906
|
-
return
|
|
934
|
+
return getDataForRowidStatement;
|
|
907
935
|
}
|
|
908
936
|
|
|
909
|
-
- (sqlite3_stmt *)
|
|
937
|
+
- (sqlite3_stmt *)getMetadataForRowidStatement
|
|
910
938
|
{
|
|
911
|
-
if (
|
|
939
|
+
if (getMetadataForRowidStatement == NULL)
|
|
912
940
|
{
|
|
913
|
-
char *stmt = "SELECT \"
|
|
941
|
+
char *stmt = "SELECT \"metadata\" FROM \"database2\" WHERE \"rowid\" = ?;";
|
|
914
942
|
int stmtLen = (int)strlen(stmt);
|
|
915
943
|
|
|
916
|
-
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &
|
|
944
|
+
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getMetadataForRowidStatement, NULL);
|
|
917
945
|
if (status != SQLITE_OK)
|
|
918
946
|
{
|
|
919
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
947
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
920
948
|
}
|
|
921
949
|
}
|
|
922
950
|
|
|
923
|
-
return
|
|
951
|
+
return getMetadataForRowidStatement;
|
|
924
952
|
}
|
|
925
953
|
|
|
926
954
|
- (sqlite3_stmt *)getAllForRowidStatement
|
|
927
955
|
{
|
|
928
956
|
if (getAllForRowidStatement == NULL)
|
|
929
957
|
{
|
|
930
|
-
char *stmt = "SELECT \"
|
|
958
|
+
char *stmt = "SELECT \"data\", \"metadata\" FROM \"database2\" WHERE \"rowid\" = ?;";
|
|
931
959
|
int stmtLen = (int)strlen(stmt);
|
|
932
960
|
|
|
933
961
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getAllForRowidStatement, NULL);
|
|
934
962
|
if (status != SQLITE_OK)
|
|
935
963
|
{
|
|
936
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
964
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
937
965
|
}
|
|
938
966
|
}
|
|
939
967
|
|
|
@@ -950,7 +978,7 @@
|
|
|
950
978
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getDataForKeyStatement, NULL);
|
|
951
979
|
if (status != SQLITE_OK)
|
|
952
980
|
{
|
|
953
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
981
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
954
982
|
}
|
|
955
983
|
}
|
|
956
984
|
|
|
@@ -967,7 +995,7 @@
|
|
|
967
995
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getMetadataForKeyStatement, NULL);
|
|
968
996
|
if (status != SQLITE_OK)
|
|
969
997
|
{
|
|
970
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
998
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
971
999
|
}
|
|
972
1000
|
}
|
|
973
1001
|
|
|
@@ -984,7 +1012,7 @@
|
|
|
984
1012
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &getAllForKeyStatement, NULL);
|
|
985
1013
|
if (status != SQLITE_OK)
|
|
986
1014
|
{
|
|
987
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1015
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
988
1016
|
}
|
|
989
1017
|
}
|
|
990
1018
|
|
|
@@ -1002,7 +1030,7 @@
|
|
|
1002
1030
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &insertForRowidStatement, NULL);
|
|
1003
1031
|
if (status != SQLITE_OK)
|
|
1004
1032
|
{
|
|
1005
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1033
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1006
1034
|
}
|
|
1007
1035
|
}
|
|
1008
1036
|
|
|
@@ -1019,13 +1047,30 @@
|
|
|
1019
1047
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &updateAllForRowidStatement, NULL);
|
|
1020
1048
|
if (status != SQLITE_OK)
|
|
1021
1049
|
{
|
|
1022
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1050
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1023
1051
|
}
|
|
1024
1052
|
}
|
|
1025
1053
|
|
|
1026
1054
|
return updateAllForRowidStatement;
|
|
1027
1055
|
}
|
|
1028
1056
|
|
|
1057
|
+
- (sqlite3_stmt *)updateObjectForRowidStatement
|
|
1058
|
+
{
|
|
1059
|
+
if (updateObjectForRowidStatement == NULL)
|
|
1060
|
+
{
|
|
1061
|
+
char *stmt = "UPDATE \"database2\" SET \"data\" = ? WHERE \"rowid\" = ?;";
|
|
1062
|
+
int stmtLen = (int)strlen(stmt);
|
|
1063
|
+
|
|
1064
|
+
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &updateObjectForRowidStatement, NULL);
|
|
1065
|
+
if (status != SQLITE_OK)
|
|
1066
|
+
{
|
|
1067
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
return updateObjectForRowidStatement;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1029
1074
|
- (sqlite3_stmt *)updateMetadataForRowidStatement
|
|
1030
1075
|
{
|
|
1031
1076
|
if (updateMetadataForRowidStatement == NULL)
|
|
@@ -1036,7 +1081,7 @@
|
|
|
1036
1081
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &updateMetadataForRowidStatement, NULL);
|
|
1037
1082
|
if (status != SQLITE_OK)
|
|
1038
1083
|
{
|
|
1039
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1084
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1040
1085
|
}
|
|
1041
1086
|
}
|
|
1042
1087
|
|
|
@@ -1053,7 +1098,7 @@
|
|
|
1053
1098
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &removeForRowidStatement, NULL);
|
|
1054
1099
|
if (status != SQLITE_OK)
|
|
1055
1100
|
{
|
|
1056
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1101
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1057
1102
|
}
|
|
1058
1103
|
}
|
|
1059
1104
|
|
|
@@ -1070,7 +1115,7 @@
|
|
|
1070
1115
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &removeCollectionStatement, NULL);
|
|
1071
1116
|
if (status != SQLITE_OK)
|
|
1072
1117
|
{
|
|
1073
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1118
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1074
1119
|
}
|
|
1075
1120
|
}
|
|
1076
1121
|
|
|
@@ -1087,7 +1132,7 @@
|
|
|
1087
1132
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &removeAllStatement, NULL);
|
|
1088
1133
|
if (status != SQLITE_OK)
|
|
1089
1134
|
{
|
|
1090
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1135
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1091
1136
|
}
|
|
1092
1137
|
}
|
|
1093
1138
|
|
|
@@ -1104,7 +1149,7 @@
|
|
|
1104
1149
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateCollectionsStatement, NULL);
|
|
1105
1150
|
if (status != SQLITE_OK)
|
|
1106
1151
|
{
|
|
1107
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1152
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1108
1153
|
}
|
|
1109
1154
|
}
|
|
1110
1155
|
|
|
@@ -1121,7 +1166,7 @@
|
|
|
1121
1166
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateCollectionsForKeyStatement, NULL);
|
|
1122
1167
|
if (status != SQLITE_OK)
|
|
1123
1168
|
{
|
|
1124
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1169
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1125
1170
|
}
|
|
1126
1171
|
}
|
|
1127
1172
|
|
|
@@ -1138,7 +1183,7 @@
|
|
|
1138
1183
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateKeysInCollectionStatement, NULL);
|
|
1139
1184
|
if (status != SQLITE_OK)
|
|
1140
1185
|
{
|
|
1141
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1186
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1142
1187
|
}
|
|
1143
1188
|
}
|
|
1144
1189
|
|
|
@@ -1155,7 +1200,7 @@
|
|
|
1155
1200
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateKeysInAllCollectionsStatement, NULL);
|
|
1156
1201
|
if (status != SQLITE_OK)
|
|
1157
1202
|
{
|
|
1158
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1203
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1159
1204
|
}
|
|
1160
1205
|
}
|
|
1161
1206
|
|
|
@@ -1172,7 +1217,7 @@
|
|
|
1172
1217
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateKeysAndMetadataInCollectionStatement, NULL);
|
|
1173
1218
|
if (status != SQLITE_OK)
|
|
1174
1219
|
{
|
|
1175
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1220
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1176
1221
|
}
|
|
1177
1222
|
}
|
|
1178
1223
|
|
|
@@ -1190,7 +1235,7 @@
|
|
|
1190
1235
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateKeysAndMetadataInAllCollectionsStatement, NULL);
|
|
1191
1236
|
if (status != SQLITE_OK)
|
|
1192
1237
|
{
|
|
1193
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1238
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1194
1239
|
}
|
|
1195
1240
|
}
|
|
1196
1241
|
|
|
@@ -1207,7 +1252,7 @@
|
|
|
1207
1252
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateKeysAndObjectsInCollectionStatement, NULL);
|
|
1208
1253
|
if (status != SQLITE_OK)
|
|
1209
1254
|
{
|
|
1210
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1255
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1211
1256
|
}
|
|
1212
1257
|
}
|
|
1213
1258
|
|
|
@@ -1225,7 +1270,7 @@
|
|
|
1225
1270
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateKeysAndObjectsInAllCollectionsStatement, NULL);
|
|
1226
1271
|
if (status != SQLITE_OK)
|
|
1227
1272
|
{
|
|
1228
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1273
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1229
1274
|
}
|
|
1230
1275
|
}
|
|
1231
1276
|
|
|
@@ -1242,7 +1287,7 @@
|
|
|
1242
1287
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateRowsInCollectionStatement, NULL);
|
|
1243
1288
|
if (status != SQLITE_OK)
|
|
1244
1289
|
{
|
|
1245
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1290
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1246
1291
|
}
|
|
1247
1292
|
}
|
|
1248
1293
|
|
|
@@ -1261,7 +1306,7 @@
|
|
|
1261
1306
|
int status = sqlite3_prepare_v2(db, stmt, stmtLen+1, &enumerateRowsInAllCollectionsStatement, NULL);
|
|
1262
1307
|
if (status != SQLITE_OK)
|
|
1263
1308
|
{
|
|
1264
|
-
YDBLogError(@"Error creating '%@': %d %s",
|
|
1309
|
+
YDBLogError(@"Error creating '%@': %d %s", THIS_METHOD, status, sqlite3_errmsg(db));
|
|
1265
1310
|
}
|
|
1266
1311
|
}
|
|
1267
1312
|
|
|
@@ -1876,13 +1921,19 @@
|
|
|
1876
1921
|
|
|
1877
1922
|
if (objectChanges == nil)
|
|
1878
1923
|
objectChanges = [[NSMutableDictionary alloc] init];
|
|
1924
|
+
|
|
1879
1925
|
if (metadataChanges == nil)
|
|
1880
1926
|
metadataChanges = [[NSMutableDictionary alloc] init];
|
|
1927
|
+
|
|
1881
1928
|
if (removedKeys == nil)
|
|
1882
1929
|
removedKeys = [[NSMutableSet alloc] init];
|
|
1930
|
+
|
|
1883
1931
|
if (removedCollections == nil)
|
|
1884
1932
|
removedCollections = [[NSMutableSet alloc] init];
|
|
1885
1933
|
|
|
1934
|
+
if (removedRowids == nil)
|
|
1935
|
+
removedRowids = [[NSMutableSet alloc] init];
|
|
1936
|
+
|
|
1886
1937
|
allKeysRemoved = NO;
|
|
1887
1938
|
|
|
1888
1939
|
// Pre-Write-Transaction: Step 5 of 5
|
|
@@ -2010,35 +2061,7 @@
|
|
|
2010
2061
|
{
|
|
2011
2062
|
if ([registeredExtensions objectForKey:prevExtensionName] == nil)
|
|
2012
2063
|
{
|
|
2013
|
-
|
|
2014
|
-
Class class = NSClassFromString(className);
|
|
2015
|
-
|
|
2016
|
-
if (className == nil)
|
|
2017
|
-
{
|
|
2018
|
-
YDBLogWarn(@"Unable to auto-unregister extension(%@). Doesn't appear to be registered.",
|
|
2019
|
-
prevExtensionName);
|
|
2020
|
-
}
|
|
2021
|
-
else if (class == NULL)
|
|
2022
|
-
{
|
|
2023
|
-
YDBLogError(@"Unable to auto-unregister extension(%@) with unknown class(%@)",
|
|
2024
|
-
prevExtensionName, className);
|
|
2025
|
-
}
|
|
2026
|
-
if (![class isSubclassOfClass:[YapDatabaseExtension class]])
|
|
2027
|
-
{
|
|
2028
|
-
YDBLogError(@"Unable to auto-unregister extension(%@) with improper class(%@)",
|
|
2029
|
-
prevExtensionName, className);
|
|
2030
|
-
}
|
|
2031
|
-
else
|
|
2032
|
-
{
|
|
2033
|
-
YDBLogInfo(@"Auto-unregistering extension(%@) with class(%@)",
|
|
2034
|
-
prevExtensionName, className);
|
|
2035
|
-
|
|
2036
|
-
// Drop tables
|
|
2037
|
-
[class dropTablesForRegisteredName:prevExtensionName withTransaction:transaction];
|
|
2038
|
-
|
|
2039
|
-
// Drop preferences (rows in yap2 table)
|
|
2040
|
-
[transaction removeAllValuesForExtension:prevExtensionName];
|
|
2041
|
-
}
|
|
2064
|
+
[self _unregisterExtension:prevExtensionName withTransaction:transaction];
|
|
2042
2065
|
}
|
|
2043
2066
|
}
|
|
2044
2067
|
|
|
@@ -2224,13 +2247,19 @@
|
|
|
2224
2247
|
|
|
2225
2248
|
if ([objectChanges count] > 0)
|
|
2226
2249
|
objectChanges = nil;
|
|
2250
|
+
|
|
2227
2251
|
if ([metadataChanges count] > 0)
|
|
2228
2252
|
metadataChanges = nil;
|
|
2253
|
+
|
|
2229
2254
|
if ([removedKeys count] > 0)
|
|
2230
2255
|
removedKeys = nil;
|
|
2256
|
+
|
|
2231
2257
|
if ([removedCollections count] > 0)
|
|
2232
2258
|
removedCollections = nil;
|
|
2233
2259
|
|
|
2260
|
+
if ([removedRowids count] > 0)
|
|
2261
|
+
removedRowids = nil;
|
|
2262
|
+
|
|
2234
2263
|
// Post-Write-Transaction: Step 11 of 11
|
|
2235
2264
|
//
|
|
2236
2265
|
// Drop IsOnConnectionQueueKey flag from writeQueue since we're exiting writeQueue.
|
|
@@ -2386,12 +2415,18 @@
|
|
|
2386
2415
|
|
|
2387
2416
|
if ([objectChanges count] > 0)
|
|
2388
2417
|
objectChanges = nil;
|
|
2418
|
+
|
|
2389
2419
|
if ([metadataChanges count] > 0)
|
|
2390
2420
|
metadataChanges = nil;
|
|
2421
|
+
|
|
2391
2422
|
if ([removedKeys count] > 0)
|
|
2392
2423
|
removedKeys = nil;
|
|
2424
|
+
|
|
2393
2425
|
if ([removedCollections count] > 0)
|
|
2394
2426
|
removedCollections = nil;
|
|
2427
|
+
|
|
2428
|
+
if ([removedRowids count] > 0)
|
|
2429
|
+
removedRowids = nil;
|
|
2395
2430
|
}
|
|
2396
2431
|
|
|
2397
2432
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
@@ -2541,11 +2576,13 @@
|
|
|
2541
2576
|
YapDatabaseRegisteredExtensionsKey,
|
|
2542
2577
|
YapDatabaseRegisteredTablesKey,
|
|
2543
2578
|
YapDatabaseExtensionsOrderKey,
|
|
2579
|
+
YapDatabaseExtensionDependenciesKey,
|
|
2544
2580
|
YapDatabaseNotificationKey,
|
|
2545
2581
|
YapDatabaseObjectChangesKey,
|
|
2546
2582
|
YapDatabaseMetadataChangesKey,
|
|
2547
2583
|
YapDatabaseRemovedKeysKey,
|
|
2548
2584
|
YapDatabaseRemovedCollectionsKey,
|
|
2585
|
+
YapDatabaseRemovedRowidsKey,
|
|
2549
2586
|
YapDatabaseAllKeysRemovedKey ];
|
|
2550
2587
|
}
|
|
2551
2588
|
|
|
@@ -2644,6 +2681,7 @@
|
|
|
2644
2681
|
|
|
2645
2682
|
[internalChangeset setObject:registeredExtensions forKey:YapDatabaseRegisteredExtensionsKey];
|
|
2646
2683
|
[internalChangeset setObject:extensionsOrder forKey:YapDatabaseExtensionsOrderKey];
|
|
2684
|
+
[internalChangeset setObject:extensionDependencies forKey:YapDatabaseExtensionDependenciesKey];
|
|
2647
2685
|
}
|
|
2648
2686
|
|
|
2649
2687
|
if (registeredTablesChanged)
|
|
@@ -2662,7 +2700,8 @@
|
|
|
2662
2700
|
if ([objectChanges count] > 0 ||
|
|
2663
2701
|
[metadataChanges count] > 0 ||
|
|
2664
2702
|
[removedKeys count] > 0 ||
|
|
2665
|
-
[removedCollections count] > 0 ||
|
|
2703
|
+
[removedCollections count] > 0 ||
|
|
2704
|
+
[removedRowids count] > 0 || allKeysRemoved)
|
|
2666
2705
|
{
|
|
2667
2706
|
if (internalChangeset == nil)
|
|
2668
2707
|
internalChangeset = [NSMutableDictionary dictionaryWithSharedKeySet:sharedKeySetForInternalChangeset];
|
|
@@ -2703,6 +2742,11 @@
|
|
|
2703
2742
|
forKey:YapDatabaseRemovedCollectionsKey];
|
|
2704
2743
|
}
|
|
2705
2744
|
|
|
2745
|
+
if ([removedRowids count] > 0)
|
|
2746
|
+
{
|
|
2747
|
+
[internalChangeset setObject:removedRowids forKey:YapDatabaseRemovedRowidsKey];
|
|
2748
|
+
}
|
|
2749
|
+
|
|
2706
2750
|
if (allKeysRemoved)
|
|
2707
2751
|
{
|
|
2708
2752
|
[internalChangeset setObject:@(YES) forKey:YapDatabaseAllKeysRemovedKey];
|
|
@@ -2731,6 +2775,7 @@
|
|
|
2731
2775
|
|
|
2732
2776
|
registeredExtensions = changeset_registeredExtensions;
|
|
2733
2777
|
extensionsOrder = [changeset objectForKey:YapDatabaseExtensionsOrderKey];
|
|
2778
|
+
extensionDependencies = [changeset objectForKey:YapDatabaseExtensionDependenciesKey];
|
|
2734
2779
|
|
|
2735
2780
|
// Remove any extensions that have been dropped
|
|
2736
2781
|
|
|
@@ -2784,8 +2829,9 @@
|
|
|
2784
2829
|
NSDictionary *changeset_objectChanges = [changeset objectForKey:YapDatabaseObjectChangesKey];
|
|
2785
2830
|
NSDictionary *changeset_metadataChanges = [changeset objectForKey:YapDatabaseMetadataChangesKey];
|
|
2786
2831
|
|
|
2787
|
-
NSSet *
|
|
2788
|
-
NSSet *
|
|
2832
|
+
NSSet *changeset_removedRowids = [changeset objectForKey:YapDatabaseRemovedRowidsKey];
|
|
2833
|
+
NSSet *changeset_removedKeys = [changeset objectForKey:YapDatabaseRemovedKeysKey];
|
|
2834
|
+
NSSet *changeset_removedCollections = [changeset objectForKey:YapDatabaseRemovedCollectionsKey];
|
|
2789
2835
|
|
|
2790
2836
|
BOOL changeset_allKeysRemoved = [[changeset objectForKey:YapDatabaseAllKeysRemovedKey] boolValue];
|
|
2791
2837
|
|
|
@@ -2794,6 +2840,45 @@
|
|
|
2794
2840
|
BOOL hasRemovedKeys = [changeset_removedKeys count] > 0;
|
|
2795
2841
|
BOOL hasRemovedCollections = [changeset_removedCollections count] > 0;
|
|
2796
2842
|
|
|
2843
|
+
// Update keyCache
|
|
2844
|
+
|
|
2845
|
+
if (changeset_allKeysRemoved)
|
|
2846
|
+
{
|
|
2847
|
+
// Shortcut: Everything was removed from the database
|
|
2848
|
+
|
|
2849
|
+
[keyCache removeAllObjects];
|
|
2850
|
+
}
|
|
2851
|
+
else
|
|
2852
|
+
{
|
|
2853
|
+
if (hasRemovedCollections)
|
|
2854
|
+
{
|
|
2855
|
+
__block NSMutableArray *toRemove = nil;
|
|
2856
|
+
[keyCache enumerateKeysAndObjectsWithBlock:^(id key, id obj, BOOL *stop) {
|
|
2857
|
+
|
|
2858
|
+
__unsafe_unretained NSNumber *rowidNumber = (NSNumber *)key;
|
|
2859
|
+
__unsafe_unretained YapCollectionKey *collectionKey = (YapCollectionKey *)obj;
|
|
2860
|
+
|
|
2861
|
+
if ([changeset_removedCollections containsObject:collectionKey.collection])
|
|
2862
|
+
{
|
|
2863
|
+
if (toRemove == nil)
|
|
2864
|
+
toRemove = [NSMutableArray array];
|
|
2865
|
+
|
|
2866
|
+
[toRemove addObject:rowidNumber];
|
|
2867
|
+
}
|
|
2868
|
+
}];
|
|
2869
|
+
|
|
2870
|
+
[keyCache removeObjectsForKeys:toRemove];
|
|
2871
|
+
}
|
|
2872
|
+
|
|
2873
|
+
if (changeset_removedRowids)
|
|
2874
|
+
{
|
|
2875
|
+
[changeset_removedRowids enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
|
|
2876
|
+
|
|
2877
|
+
[keyCache removeObjectForKey:obj];
|
|
2878
|
+
}];
|
|
2879
|
+
}
|
|
2880
|
+
}
|
|
2881
|
+
|
|
2797
2882
|
// Update objectCache
|
|
2798
2883
|
|
|
2799
2884
|
if (changeset_allKeysRemoved && !hasObjectChanges)
|
|
@@ -3203,6 +3288,7 @@
|
|
|
3203
3288
|
includingObjectChanges:(BOOL)includeObjectChanges
|
|
3204
3289
|
metadataChanges:(BOOL)includeMetadataChanges
|
|
3205
3290
|
{
|
|
3291
|
+
if (key == nil) return NO;
|
|
3206
3292
|
if (collection == nil)
|
|
3207
3293
|
collection = @"";
|
|
3208
3294
|
|
|
@@ -3490,6 +3576,10 @@
|
|
|
3490
3576
|
YapDatabaseReadWriteTransaction *transaction = [self newReadWriteTransaction];
|
|
3491
3577
|
[self preReadWriteTransaction:transaction];
|
|
3492
3578
|
|
|
3579
|
+
// Set the registeredName now.
|
|
3580
|
+
// The extension will need this in order to perform the registration tasks such as creating tables, etc.
|
|
3581
|
+
extension.registeredName = extensionName;
|
|
3582
|
+
|
|
3493
3583
|
YapDatabaseExtensionConnection *extensionConnection;
|
|
3494
3584
|
YapDatabaseExtensionTransaction *extensionTransaction;
|
|
3495
3585
|
|
|
@@ -3514,6 +3604,9 @@
|
|
|
3514
3604
|
}
|
|
3515
3605
|
else
|
|
3516
3606
|
{
|
|
3607
|
+
// Registration failed.
|
|
3608
|
+
|
|
3609
|
+
extension.registeredName = nil;
|
|
3517
3610
|
[transaction rollback];
|
|
3518
3611
|
}
|
|
3519
3612
|
|
|
@@ -3533,40 +3626,103 @@
|
|
|
3533
3626
|
YapDatabaseReadWriteTransaction *transaction = [self newReadWriteTransaction];
|
|
3534
3627
|
[self preReadWriteTransaction:transaction];
|
|
3535
3628
|
|
|
3536
|
-
|
|
3537
|
-
Class class = NSClassFromString(className);
|
|
3629
|
+
// Unregister the given extension
|
|
3538
3630
|
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
}
|
|
3551
|
-
else
|
|
3631
|
+
YapDatabaseExtension *extension = [registeredExtensions objectForKey:extensionName];
|
|
3632
|
+
|
|
3633
|
+
[self _unregisterExtension:extensionName withTransaction:transaction];
|
|
3634
|
+
extension.registeredName = nil;
|
|
3635
|
+
|
|
3636
|
+
// Automatically unregister any extensions that were dependent upon this one.
|
|
3637
|
+
|
|
3638
|
+
NSMutableArray *extensionNameStack = [NSMutableArray arrayWithCapacity:1];
|
|
3639
|
+
[extensionNameStack addObject:extensionName];
|
|
3640
|
+
|
|
3641
|
+
do
|
|
3552
3642
|
{
|
|
3553
|
-
|
|
3554
|
-
[class dropTablesForRegisteredName:extensionName withTransaction:transaction];
|
|
3643
|
+
NSString *currentExtensionName = [extensionNameStack lastObject];
|
|
3555
3644
|
|
|
3556
|
-
|
|
3557
|
-
[
|
|
3645
|
+
__block NSString *dependentExtName = nil;
|
|
3646
|
+
[extensionDependencies enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
|
|
3647
|
+
|
|
3648
|
+
// __unsafe_unretained NSString *extName = (NSString *)key;
|
|
3649
|
+
__unsafe_unretained NSSet *extDependencies = (NSSet *)obj;
|
|
3650
|
+
|
|
3651
|
+
if ([extDependencies containsObject:currentExtensionName])
|
|
3652
|
+
{
|
|
3653
|
+
dependentExtName = (NSString *)key;
|
|
3654
|
+
*stop = YES;
|
|
3655
|
+
}
|
|
3656
|
+
}];
|
|
3558
3657
|
|
|
3559
|
-
|
|
3658
|
+
if (dependentExtName)
|
|
3659
|
+
{
|
|
3660
|
+
// We found an extension that was dependent upon the one we just unregistered.
|
|
3661
|
+
// So we need to unregister it too.
|
|
3662
|
+
|
|
3663
|
+
YapDatabaseExtension *dependentExt = [registeredExtensions objectForKey:dependentExtName];
|
|
3664
|
+
|
|
3665
|
+
[self _unregisterExtension:dependentExtName withTransaction:transaction];
|
|
3666
|
+
dependentExt.registeredName = nil;
|
|
3667
|
+
|
|
3668
|
+
// And now we need to check and see if there were any extensions dependent upon this new one.
|
|
3669
|
+
// So we add it to the top of the stack, and continue our search.
|
|
3670
|
+
|
|
3671
|
+
[extensionNameStack addObject:dependentExtName];
|
|
3672
|
+
}
|
|
3673
|
+
else
|
|
3674
|
+
{
|
|
3675
|
+
[extensionNameStack removeLastObject];
|
|
3676
|
+
}
|
|
3560
3677
|
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
}
|
|
3678
|
+
} while ([extensionNameStack count] > 0);
|
|
3679
|
+
|
|
3564
3680
|
|
|
3681
|
+
// Complete the transaction
|
|
3565
3682
|
[self postReadWriteTransaction:transaction];
|
|
3683
|
+
|
|
3684
|
+
// And reset the registeredExtensionsChanged ivar.
|
|
3685
|
+
// The above method already processed it, and included the appropriate information in the changeset.
|
|
3566
3686
|
registeredExtensionsChanged = NO;
|
|
3567
3687
|
}});
|
|
3568
3688
|
}
|
|
3569
3689
|
|
|
3690
|
+
- (void)_unregisterExtension:(NSString *)extensionName withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
3691
|
+
{
|
|
3692
|
+
NSString *className = [transaction stringValueForKey:@"class" extension:extensionName];
|
|
3693
|
+
Class class = NSClassFromString(className);
|
|
3694
|
+
|
|
3695
|
+
if (className == nil)
|
|
3696
|
+
{
|
|
3697
|
+
YDBLogWarn(@"Unable to unregister extension(%@). Doesn't appear to be registered.", extensionName);
|
|
3698
|
+
}
|
|
3699
|
+
else if (class == NULL)
|
|
3700
|
+
{
|
|
3701
|
+
YDBLogError(@"Unable to unregister extension(%@) with unknown class(%@)", extensionName, className);
|
|
3702
|
+
}
|
|
3703
|
+
if (![class isSubclassOfClass:[YapDatabaseExtension class]])
|
|
3704
|
+
{
|
|
3705
|
+
YDBLogError(@"Unable to unregister extension(%@) with improper class(%@)", extensionName, className);
|
|
3706
|
+
}
|
|
3707
|
+
else
|
|
3708
|
+
{
|
|
3709
|
+
// Drop tables
|
|
3710
|
+
[class dropTablesForRegisteredName:extensionName withTransaction:transaction];
|
|
3711
|
+
|
|
3712
|
+
// Drop preferences (rows in yap2 table)
|
|
3713
|
+
[transaction removeAllValuesForExtension:extensionName];
|
|
3714
|
+
|
|
3715
|
+
// Remove from registeredExtensions, extensionsOrder & extensionDependencies (if needed)
|
|
3716
|
+
[self didUnregisterExtension:extensionName];
|
|
3717
|
+
|
|
3718
|
+
// Remove YapDatabaseExtensionConnection subclass instance (if needed)
|
|
3719
|
+
[self removeRegisteredExtensionConnection:extensionName];
|
|
3720
|
+
|
|
3721
|
+
// Remove YapDatabaseExtensionTransaction subclass instance (if needed)
|
|
3722
|
+
[transaction removeRegisteredExtensionTransaction:extensionName];
|
|
3723
|
+
}
|
|
3724
|
+
}
|
|
3725
|
+
|
|
3570
3726
|
- (void)willRegisterExtension:(YapDatabaseExtension *)extension
|
|
3571
3727
|
withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
3572
3728
|
needsClassValue:(BOOL *)needsClassValuePtr
|
|
@@ -3657,13 +3813,19 @@
|
|
|
3657
3813
|
NSMutableDictionary *newRegisteredExtensions = [registeredExtensions mutableCopy];
|
|
3658
3814
|
[newRegisteredExtensions setObject:extension forKey:extensionName];
|
|
3659
3815
|
|
|
3660
|
-
NSMutableArray *newExtensionsOrder = [extensionsOrder mutableCopy];
|
|
3661
|
-
[newExtensionsOrder addObject:extensionName];
|
|
3662
|
-
|
|
3663
3816
|
registeredExtensions = [newRegisteredExtensions copy];
|
|
3664
|
-
extensionsOrder = [
|
|
3665
|
-
|
|
3817
|
+
extensionsOrder = [extensionsOrder arrayByAddingObject:extensionName];
|
|
3818
|
+
|
|
3819
|
+
NSSet *dependencies = [extension dependencies];
|
|
3820
|
+
if (dependencies == nil)
|
|
3821
|
+
dependencies = [NSSet set];
|
|
3822
|
+
|
|
3823
|
+
NSMutableDictionary *newExtensionDependencies = [extensionDependencies mutableCopy];
|
|
3824
|
+
[newExtensionDependencies setObject:dependencies forKey:extensionName];
|
|
3825
|
+
|
|
3826
|
+
extensionDependencies = [newExtensionDependencies copy];
|
|
3666
3827
|
|
|
3828
|
+
extensionsReady = NO;
|
|
3667
3829
|
sharedKeySetForExtensions = [NSDictionary sharedKeySetForKeys:[registeredExtensions allKeys]];
|
|
3668
3830
|
|
|
3669
3831
|
// Set the registeredExtensionsChanged flag.
|
|
@@ -3684,8 +3846,18 @@
|
|
|
3684
3846
|
[newRegisteredExtensions removeObjectForKey:extensionName];
|
|
3685
3847
|
|
|
3686
3848
|
registeredExtensions = [newRegisteredExtensions copy];
|
|
3687
|
-
extensionsReady = NO;
|
|
3688
3849
|
|
|
3850
|
+
NSMutableArray *newExtensionsOrder = [extensionsOrder mutableCopy];
|
|
3851
|
+
[newExtensionsOrder removeObject:extensionName];
|
|
3852
|
+
|
|
3853
|
+
extensionsOrder = [newExtensionsOrder copy];
|
|
3854
|
+
|
|
3855
|
+
NSMutableDictionary *newExtensionDependencies = [extensionDependencies mutableCopy];
|
|
3856
|
+
[newExtensionDependencies removeObjectForKey:extensionName];
|
|
3857
|
+
|
|
3858
|
+
extensionDependencies = [newExtensionDependencies copy];
|
|
3859
|
+
|
|
3860
|
+
extensionsReady = NO;
|
|
3689
3861
|
sharedKeySetForExtensions = [NSDictionary sharedKeySetForKeys:[registeredExtensions allKeys]];
|
|
3690
3862
|
|
|
3691
3863
|
// Set the registeredExtensionsChanged flag.
|