motion-yapper 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +3 -1
  4. data/lib/yapper.rb +3 -3
  5. data/lib/yapper/db.rb +61 -4
  6. data/lib/yapper/document/persistence.rb +4 -0
  7. data/lib/yapper/document/selection.rb +13 -0
  8. data/lib/yapper/version.rb +1 -1
  9. data/motion-yapper.gemspec +1 -1
  10. data/spec/integration/search_spec.rb +111 -0
  11. data/vendor/Podfile.lock +11 -7
  12. data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.bridgesupport +16 -2
  13. data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.h +10 -7
  14. data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.m +20 -2
  15. metadata +19 -297
  16. data/vendor/Pods/.build/libPods-CocoaLumberjack.a +0 -0
  17. data/vendor/Pods/.build/libPods-NSData+MD5Digest.a +0 -0
  18. data/vendor/Pods/.build/libPods-YapDatabase.a +0 -0
  19. data/vendor/Pods/.build/libPods.a +0 -0
  20. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDASLLogger.h +0 -41
  21. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDAbstractDatabaseLogger.h +0 -102
  22. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDContextFilterLogFormatter.h +0 -63
  23. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDDispatchQueueLogFormatter.h +0 -128
  24. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDFileLogger.h +0 -369
  25. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDLog+LOGV.h +0 -99
  26. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDLog.h +0 -634
  27. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDMultiFormatter.h +0 -30
  28. data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDTTYLogger.h +0 -181
  29. data/vendor/Pods/BuildHeaders/NSData+MD5Digest/NSData+MD5Digest.h +0 -18
  30. data/vendor/Pods/BuildHeaders/YapDatabase/NSDictionary+YapDatabase.h +0 -8
  31. data/vendor/Pods/BuildHeaders/YapDatabase/YapCache.h +0 -91
  32. data/vendor/Pods/BuildHeaders/YapDatabase/YapCollectionKey.h +0 -23
  33. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabase.h +0 -547
  34. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseConnection.h +0 -449
  35. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseConnectionState.h +0 -29
  36. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseDefaults.h +0 -37
  37. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtension.h +0 -15
  38. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtensionConnection.h +0 -11
  39. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtensionPrivate.h +0 -444
  40. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtensionTransaction.h +0 -11
  41. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredView.h +0 -81
  42. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewConnection.h +0 -12
  43. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewPrivate.h +0 -17
  44. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewTransaction.h +0 -39
  45. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewTypes.h +0 -32
  46. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearch.h +0 -89
  47. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchConnection.h +0 -32
  48. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchPrivate.h +0 -77
  49. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchSnippetOptions.h +0 -79
  50. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchTransaction.h +0 -68
  51. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseLogging.h +0 -158
  52. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseManager.h +0 -17
  53. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabasePrivate.h +0 -446
  54. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseQuery.h +0 -42
  55. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationship.h +0 -35
  56. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipConnection.h +0 -29
  57. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipEdge.h +0 -163
  58. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipEdgePrivate.h +0 -79
  59. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipNode.h +0 -99
  60. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipOptions.h +0 -59
  61. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipPrivate.h +0 -125
  62. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseRelationshipTransaction.h +0 -384
  63. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndex.h +0 -149
  64. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexConnection.h +0 -33
  65. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexPrivate.h +0 -83
  66. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexSetup.h +0 -33
  67. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexSetupPrivate.h +0 -18
  68. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexTransaction.h +0 -58
  69. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseStatement.h +0 -13
  70. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseString.h +0 -121
  71. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseTransaction.h +0 -651
  72. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseView.h +0 -127
  73. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewChange.h +0 -272
  74. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewChangePrivate.h +0 -94
  75. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewConnection.h +0 -116
  76. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewMappings.h +0 -842
  77. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewMappingsPrivate.h +0 -72
  78. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewOptions.h +0 -63
  79. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewPage.h +0 -36
  80. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewPageMetadata.h +0 -27
  81. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewPrivate.h +0 -170
  82. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewRangeOptions.h +0 -330
  83. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewRangeOptionsPrivate.h +0 -17
  84. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewTransaction.h +0 -498
  85. data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewTypes.h +0 -99
  86. data/vendor/Pods/BuildHeaders/YapDatabase/YapMemoryTable.h +0 -74
  87. data/vendor/Pods/BuildHeaders/YapDatabase/YapNull.h +0 -17
  88. data/vendor/Pods/BuildHeaders/YapDatabase/YapSet.h +0 -41
  89. data/vendor/Pods/BuildHeaders/YapDatabase/YapTouch.h +0 -15
  90. data/vendor/Pods/CocoaLumberjack/LICENSE.txt +0 -18
  91. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDASLLogger.h +0 -41
  92. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDASLLogger.m +0 -100
  93. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDAbstractDatabaseLogger.h +0 -102
  94. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDAbstractDatabaseLogger.m +0 -727
  95. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDFileLogger.h +0 -369
  96. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDFileLogger.m +0 -1539
  97. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog+LOGV.h +0 -99
  98. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog.h +0 -634
  99. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog.m +0 -1208
  100. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDTTYLogger.h +0 -181
  101. data/vendor/Pods/CocoaLumberjack/Lumberjack/DDTTYLogger.m +0 -1520
  102. data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDContextFilterLogFormatter.h +0 -63
  103. data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDContextFilterLogFormatter.m +0 -191
  104. data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDDispatchQueueLogFormatter.h +0 -128
  105. data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDDispatchQueueLogFormatter.m +0 -253
  106. data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDMultiFormatter.h +0 -30
  107. data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DDMultiFormatter.m +0 -127
  108. data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/README.txt +0 -7
  109. data/vendor/Pods/CocoaLumberjack/README.markdown +0 -74
  110. data/vendor/Pods/Headers/CocoaLumberjack/DDASLLogger.h +0 -41
  111. data/vendor/Pods/Headers/CocoaLumberjack/DDAbstractDatabaseLogger.h +0 -102
  112. data/vendor/Pods/Headers/CocoaLumberjack/DDContextFilterLogFormatter.h +0 -63
  113. data/vendor/Pods/Headers/CocoaLumberjack/DDDispatchQueueLogFormatter.h +0 -128
  114. data/vendor/Pods/Headers/CocoaLumberjack/DDFileLogger.h +0 -369
  115. data/vendor/Pods/Headers/CocoaLumberjack/DDLog+LOGV.h +0 -99
  116. data/vendor/Pods/Headers/CocoaLumberjack/DDLog.h +0 -634
  117. data/vendor/Pods/Headers/CocoaLumberjack/DDMultiFormatter.h +0 -30
  118. data/vendor/Pods/Headers/CocoaLumberjack/DDTTYLogger.h +0 -181
  119. data/vendor/Pods/Headers/NSData+MD5Digest/NSData+MD5Digest.h +0 -18
  120. data/vendor/Pods/Headers/YapDatabase/YapCollectionKey.h +0 -23
  121. data/vendor/Pods/Headers/YapDatabase/YapDatabase.h +0 -547
  122. data/vendor/Pods/Headers/YapDatabase/YapDatabaseConnection.h +0 -449
  123. data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtension.h +0 -15
  124. data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtensionConnection.h +0 -11
  125. data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtensionTransaction.h +0 -11
  126. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredView.h +0 -81
  127. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewConnection.h +0 -12
  128. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewTransaction.h +0 -39
  129. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewTypes.h +0 -32
  130. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearch.h +0 -89
  131. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchConnection.h +0 -32
  132. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchSnippetOptions.h +0 -79
  133. data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchTransaction.h +0 -68
  134. data/vendor/Pods/Headers/YapDatabase/YapDatabaseQuery.h +0 -42
  135. data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationship.h +0 -35
  136. data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipConnection.h +0 -29
  137. data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipEdge.h +0 -163
  138. data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipNode.h +0 -99
  139. data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipOptions.h +0 -59
  140. data/vendor/Pods/Headers/YapDatabase/YapDatabaseRelationshipTransaction.h +0 -384
  141. data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndex.h +0 -149
  142. data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexConnection.h +0 -33
  143. data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexSetup.h +0 -33
  144. data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexTransaction.h +0 -58
  145. data/vendor/Pods/Headers/YapDatabase/YapDatabaseTransaction.h +0 -651
  146. data/vendor/Pods/Headers/YapDatabase/YapDatabaseView.h +0 -127
  147. data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewChange.h +0 -272
  148. data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewConnection.h +0 -116
  149. data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewMappings.h +0 -842
  150. data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewOptions.h +0 -63
  151. data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewRangeOptions.h +0 -330
  152. data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewTransaction.h +0 -498
  153. data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewTypes.h +0 -99
  154. data/vendor/Pods/Headers/YapDatabase/YapSet.h +0 -41
  155. data/vendor/Pods/Headers/____Pods-CocoaLumberjack-prefix.h +0 -7
  156. data/vendor/Pods/Headers/____Pods-NSData+MD5Digest-prefix.h +0 -5
  157. data/vendor/Pods/Headers/____Pods-YapDatabase-prefix.h +0 -5
  158. data/vendor/Pods/Headers/____Pods-environment.h +0 -38
  159. data/vendor/Pods/Manifest.lock +0 -22
  160. data/vendor/Pods/NSData+MD5Digest/NSData+MD5Digest/NSData+MD5Digest.h +0 -18
  161. data/vendor/Pods/NSData+MD5Digest/NSData+MD5Digest/NSData+MD5Digest.m +0 -39
  162. data/vendor/Pods/NSData+MD5Digest/README.md +0 -11
  163. data/vendor/Pods/Pods-CocoaLumberjack-Private.xcconfig +0 -5
  164. data/vendor/Pods/Pods-CocoaLumberjack-dummy.m +0 -5
  165. data/vendor/Pods/Pods-CocoaLumberjack-prefix.pch +0 -7
  166. data/vendor/Pods/Pods-CocoaLumberjack.xcconfig +0 -0
  167. data/vendor/Pods/Pods-NSData+MD5Digest-Private.xcconfig +0 -5
  168. data/vendor/Pods/Pods-NSData+MD5Digest-dummy.m +0 -5
  169. data/vendor/Pods/Pods-NSData+MD5Digest-prefix.pch +0 -5
  170. data/vendor/Pods/Pods-NSData+MD5Digest.xcconfig +0 -0
  171. data/vendor/Pods/Pods-YapDatabase-Private.xcconfig +0 -5
  172. data/vendor/Pods/Pods-YapDatabase-dummy.m +0 -5
  173. data/vendor/Pods/Pods-YapDatabase-prefix.pch +0 -5
  174. data/vendor/Pods/Pods-YapDatabase.xcconfig +0 -1
  175. data/vendor/Pods/Pods-acknowledgements.markdown +0 -59
  176. data/vendor/Pods/Pods-acknowledgements.plist +0 -97
  177. data/vendor/Pods/Pods-dummy.m +0 -5
  178. data/vendor/Pods/Pods-environment.h +0 -38
  179. data/vendor/Pods/Pods-resources.sh +0 -68
  180. data/vendor/Pods/Pods.xcconfig +0 -5
  181. data/vendor/Pods/Pods.xcodeproj/project.pbxproj +0 -4807
  182. data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods-CocoaLumberjack.xcscheme +0 -59
  183. data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods-NSData+MD5Digest.xcscheme +0 -59
  184. data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods-YapDatabase.xcscheme +0 -59
  185. data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/Pods.xcscheme +0 -59
  186. data/vendor/Pods/Pods.xcodeproj/xcuserdata/kareemk.xcuserdatad/xcschemes/xcschememanagement.plist +0 -31
  187. data/vendor/Pods/YapDatabase/LICENSE.txt +0 -18
  188. data/vendor/Pods/YapDatabase/README.md +0 -32
  189. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/Internal/YapDatabaseFilteredViewPrivate.h +0 -17
  190. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredView.h +0 -81
  191. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredView.m +0 -159
  192. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewConnection.h +0 -12
  193. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewConnection.m +0 -41
  194. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTransaction.h +0 -39
  195. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTransaction.m +0 -1235
  196. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTypes.h +0 -32
  197. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/Internal/YapDatabaseFullTextSearchPrivate.h +0 -77
  198. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearch.h +0 -89
  199. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearch.m +0 -146
  200. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchConnection.h +0 -32
  201. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchConnection.m +0 -298
  202. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchSnippetOptions.h +0 -79
  203. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchSnippetOptions.m +0 -95
  204. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchTransaction.h +0 -68
  205. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchTransaction.m +0 -1403
  206. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/Internal/YapDatabaseExtensionPrivate.h +0 -444
  207. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtension.h +0 -15
  208. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtension.m +0 -83
  209. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionConnection.h +0 -11
  210. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionConnection.m +0 -46
  211. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionTransaction.h +0 -11
  212. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionTransaction.m +0 -204
  213. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/Internal/YapDatabaseRelationshipEdgePrivate.h +0 -79
  214. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/Internal/YapDatabaseRelationshipPrivate.h +0 -125
  215. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationship.h +0 -35
  216. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationship.m +0 -129
  217. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipConnection.h +0 -29
  218. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipConnection.m +0 -802
  219. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipEdge.h +0 -163
  220. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipEdge.m +0 -408
  221. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipNode.h +0 -99
  222. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipOptions.h +0 -59
  223. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipOptions.m +0 -29
  224. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipTransaction.h +0 -384
  225. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Relationships/YapDatabaseRelationshipTransaction.m +0 -5254
  226. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/Internal/YapDatabaseSecondaryIndexPrivate.h +0 -83
  227. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/Internal/YapDatabaseSecondaryIndexSetupPrivate.h +0 -18
  228. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndex.h +0 -149
  229. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndex.m +0 -161
  230. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexConnection.h +0 -33
  231. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexConnection.m +0 -331
  232. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexSetup.h +0 -33
  233. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexSetup.m +0 -245
  234. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.h +0 -58
  235. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.m +0 -1269
  236. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewChangePrivate.h +0 -94
  237. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewMappingsPrivate.h +0 -72
  238. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPage.h +0 -36
  239. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPage.mm +0 -296
  240. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPageMetadata.h +0 -27
  241. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPageMetadata.m +0 -28
  242. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPrivate.h +0 -170
  243. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewRangeOptionsPrivate.h +0 -17
  244. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewChange.h +0 -272
  245. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewChange.m +0 -2500
  246. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewMappings.h +0 -842
  247. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewMappings.m +0 -1714
  248. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewRangeOptions.h +0 -330
  249. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewRangeOptions.m +0 -141
  250. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseView.h +0 -127
  251. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseView.m +0 -194
  252. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewConnection.h +0 -116
  253. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewConnection.m +0 -888
  254. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewOptions.h +0 -63
  255. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewOptions.m +0 -27
  256. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTransaction.h +0 -498
  257. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTransaction.m +0 -4986
  258. data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTypes.h +0 -99
  259. data/vendor/Pods/YapDatabase/YapDatabase/Internal/NSDictionary+YapDatabase.h +0 -8
  260. data/vendor/Pods/YapDatabase/YapDatabase/Internal/NSDictionary+YapDatabase.m +0 -19
  261. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapCache.h +0 -91
  262. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapCache.m +0 -465
  263. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseConnectionState.h +0 -29
  264. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseConnectionState.m +0 -48
  265. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseDefaults.h +0 -37
  266. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseDefaults.m +0 -83
  267. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseLogging.h +0 -158
  268. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseLogging.m +0 -73
  269. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseManager.h +0 -17
  270. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseManager.m +0 -56
  271. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabasePrivate.h +0 -446
  272. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseStatement.h +0 -13
  273. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseStatement.m +0 -26
  274. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseString.h +0 -121
  275. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapMemoryTable.h +0 -74
  276. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapMemoryTable.m +0 -603
  277. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapNull.h +0 -17
  278. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapNull.m +0 -35
  279. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapTouch.h +0 -15
  280. data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapTouch.m +0 -31
  281. data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapCollectionKey.h +0 -23
  282. data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapCollectionKey.m +0 -199
  283. data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapDatabaseQuery.h +0 -42
  284. data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapDatabaseQuery.m +0 -96
  285. data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapSet.h +0 -41
  286. data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapSet.m +0 -82
  287. data/vendor/Pods/YapDatabase/YapDatabase/YapDatabase.h +0 -547
  288. data/vendor/Pods/YapDatabase/YapDatabase/YapDatabase.m +0 -2013
  289. data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseConnection.h +0 -449
  290. data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseConnection.m +0 -4046
  291. data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseTransaction.h +0 -651
  292. data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseTransaction.m +0 -5602
  293. data/vendor/Pods/build-iPhoneSimulator/Pods.bridgesupport +0 -3172
  294. data/vendor/Pods/build-iPhoneSimulator/libPods.a +0 -0
@@ -1,79 +0,0 @@
1
- #import <Foundation/Foundation.h>
2
-
3
- /**
4
- * This class represents options that may be passed to the FTS snippet function.
5
- *
6
- * It correlates with the snippet funtion arguments as defined in sqlite's FTS module:
7
- * http://www.sqlite.org/fts3.html#section_4_2
8
- *
9
- * For example, if you were searching for the word "favorite",
10
- * then a returned snippet may look something like this:
11
- *
12
- * <b>...</b>one of my <b>favorite</b> cheese pairings is<b>...</b>
13
- **/
14
- @interface YapDatabaseFullTextSearchSnippetOptions : NSObject <NSCopying>
15
-
16
-
17
- + (NSString *)defaultStartMatchText; // @"<b>"
18
- + (NSString *)defaultEndMatchText; // @"</b>"
19
- + (NSString *)defaultEllipsesText; // @"..."
20
-
21
- + (int)defaultNumberOfTokens; // 15
22
-
23
- - (id)init;
24
-
25
- /**
26
- * The startMatchText is inserted before matched terms/phrases, and also before injected ellipses text.
27
- * It is used to mark the beginning of special text within the snippet.
28
- *
29
- * If not set, it will be the defaultStartMatchText: @"<b>"
30
- *
31
- * @see defaultStartMatchText
32
- **/
33
- @property (nonatomic, copy) NSString *startMatchText;
34
-
35
- /**
36
- * The endMatchText is inserted after matched terms/phrases, and also after injected ellipses text.
37
- * It is used to mark the end of special text within the snippet.
38
- *
39
- * If not set, it will be the defaultEndMatchText: @"</b>"
40
- *
41
- * @see defaultEndMatchText
42
- **/
43
- @property (nonatomic, copy) NSString *endMatchText;
44
-
45
- /**
46
- * If the full text from the column is too big, the snippets will be a small subsection of the snippet,
47
- * centered on matching terms/phrases. When this occurs, and the snippet is truncated on the left and/or right,
48
- * then the ellipsesText will be inserted on the left and/or right.
49
- *
50
- * If not set, it will be the defaultEllipsesText: @"…"
51
- *
52
- * @see defaultEllipsesText
53
- * @see numberOfTokens
54
- **/
55
- @property (nonatomic, copy) NSString *ellipsesText;
56
-
57
- /**
58
- * The column name from which to extract the returned fragments of text from.
59
- * If nil, then the text may be extracted from any column.
60
- *
61
- * If not set, the default value is nil.
62
- **/
63
- @property (nonatomic, copy) NSString *columnName;
64
-
65
- /**
66
- * The numberOfTokens is used as the (approximate) number of tokens to include in the returned snippet text value.
67
- *
68
- * If not set, it will be defaultNumberOfTokens: 15
69
- *
70
- * Setting this to a value of zero resets the value to the default.
71
- * Negative values are allowed, as the snippet function automatically uses the absolute value.
72
- *
73
- * The maximum allowable absolute value is 64.
74
- *
75
- * @see defaultNumberOfTokens
76
- **/
77
- @property (nonatomic, assign) int numberOfTokens;
78
-
79
- @end
@@ -1,95 +0,0 @@
1
- #import "YapDatabaseFullTextSearchSnippetOptions.h"
2
-
3
-
4
- @implementation YapDatabaseFullTextSearchSnippetOptions
5
-
6
- + (NSString *)defaultStartMatchText {
7
- return @"<b>";
8
- }
9
-
10
- + (NSString *)defaultEndMatchText {
11
- return @"</b>";
12
- }
13
-
14
- + (NSString *)defaultEllipsesText {
15
- return @"...";
16
- }
17
-
18
- + (int)defaultNumberOfTokens {
19
- return 15;
20
- }
21
-
22
- @synthesize startMatchText = startMatchText;
23
- @synthesize endMatchText = endMatchText;
24
- @synthesize ellipsesText = ellipsesText;
25
- @synthesize columnName = columnName;
26
- @synthesize numberOfTokens = numberOfTokens;
27
-
28
- - (id)init
29
- {
30
- if ((self = [super init]))
31
- {
32
- startMatchText = [[self class] defaultStartMatchText];
33
- endMatchText = [[self class] defaultEndMatchText];
34
- ellipsesText = [[self class] defaultEllipsesText];
35
-
36
- numberOfTokens = [[self class] defaultNumberOfTokens];
37
- }
38
- return self;
39
- }
40
-
41
- - (id)initForCopy
42
- {
43
- if ((self = [super init]))
44
- {
45
- // copyWithZone will fill out values for us
46
- }
47
- return self;
48
- }
49
-
50
- - (id)copyWithZone:(NSZone *)zone
51
- {
52
- YapDatabaseFullTextSearchSnippetOptions *copy = [[YapDatabaseFullTextSearchSnippetOptions alloc] initForCopy];
53
-
54
- copy->startMatchText = startMatchText;
55
- copy->endMatchText = endMatchText;
56
- copy->ellipsesText = ellipsesText;
57
- copy->columnName = columnName;
58
- copy->numberOfTokens = numberOfTokens;
59
-
60
- return copy;
61
- }
62
-
63
- - (void)setStartMatchText:(NSString *)text
64
- {
65
- if (text)
66
- startMatchText = [text copy];
67
- else
68
- startMatchText = [[self class] defaultStartMatchText];
69
- }
70
-
71
- - (void)setEndMatchText:(NSString *)text
72
- {
73
- if (text)
74
- endMatchText = [text copy];
75
- else
76
- endMatchText = [[self class] defaultEndMatchText];
77
- }
78
-
79
- - (void)setEllipsesText:(NSString *)text
80
- {
81
- if (text)
82
- ellipsesText = [text copy];
83
- else
84
- ellipsesText = [[self class] defaultEllipsesText];
85
- }
86
-
87
- - (void)setNumberOfTokens:(int)count
88
- {
89
- if (count != 0)
90
- numberOfTokens = count;
91
- else
92
- numberOfTokens = [[self class] defaultNumberOfTokens];
93
- }
94
-
95
- @end
@@ -1,68 +0,0 @@
1
- #import <Foundation/Foundation.h>
2
-
3
- #import "YapDatabaseExtensionTransaction.h"
4
- #import "YapDatabaseFullTextSearchSnippetOptions.h"
5
-
6
-
7
- /**
8
- * Welcome to YapDatabase!
9
- *
10
- * The project page has a wealth of documentation if you have any questions.
11
- * https://github.com/yaptv/YapDatabase
12
- *
13
- * If you're new to the project you may want to check out the wiki
14
- * https://github.com/yaptv/YapDatabase/wiki
15
- *
16
- * YapDatabaseFullTextSearch is an extension for performing text based search.
17
- * Internally it uses sqlite's FTS module which was contributed by Google.
18
- *
19
- * After registering the extension, you can access this class within a regular transaction.
20
- * For example:
21
- *
22
- * [databaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction){
23
- *
24
- * [[transaction ext:@"mySearch"] enumerateKeysMatching:@"birthday party"
25
- * usingBlock:^(NSString *collection, NSString *key, BOOL *stop){
26
- * // matching row...
27
- * }]
28
- * }];
29
- **/
30
- @interface YapDatabaseFullTextSearchTransaction : YapDatabaseExtensionTransaction
31
-
32
- // Regular query matching
33
-
34
- - (void)enumerateKeysMatching:(NSString *)query
35
- usingBlock:(void (^)(NSString *collection, NSString *key, BOOL *stop))block;
36
-
37
- - (void)enumerateKeysAndMetadataMatching:(NSString *)query
38
- usingBlock:(void (^)(NSString *collection, NSString *key, id metadata, BOOL *stop))block;
39
-
40
- - (void)enumerateKeysAndObjectsMatching:(NSString *)query
41
- usingBlock:(void (^)(NSString *collection, NSString *key, id object, BOOL *stop))block;
42
-
43
- - (void)enumerateRowsMatching:(NSString *)query
44
- usingBlock:(void (^)(NSString *collection, NSString *key, id object, id metadata, BOOL *stop))block;
45
-
46
- // Query matching + Snippets
47
-
48
- - (void)enumerateKeysMatching:(NSString *)query
49
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)options
50
- usingBlock:
51
- (void (^)(NSString *snippet, NSString *collection, NSString *key, BOOL *stop))block;
52
-
53
- - (void)enumerateKeysAndMetadataMatching:(NSString *)query
54
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)options
55
- usingBlock:
56
- (void (^)(NSString *snippet, NSString *collection, NSString *key, id metadata, BOOL *stop))block;
57
-
58
- - (void)enumerateKeysAndObjectsMatching:(NSString *)query
59
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)options
60
- usingBlock:
61
- (void (^)(NSString *snippet, NSString *collection, NSString *key, id object, BOOL *stop))block;
62
-
63
- - (void)enumerateRowsMatching:(NSString *)query
64
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)options
65
- usingBlock:
66
- (void (^)(NSString *snippet, NSString *collection, NSString *key, id object, id metadata, BOOL *stop))block;
67
-
68
- @end
@@ -1,1403 +0,0 @@
1
- #import "YapDatabaseFullTextSearchTransaction.h"
2
- #import "YapDatabaseFullTextSearchPrivate.h"
3
- #import "YapDatabaseExtensionPrivate.h"
4
- #import "YapDatabasePrivate.h"
5
- #import "YapDatabaseString.h"
6
- #import "YapDatabaseLogging.h"
7
-
8
- #if ! __has_feature(objc_arc)
9
- #warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
10
- #endif
11
-
12
- /**
13
- * Define log level for this file: OFF, ERROR, WARN, INFO, VERBOSE
14
- * See YapDatabaseLogging.h for more information.
15
- **/
16
- #if DEBUG
17
- static const int ydbLogLevel = YDB_LOG_LEVEL_WARN;
18
- #else
19
- static const int ydbLogLevel = YDB_LOG_LEVEL_WARN;
20
- #endif
21
-
22
- /**
23
- * Declare that this class implements YapDatabaseExtensionTransaction_Hooks protocol.
24
- * This is done privately, as the protocol is internal.
25
- **/
26
- @interface YapDatabaseFullTextSearchTransaction () <YapDatabaseExtensionTransaction_Hooks>
27
- @end
28
-
29
-
30
- @implementation YapDatabaseFullTextSearchTransaction
31
-
32
- - (id)initWithFTSConnection:(YapDatabaseFullTextSearchConnection *)inFTSConnection
33
- databaseTransaction:(YapDatabaseReadTransaction *)inDatabaseTransaction
34
- {
35
- if ((self = [super init]))
36
- {
37
- ftsConnection = inFTSConnection;
38
- databaseTransaction = inDatabaseTransaction;
39
- }
40
- return self;
41
- }
42
-
43
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
44
- #pragma mark Extension Lifecycle
45
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
46
-
47
- /**
48
- * Required override method from YapDatabaseExtensionTransaction.
49
- *
50
- * This method is called to create any necessary tables (if needed),
51
- * as well as populate the view (if needed) by enumerating over the existing rows in the database.
52
- **/
53
- - (BOOL)createIfNeeded
54
- {
55
- int oldClassVersion = 0;
56
- BOOL hasOldClassVersion = [self getIntValue:&oldClassVersion forExtensionKey:@"classVersion"];
57
- int classVersion = YAP_DATABASE_FTS_CLASS_VERSION;
58
-
59
- if (oldClassVersion != classVersion)
60
- {
61
- // First time registration (or at least for this version)
62
-
63
- if (hasOldClassVersion) {
64
- if (![self dropTable]) return NO;
65
- }
66
-
67
- if (![self createTable]) return NO;
68
- if (![self populate]) return NO;
69
-
70
- [self setIntValue:classVersion forExtensionKey:@"classVersion"];
71
-
72
- int userSuppliedConfigVersion = ftsConnection->fts->version;
73
- [self setIntValue:userSuppliedConfigVersion forExtensionKey:@"version"];
74
- }
75
- else
76
- {
77
- // Check user-supplied config version.
78
- // We may need to re-populate the database if the groupingBlock or sortingBlock changed.
79
-
80
- int oldVersion = [self intValueForExtensionKey:@"version"];
81
- int newVersion = ftsConnection->fts->version;
82
-
83
- if (oldVersion != newVersion)
84
- {
85
- if (![self dropTable]) return NO;
86
- if (![self createTable]) return NO;
87
- if (![self populate]) return NO;
88
-
89
- [self setIntValue:newVersion forExtensionKey:@"version"];
90
- }
91
- }
92
-
93
- return YES;
94
- }
95
-
96
- /**
97
- * Required override method from YapDatabaseExtensionTransaction.
98
- *
99
- * This method is called to prepare the transaction for use.
100
- *
101
- * Remember, an extension transaction is a very short lived object.
102
- * Thus it stores the majority of its state within the extension connection (the parent).
103
- *
104
- * Return YES if completed successfully, or if already prepared.
105
- * Return NO if some kind of error occured.
106
- **/
107
- - (BOOL)prepareIfNeeded
108
- {
109
- return YES;
110
- }
111
-
112
- /**
113
- * Internal method.
114
- *
115
- * This method is called, if needed, to drop the old table.
116
- **/
117
- - (BOOL)dropTable
118
- {
119
- sqlite3 *db = databaseTransaction->connection->db;
120
-
121
- NSString *tableName = [self tableName];
122
- NSString *dropTable = [NSString stringWithFormat:@"DROP TABLE IF EXISTS \"%@\";", tableName];
123
-
124
- int status = sqlite3_exec(db, [dropTable UTF8String], NULL, NULL, NULL);
125
- if (status != SQLITE_OK)
126
- {
127
- YDBLogError(@"%@ - Failed dropping FTS table (%@): %d %s",
128
- THIS_METHOD, dropTable, status, sqlite3_errmsg(db));
129
- return NO;
130
- }
131
-
132
- return YES;
133
- }
134
-
135
- /**
136
- * Internal method.
137
- *
138
- * This method is called, if needed, to create the tables for the view.
139
- **/
140
- - (BOOL)createTable
141
- {
142
- sqlite3 *db = databaseTransaction->connection->db;
143
-
144
- NSString *tableName = [self tableName];
145
-
146
- YDBLogVerbose(@"Creating FTS table for registeredName(%@): %@", [self registeredName], tableName);
147
-
148
- // CREATE VIRTUAL TABLE pages USING fts4(column1, column2, column3);
149
-
150
- NSMutableString *createTable = [NSMutableString stringWithCapacity:100];
151
- [createTable appendFormat:@"CREATE VIRTUAL TABLE IF NOT EXISTS \"%@\" USING fts4(", tableName];
152
-
153
- __block NSUInteger i = 0;
154
-
155
- NSOrderedSet *columnNames = ftsConnection->fts->columnNames;
156
- for (NSString *columnName in columnNames)
157
- {
158
- if (i == 0)
159
- [createTable appendFormat:@"\"%@\"", columnName];
160
- else
161
- [createTable appendFormat:@", \"%@\"", columnName];
162
-
163
- i++;
164
- }
165
-
166
- NSDictionary *options = ftsConnection->fts->options;
167
- [options enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
168
-
169
- NSString *option = (NSString *)key;
170
- NSString *value = (NSString *)obj;
171
-
172
- if (i == 0)
173
- [createTable appendFormat:@"%@=%@", option, value];
174
- else
175
- [createTable appendFormat:@", %@=%@", option, value];
176
-
177
- i++;
178
- }];
179
-
180
- [createTable appendString:@");"];
181
-
182
- int status = sqlite3_exec(db, [createTable UTF8String], NULL, NULL, NULL);
183
- if (status != SQLITE_OK)
184
- {
185
- YDBLogError(@"%@ - Failed creating FTS table (%@): %d %s",
186
- THIS_METHOD, tableName, status, sqlite3_errmsg(db));
187
- return NO;
188
- }
189
-
190
- return YES;
191
- }
192
-
193
- /**
194
- * Internal method.
195
- *
196
- * This method is called, if needed, to populate the FTS indexes.
197
- * It does so by enumerating the rows in the database, and invoking the usual blocks and insertion methods.
198
- **/
199
- - (BOOL)populate
200
- {
201
- // Remove everything from the database
202
-
203
- [self removeAllRowids];
204
-
205
- // Enumerate the existing rows in the database and populate the indexes
206
-
207
- __unsafe_unretained YapDatabaseFullTextSearch *fts = ftsConnection->fts;
208
-
209
- BOOL needsObject = fts->blockType == YapDatabaseFullTextSearchBlockTypeWithObject ||
210
- fts->blockType == YapDatabaseFullTextSearchBlockTypeWithRow;
211
-
212
- BOOL needsMetadata = fts->blockType == YapDatabaseFullTextSearchBlockTypeWithMetadata ||
213
- fts->blockType == YapDatabaseFullTextSearchBlockTypeWithRow;
214
-
215
- if (needsObject && needsMetadata)
216
- {
217
- __unsafe_unretained YapDatabaseFullTextSearchWithRowBlock block =
218
- (YapDatabaseFullTextSearchWithRowBlock)fts->block;
219
-
220
- [databaseTransaction _enumerateRowsInAllCollectionsUsingBlock:
221
- ^(int64_t rowid, NSString *collection, NSString *key, id object, id metadata, BOOL *stop) {
222
-
223
- block(ftsConnection->blockDict, collection, key, object, metadata);
224
-
225
- if ([ftsConnection->blockDict count] > 0)
226
- {
227
- [self addRowid:rowid isNew:YES];
228
- [ftsConnection->blockDict removeAllObjects];
229
- }
230
- }];
231
- }
232
- else if (needsObject && !needsMetadata)
233
- {
234
- __unsafe_unretained YapDatabaseFullTextSearchWithObjectBlock block =
235
- (YapDatabaseFullTextSearchWithObjectBlock)fts->block;
236
-
237
- [databaseTransaction _enumerateKeysAndObjectsInAllCollectionsUsingBlock:
238
- ^(int64_t rowid, NSString *collection, NSString *key, id object, BOOL *stop) {
239
-
240
- block(ftsConnection->blockDict, collection, key, object);
241
-
242
- if ([ftsConnection->blockDict count] > 0)
243
- {
244
- [self addRowid:rowid isNew:YES];
245
- [ftsConnection->blockDict removeAllObjects];
246
- }
247
- }];
248
- }
249
- else if (!needsObject && needsMetadata)
250
- {
251
- __unsafe_unretained YapDatabaseFullTextSearchWithMetadataBlock block =
252
- (YapDatabaseFullTextSearchWithMetadataBlock)fts->block;
253
-
254
- [databaseTransaction _enumerateKeysAndMetadataInAllCollectionsUsingBlock:
255
- ^(int64_t rowid, NSString *collection, NSString *key, id metadata, BOOL *stop) {
256
-
257
- block(ftsConnection->blockDict, collection, key, metadata);
258
-
259
- if ([ftsConnection->blockDict count] > 0)
260
- {
261
- [self addRowid:rowid isNew:YES];
262
- [ftsConnection->blockDict removeAllObjects];
263
- }
264
- }];
265
- }
266
- else // if (!needsObject && !needsMetadata)
267
- {
268
- __unsafe_unretained YapDatabaseFullTextSearchWithKeyBlock block =
269
- (YapDatabaseFullTextSearchWithKeyBlock)fts->block;
270
-
271
- [databaseTransaction _enumerateKeysInAllCollectionsUsingBlock:
272
- ^(int64_t rowid, NSString *collection, NSString *key, BOOL *stop) {
273
-
274
- block(ftsConnection->blockDict, collection, key);
275
-
276
- if ([ftsConnection->blockDict count] > 0)
277
- {
278
- [self addRowid:rowid isNew:YES];
279
- [ftsConnection->blockDict removeAllObjects];
280
- }
281
- }];
282
- }
283
-
284
- return YES;
285
- }
286
-
287
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
288
- #pragma mark Accessors
289
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
290
-
291
- /**
292
- * Required override method from YapDatabaseExtensionTransaction.
293
- **/
294
- - (YapDatabaseReadTransaction *)databaseTransaction
295
- {
296
- return databaseTransaction;
297
- }
298
-
299
- /**
300
- * Required override method from YapDatabaseExtensionTransaction.
301
- **/
302
- - (YapDatabaseExtensionConnection *)extensionConnection
303
- {
304
- return ftsConnection;
305
- }
306
-
307
- - (NSString *)registeredName
308
- {
309
- return [ftsConnection->fts registeredName];
310
- }
311
-
312
- - (NSString *)tableName
313
- {
314
- return [ftsConnection->fts tableName];
315
- }
316
-
317
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
318
- #pragma mark Logic
319
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
320
-
321
- - (void)addRowid:(int64_t)rowid isNew:(BOOL)isNew
322
- {
323
- YDBLogAutoTrace();
324
-
325
- sqlite3_stmt *statement = NULL;
326
- if (isNew)
327
- statement = [ftsConnection insertRowidStatement];
328
- else
329
- statement = [ftsConnection setRowidStatement];
330
-
331
- if (statement == NULL)
332
- return;
333
-
334
- // isNew : INSERT INTO "tableName" ("rowid", "column1", "column2", ...) VALUES (?, ?, ? ...)
335
- // !isNew : INSERT OR REPLACE INTO "tableName" ("rowid", "column1", "column2", ...) VALUES (?, ?, ? ...)
336
-
337
- sqlite3_bind_int64(statement, 1, rowid);
338
-
339
- int i = 2;
340
- for (NSString *columnName in ftsConnection->fts->columnNames)
341
- {
342
- NSString *columnValue = [ftsConnection->blockDict objectForKey:columnName];
343
- if (columnValue)
344
- {
345
- sqlite3_bind_text(statement, i, [columnValue UTF8String], -1, SQLITE_TRANSIENT);
346
- }
347
-
348
- i++;
349
- }
350
-
351
- int status = sqlite3_step(statement);
352
- if (status != SQLITE_DONE)
353
- {
354
- YDBLogError(@"Error executing '%s': %d %s",
355
- isNew ? "insertRowidStatement" : "setRowidStatement",
356
- status, sqlite3_errmsg(databaseTransaction->connection->db));
357
- }
358
-
359
- sqlite3_clear_bindings(statement);
360
- sqlite3_reset(statement);
361
-
362
- isMutated = YES;
363
- }
364
-
365
- - (void)removeRowid:(int64_t)rowid
366
- {
367
- YDBLogAutoTrace();
368
-
369
- sqlite3_stmt *statement = [ftsConnection removeRowidStatement];
370
- if (statement == NULL) return;
371
-
372
- // DELETE FROM "tableName" WHERE "rowid" = ?;
373
-
374
- sqlite3_bind_int64(statement, 1, rowid);
375
-
376
- int status = sqlite3_step(statement);
377
- if (status != SQLITE_DONE)
378
- {
379
- YDBLogError(@"Error executing 'removeRowidStatement': %d %s",
380
- status, sqlite3_errmsg(databaseTransaction->connection->db));
381
- }
382
-
383
- sqlite3_clear_bindings(statement);
384
- sqlite3_reset(statement);
385
-
386
- isMutated = YES;
387
- }
388
-
389
- - (void)removeRowids:(NSArray *)rowids
390
- {
391
- YDBLogAutoTrace();
392
-
393
- NSUInteger count = [rowids count];
394
-
395
- if (count == 0) return;
396
- if (count == 1)
397
- {
398
- int64_t rowid = [[rowids objectAtIndex:0] longLongValue];
399
-
400
- [self removeRowid:rowid];
401
- return;
402
- }
403
-
404
- // DELETE FROM "tableName" WHERE "rowid" in (?, ?, ...);
405
- //
406
- // Note: We don't have to worry sqlite's max number of host parameters.
407
- // YapDatabase gives us the rowids in batches where each batch is already capped at this number.
408
-
409
- NSUInteger capacity = 50 + (count * 3);
410
- NSMutableString *query = [NSMutableString stringWithCapacity:capacity];
411
-
412
- [query appendFormat:@"DELETE FROM \"%@\" WHERE \"rowid\" IN (", [self tableName]];
413
-
414
- NSUInteger i;
415
- for (i = 0; i < count; i++)
416
- {
417
- if (i == 0)
418
- [query appendFormat:@"?"];
419
- else
420
- [query appendFormat:@", ?"];
421
- }
422
-
423
- [query appendString:@");"];
424
-
425
- sqlite3_stmt *statement;
426
-
427
- int status = sqlite3_prepare_v2(databaseTransaction->connection->db, [query UTF8String], -1, &statement, NULL);
428
- if (status != SQLITE_OK)
429
- {
430
- YDBLogError(@"Error creating 'removeRowids' statement: %d %s",
431
- status, sqlite3_errmsg(databaseTransaction->connection->db));
432
- return;
433
- }
434
-
435
- for (i = 0; i < count; i++)
436
- {
437
- int64_t rowid = [[rowids objectAtIndex:i] longLongValue];
438
-
439
- sqlite3_bind_int64(statement, (int)(i + 1), rowid);
440
- }
441
-
442
- status = sqlite3_step(statement);
443
- if (status != SQLITE_DONE)
444
- {
445
- YDBLogError(@"Error executing 'removeRowids' statement: %d %s",
446
- status, sqlite3_errmsg(databaseTransaction->connection->db));
447
- }
448
-
449
- sqlite3_finalize(statement);
450
-
451
- isMutated = YES;
452
- }
453
-
454
- - (void)removeAllRowids
455
- {
456
- YDBLogAutoTrace();
457
-
458
- sqlite3_stmt *statement = [ftsConnection removeAllStatement];
459
- if (statement == NULL)
460
- return;
461
-
462
- int status;
463
-
464
- // DELETE FROM "tableName";
465
-
466
- YDBLogVerbose(@"DELETE FROM '%@';", [self tableName]);
467
-
468
- status = sqlite3_step(statement);
469
- if (status != SQLITE_DONE)
470
- {
471
- YDBLogError(@"%@ (%@): Error in removeAllStatement: %d %s",
472
- THIS_METHOD, [self registeredName],
473
- status, sqlite3_errmsg(databaseTransaction->connection->db));
474
- }
475
-
476
- sqlite3_reset(statement);
477
-
478
- isMutated = YES;
479
- }
480
-
481
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
482
- #pragma mark Cleanup & Commit
483
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
484
-
485
- /**
486
- * Required override method from YapDatabaseExtension
487
- **/
488
- - (void)commitTransaction
489
- {
490
- // An extensionTransaction is only valid within the scope of its encompassing databaseTransaction.
491
- // I imagine this may occasionally be misunderstood, and developers may attempt to store the extension in an ivar,
492
- // and then use it outside the context of the database transaction block.
493
- // Thus, this code is here as a safety net to ensure that such accidental misuse doesn't do any damage.
494
-
495
- ftsConnection = nil; // Do not remove !
496
- databaseTransaction = nil; // Do not remove !
497
- }
498
-
499
- /**
500
- * Required override method from YapDatabaseExtension
501
- **/
502
- - (void)rollbackTransaction
503
- {
504
- // An extensionTransaction is only valid within the scope of its encompassing databaseTransaction.
505
- // I imagine this may occasionally be misunderstood, and developers may attempt to store the extension in an ivar,
506
- // and then use it outside the context of the database transaction block.
507
- // Thus, this code is here as a safety net to ensure that such accidental misuse doesn't do any damage.
508
-
509
- ftsConnection = nil; // Do not remove !
510
- databaseTransaction = nil; // Do not remove !
511
- }
512
-
513
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
514
- #pragma mark YapDatabaseExtensionTransaction_Hooks
515
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
516
-
517
- /**
518
- * YapDatabase extension hook.
519
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
520
- **/
521
- - (void)handleInsertObject:(id)object
522
- forCollectionKey:(YapCollectionKey *)collectionKey
523
- withMetadata:(id)metadata
524
- rowid:(int64_t)rowid
525
- {
526
- YDBLogAutoTrace();
527
-
528
- __unsafe_unretained YapDatabaseFullTextSearch *fts = ftsConnection->fts;
529
-
530
- __unsafe_unretained NSString *collection = collectionKey.collection;
531
- __unsafe_unretained NSString *key = collectionKey.key;
532
-
533
- // Invoke the block to find out if the object should be included in the index.
534
-
535
- if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithKey)
536
- {
537
- __unsafe_unretained YapDatabaseFullTextSearchWithKeyBlock block =
538
- (YapDatabaseFullTextSearchWithKeyBlock)fts->block;
539
-
540
- block(ftsConnection->blockDict, collection, key);
541
- }
542
- else if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithObject)
543
- {
544
- __unsafe_unretained YapDatabaseFullTextSearchWithObjectBlock block =
545
- (YapDatabaseFullTextSearchWithObjectBlock)fts->block;
546
-
547
- block(ftsConnection->blockDict, collection, key, object);
548
- }
549
- else if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithMetadata)
550
- {
551
- __unsafe_unretained YapDatabaseFullTextSearchWithMetadataBlock block =
552
- (YapDatabaseFullTextSearchWithMetadataBlock)fts->block;
553
-
554
- block(ftsConnection->blockDict, collection, key, metadata);
555
- }
556
- else
557
- {
558
- __unsafe_unretained YapDatabaseFullTextSearchWithRowBlock block =
559
- (YapDatabaseFullTextSearchWithRowBlock)fts->block;
560
-
561
- block(ftsConnection->blockDict, collection, key, object, metadata);
562
- }
563
-
564
- if ([ftsConnection->blockDict count] == 0)
565
- {
566
- // This was an insert operation, so we don't have to worry about removing anything.
567
- }
568
- else
569
- {
570
- // Add values to index.
571
- // This was an insert operation, so we know we can insert rather than update.
572
-
573
- [self addRowid:rowid isNew:YES];
574
- [ftsConnection->blockDict removeAllObjects];
575
- }
576
- }
577
-
578
- /**
579
- * YapDatabase extension hook.
580
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
581
- **/
582
- - (void)handleUpdateObject:(id)object
583
- forCollectionKey:(YapCollectionKey *)collectionKey
584
- withMetadata:(id)metadata
585
- rowid:(int64_t)rowid
586
- {
587
- YDBLogAutoTrace();
588
-
589
- __unsafe_unretained YapDatabaseFullTextSearch *fts = ftsConnection->fts;
590
-
591
- __unsafe_unretained NSString *collection = collectionKey.collection;
592
- __unsafe_unretained NSString *key = collectionKey.key;
593
-
594
- // Invoke the block to find out if the object should be included in the index.
595
-
596
- if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithKey)
597
- {
598
- __unsafe_unretained YapDatabaseFullTextSearchWithKeyBlock block =
599
- (YapDatabaseFullTextSearchWithKeyBlock)fts->block;
600
-
601
- block(ftsConnection->blockDict, collection, key);
602
- }
603
- else if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithObject)
604
- {
605
- __unsafe_unretained YapDatabaseFullTextSearchWithObjectBlock block =
606
- (YapDatabaseFullTextSearchWithObjectBlock)fts->block;
607
-
608
- block(ftsConnection->blockDict, collection, key, object);
609
- }
610
- else if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithMetadata)
611
- {
612
- __unsafe_unretained YapDatabaseFullTextSearchWithMetadataBlock block =
613
- (YapDatabaseFullTextSearchWithMetadataBlock)fts->block;
614
-
615
- block(ftsConnection->blockDict, collection, key, metadata);
616
- }
617
- else
618
- {
619
- __unsafe_unretained YapDatabaseFullTextSearchWithRowBlock block =
620
- (YapDatabaseFullTextSearchWithRowBlock)fts->block;
621
-
622
- block(ftsConnection->blockDict, collection, key, object, metadata);
623
- }
624
-
625
- if ([ftsConnection->blockDict count] == 0)
626
- {
627
- // Remove associated values from index (if needed).
628
- // This was an update operation, so the rowid may have previously had values in the index.
629
-
630
- [self removeRowid:rowid];
631
- }
632
- else
633
- {
634
- // Add values to index (or update them).
635
- // This was an update operation, so we need to insert or update.
636
-
637
- [self addRowid:rowid isNew:NO];
638
- [ftsConnection->blockDict removeAllObjects];
639
- }
640
- }
641
-
642
- /**
643
- * YapDatabase extension hook.
644
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
645
- **/
646
- - (void)handleReplaceObject:(id)object forCollectionKey:(YapCollectionKey *)collectionKey withRowid:(int64_t)rowid
647
- {
648
- YDBLogAutoTrace();
649
-
650
- __unsafe_unretained YapDatabaseFullTextSearch *fts = ftsConnection->fts;
651
-
652
- __unsafe_unretained NSString *collection = collectionKey.collection;
653
- __unsafe_unretained NSString *key = collectionKey.key;
654
-
655
- // Invoke the block to find out if the object should be included in the index.
656
-
657
- id metadata = nil;
658
-
659
- if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithKey ||
660
- fts->blockType == YapDatabaseFullTextSearchBlockTypeWithMetadata)
661
- {
662
- // Index values are based on the key or metadata.
663
- // Neither have changed, and thus the values haven't changed.
664
-
665
- return;
666
- }
667
- else
668
- {
669
- // Index values are based on object or row (object+metadata).
670
- // Invoke block to see what the new values are.
671
-
672
- if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithObject)
673
- {
674
- __unsafe_unretained YapDatabaseFullTextSearchWithObjectBlock block =
675
- (YapDatabaseFullTextSearchWithObjectBlock)fts->block;
676
-
677
- block(ftsConnection->blockDict, collection, key, object);
678
- }
679
- else
680
- {
681
- __unsafe_unretained YapDatabaseFullTextSearchWithRowBlock block =
682
- (YapDatabaseFullTextSearchWithRowBlock)fts->block;
683
-
684
- metadata = [databaseTransaction metadataForCollectionKey:collectionKey withRowid:rowid];
685
- block(ftsConnection->blockDict, collection, key, object, metadata);
686
- }
687
-
688
- if ([ftsConnection->blockDict count] == 0)
689
- {
690
- // Remove associated values from index (if needed).
691
- // This was an update operation, so the rowid may have previously had values in the index.
692
-
693
- [self removeRowid:rowid];
694
- }
695
- else
696
- {
697
- // Add values to index (or update them).
698
- // This was an update operation, so we need to insert or update.
699
-
700
- [self addRowid:rowid isNew:NO];
701
- [ftsConnection->blockDict removeAllObjects];
702
- }
703
- }
704
- }
705
-
706
- /**
707
- * YapDatabase extension hook.
708
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
709
- **/
710
- - (void)handleReplaceMetadata:(id)metadata forCollectionKey:(YapCollectionKey *)collectionKey withRowid:(int64_t)rowid
711
- {
712
- YDBLogAutoTrace();
713
-
714
- __unsafe_unretained YapDatabaseFullTextSearch *fts = ftsConnection->fts;
715
-
716
- __unsafe_unretained NSString *collection = collectionKey.collection;
717
- __unsafe_unretained NSString *key = collectionKey.key;
718
-
719
- // Invoke the block to find out if the object should be included in the index.
720
-
721
- id object = nil;
722
-
723
- if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithKey ||
724
- fts->blockType == YapDatabaseFullTextSearchBlockTypeWithObject)
725
- {
726
- // Index values are based on the key or object.
727
- // Neither have changed, and thus the values haven't changed.
728
-
729
- return;
730
- }
731
- else
732
- {
733
- // Index values are based on metadata or row (object+metadata).
734
- // Invoke block to see what the new values are.
735
-
736
- if (fts->blockType == YapDatabaseFullTextSearchBlockTypeWithMetadata)
737
- {
738
- __unsafe_unretained YapDatabaseFullTextSearchWithMetadataBlock block =
739
- (YapDatabaseFullTextSearchWithMetadataBlock)fts->block;
740
-
741
- block(ftsConnection->blockDict, collection, key, metadata);
742
- }
743
- else
744
- {
745
- __unsafe_unretained YapDatabaseFullTextSearchWithRowBlock block =
746
- (YapDatabaseFullTextSearchWithRowBlock)fts->block;
747
-
748
- object = [databaseTransaction objectForCollectionKey:collectionKey withRowid:rowid];
749
- block(ftsConnection->blockDict, collection, key, object, metadata);
750
- }
751
-
752
- if ([ftsConnection->blockDict count] == 0)
753
- {
754
- // Remove associated values from index (if needed).
755
- // This was an update operation, so the rowid may have previously had values in the index.
756
-
757
- [self removeRowid:rowid];
758
- }
759
- else
760
- {
761
- // Add values to index (or update them).
762
- // This was an update operation, so we need to insert or update.
763
-
764
- [self addRowid:rowid isNew:NO];
765
- [ftsConnection->blockDict removeAllObjects];
766
- }
767
- }
768
- }
769
-
770
- /**
771
- * YapDatabase extension hook.
772
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
773
- **/
774
- - (void)handleTouchObjectForCollectionKey:(YapCollectionKey *)collectionKey withRowid:(int64_t)rowid
775
- {
776
- // Nothing to do for this extension
777
- }
778
-
779
- /**
780
- * YapDatabase extension hook.
781
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
782
- **/
783
- - (void)handleTouchMetadataForCollectionKey:(YapCollectionKey *)collectionKey withRowid:(int64_t)rowid
784
- {
785
- // Nothing to do for this extension
786
- }
787
-
788
- /**
789
- * YapDatabase extension hook.
790
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
791
- **/
792
- - (void)handleRemoveObjectForCollectionKey:(YapCollectionKey *)collectionKey withRowid:(int64_t)rowid
793
- {
794
- YDBLogAutoTrace();
795
-
796
- [self removeRowid:rowid];
797
- }
798
-
799
- /**
800
- * YapDatabase extension hook.
801
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
802
- **/
803
- - (void)handleRemoveObjectsForKeys:(NSArray *)keys inCollection:(NSString *)collection withRowids:(NSArray *)rowids
804
- {
805
- YDBLogAutoTrace();
806
-
807
- [self removeRowids:rowids];
808
- }
809
-
810
- /**
811
- * YapDatabase extension hook.
812
- * This method is invoked by a YapDatabaseReadWriteTransaction as a post-operation-hook.
813
- **/
814
- - (void)handleRemoveAllObjectsInAllCollections
815
- {
816
- YDBLogAutoTrace();
817
-
818
- [self removeAllRowids];
819
- }
820
-
821
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
822
- #pragma mark Queries
823
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
824
-
825
- - (void)enumerateKeysMatching:(NSString *)query
826
- usingBlock:(void (^)(NSString *collection, NSString *key, BOOL *stop))block
827
- {
828
- if (block == nil) return;
829
- if ([query length] == 0) return;
830
-
831
- sqlite3_stmt *statement = [ftsConnection queryStatement];
832
- if (statement == NULL) return;
833
-
834
- BOOL stop = NO;
835
- isMutated = NO; // mutation during enumeration protection
836
-
837
- // SELECT "rowid" FROM "tableName" WHERE "tableName" MATCH ?;
838
-
839
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
840
- sqlite3_bind_text(statement, 1, _query.str, _query.length, SQLITE_STATIC);
841
-
842
- int status = sqlite3_step(statement);
843
- if (status == SQLITE_ROW)
844
- {
845
- do
846
- {
847
- int64_t rowid = sqlite3_column_int64(statement, 0);
848
-
849
- YapCollectionKey *ck = [databaseTransaction collectionKeyForRowid:rowid];
850
-
851
- block(ck.collection, ck.key, &stop);
852
-
853
- if (stop || isMutated) break;
854
-
855
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
856
- }
857
-
858
- if ((status != SQLITE_DONE) && !stop && !isMutated)
859
- {
860
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
861
- status, sqlite3_errmsg(databaseTransaction->connection->db));
862
- }
863
-
864
- sqlite3_clear_bindings(statement);
865
- sqlite3_reset(statement);
866
- FreeYapDatabaseString(&_query);
867
-
868
- if (isMutated && !stop)
869
- {
870
- @throw [databaseTransaction mutationDuringEnumerationException];
871
- }
872
- }
873
-
874
- - (void)enumerateKeysAndMetadataMatching:(NSString *)query
875
- usingBlock:(void (^)(NSString *collection, NSString *key, id metadata, BOOL *stop))block
876
- {
877
- if (block == nil) return;
878
- if ([query length] == 0) return;
879
-
880
- sqlite3_stmt *statement = [ftsConnection queryStatement];
881
- if (statement == NULL) return;
882
-
883
- BOOL stop = NO;
884
- isMutated = NO; // mutation during enumeration protection
885
-
886
- // SELECT "rowid" FROM "tableName" WHERE "tableName" MATCH ?;
887
-
888
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
889
- sqlite3_bind_text(statement, 1, _query.str, _query.length, SQLITE_STATIC);
890
-
891
- int status = sqlite3_step(statement);
892
- if (status == SQLITE_ROW)
893
- {
894
- do
895
- {
896
- int64_t rowid = sqlite3_column_int64(statement, 0);
897
-
898
- YapCollectionKey *ck = nil;
899
- id metadata = nil;
900
- [databaseTransaction getCollectionKey:&ck metadata:&metadata forRowid:rowid];
901
-
902
- block(ck.collection, ck.key, metadata, &stop);
903
-
904
- if (stop || isMutated) break;
905
-
906
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
907
- }
908
-
909
- if ((status != SQLITE_DONE) && !stop && !isMutated)
910
- {
911
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
912
- status, sqlite3_errmsg(databaseTransaction->connection->db));
913
- }
914
-
915
- sqlite3_clear_bindings(statement);
916
- sqlite3_reset(statement);
917
- FreeYapDatabaseString(&_query);
918
-
919
- if (isMutated && !stop)
920
- {
921
- @throw [databaseTransaction mutationDuringEnumerationException];
922
- }
923
- }
924
-
925
- - (void)enumerateKeysAndObjectsMatching:(NSString *)query
926
- usingBlock:(void (^)(NSString *collection, NSString *key, id object, BOOL *stop))block
927
- {
928
- if (block == nil) return;
929
- if ([query length] == 0) return;
930
-
931
- sqlite3_stmt *statement = [ftsConnection queryStatement];
932
- if (statement == NULL) return;
933
-
934
- BOOL stop = NO;
935
- isMutated = NO; // mutation during enumeration protection
936
-
937
- // SELECT "rowid" FROM "tableName" WHERE "tableName" MATCH ?;
938
-
939
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
940
- sqlite3_bind_text(statement, 1, _query.str, _query.length, SQLITE_STATIC);
941
-
942
- int status = sqlite3_step(statement);
943
- if (status == SQLITE_ROW)
944
- {
945
- do
946
- {
947
- int64_t rowid = sqlite3_column_int64(statement, 0);
948
-
949
- YapCollectionKey *ck = nil;
950
- id object = nil;
951
- [databaseTransaction getCollectionKey:&ck object:&object forRowid:rowid];
952
-
953
- block(ck.collection, ck.key, object, &stop);
954
-
955
- if (stop || isMutated) break;
956
-
957
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
958
- }
959
-
960
- if ((status != SQLITE_DONE) && !stop && !isMutated)
961
- {
962
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
963
- status, sqlite3_errmsg(databaseTransaction->connection->db));
964
- }
965
-
966
- sqlite3_clear_bindings(statement);
967
- sqlite3_reset(statement);
968
- FreeYapDatabaseString(&_query);
969
-
970
- if (isMutated && !stop)
971
- {
972
- @throw [databaseTransaction mutationDuringEnumerationException];
973
- }
974
- }
975
-
976
- - (void)enumerateRowsMatching:(NSString *)query
977
- usingBlock:(void (^)(NSString *collection, NSString *key, id object, id metadata, BOOL *stop))block
978
- {
979
- if (block == nil) return;
980
- if ([query length] == 0) return;
981
-
982
- sqlite3_stmt *statement = [ftsConnection queryStatement];
983
- if (statement == NULL) return;
984
-
985
- BOOL stop = NO;
986
- isMutated = NO; // mutation during enumeration protection
987
-
988
- // SELECT "rowid" FROM "tableName" WHERE "tableName" MATCH ?;
989
-
990
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
991
- sqlite3_bind_text(statement, 1, _query.str, _query.length, SQLITE_STATIC);
992
-
993
- int status = sqlite3_step(statement);
994
- if (status == SQLITE_ROW)
995
- {
996
- do
997
- {
998
- int64_t rowid = sqlite3_column_int64(statement, 0);
999
-
1000
- YapCollectionKey *ck = nil;
1001
- id object = nil;
1002
- id metadata = nil;
1003
- [databaseTransaction getCollectionKey:&ck object:&object metadata:&metadata forRowid:rowid];
1004
-
1005
- block(ck.collection, ck.key, object, metadata, &stop);
1006
-
1007
- if (stop || isMutated) break;
1008
-
1009
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
1010
- }
1011
-
1012
- if ((status != SQLITE_DONE) && !stop && !isMutated)
1013
- {
1014
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
1015
- status, sqlite3_errmsg(databaseTransaction->connection->db));
1016
- }
1017
-
1018
- sqlite3_clear_bindings(statement);
1019
- sqlite3_reset(statement);
1020
- FreeYapDatabaseString(&_query);
1021
-
1022
- if (isMutated && !stop)
1023
- {
1024
- @throw [databaseTransaction mutationDuringEnumerationException];
1025
- }
1026
- }
1027
-
1028
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1029
- #pragma mark Queries with Snippets
1030
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1031
-
1032
- - (void)enumerateKeysMatching:(NSString *)query
1033
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)inOptions
1034
- usingBlock:
1035
- (void (^)(NSString *snippet, NSString *collection, NSString *key, BOOL *stop))block
1036
- {
1037
- if (block == nil) return;
1038
- if ([query length] == 0) return;
1039
-
1040
- sqlite3_stmt *statement = [ftsConnection querySnippetStatement];
1041
- if (statement == NULL) return;
1042
-
1043
- YapDatabaseFullTextSearchSnippetOptions *options;
1044
- if (inOptions)
1045
- options = [inOptions copy];
1046
- else
1047
- options = [[YapDatabaseFullTextSearchSnippetOptions alloc] init]; // default snippet options
1048
-
1049
- BOOL stop = NO;
1050
- isMutated = NO; // mutation during enumeration protection
1051
-
1052
- // SELECT "rowid", snippet("tableName", ?, ?, ?, ?, ?) FROM "tableName" WHERE "tableName" MATCH ?;
1053
-
1054
- YapDatabaseString _startMatchText; MakeYapDatabaseString(&_startMatchText, options.startMatchText);
1055
- sqlite3_bind_text(statement, 1, _startMatchText.str, _startMatchText.length, SQLITE_STATIC);
1056
-
1057
- YapDatabaseString _endMatchText; MakeYapDatabaseString(&_endMatchText, options.endMatchText);
1058
- sqlite3_bind_text(statement, 2, _endMatchText.str, _endMatchText.length, SQLITE_STATIC);
1059
-
1060
- YapDatabaseString _ellipsesText; MakeYapDatabaseString(&_ellipsesText, options.ellipsesText);
1061
- sqlite3_bind_text(statement, 3, _ellipsesText.str, _ellipsesText.length, SQLITE_STATIC);
1062
-
1063
- int columnIndex = -1;
1064
- if (options.columnName)
1065
- {
1066
- NSUInteger index = [ftsConnection->fts->columnNames indexOfObject:options.columnName];
1067
- if (index == NSNotFound)
1068
- {
1069
- YDBLogWarn(@"Invalid snippet option: columnName(%@) not found", options.columnName);
1070
- }
1071
- else
1072
- {
1073
- columnIndex = (int)index;
1074
- }
1075
- }
1076
- sqlite3_bind_int(statement, 4, columnIndex);
1077
- sqlite3_bind_int(statement, 5, options.numberOfTokens);
1078
-
1079
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
1080
- sqlite3_bind_text(statement, 6, _query.str, _query.length, SQLITE_STATIC);
1081
-
1082
- int status = sqlite3_step(statement);
1083
- if (status == SQLITE_ROW)
1084
- {
1085
- do
1086
- {
1087
- int64_t rowid = sqlite3_column_int64(statement, 0);
1088
-
1089
- const unsigned char *text = sqlite3_column_text(statement, 1);
1090
- int textSize = sqlite3_column_bytes(statement, 1);
1091
-
1092
- NSString *snippet = [[NSString alloc] initWithBytes:text length:textSize encoding:NSUTF8StringEncoding];
1093
-
1094
- YapCollectionKey *ck = [databaseTransaction collectionKeyForRowid:rowid];
1095
-
1096
- block(snippet, ck.collection, ck.key, &stop);
1097
-
1098
- if (stop || isMutated) break;
1099
-
1100
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
1101
- }
1102
-
1103
- if ((status != SQLITE_DONE) && !stop && !isMutated)
1104
- {
1105
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
1106
- status, sqlite3_errmsg(databaseTransaction->connection->db));
1107
- }
1108
-
1109
- sqlite3_clear_bindings(statement);
1110
- sqlite3_reset(statement);
1111
-
1112
- FreeYapDatabaseString(&_startMatchText);
1113
- FreeYapDatabaseString(&_endMatchText);
1114
- FreeYapDatabaseString(&_ellipsesText);
1115
- FreeYapDatabaseString(&_query);
1116
-
1117
- if (isMutated && !stop)
1118
- {
1119
- @throw [databaseTransaction mutationDuringEnumerationException];
1120
- }
1121
- }
1122
-
1123
- - (void)enumerateKeysAndMetadataMatching:(NSString *)query
1124
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)inOptions
1125
- usingBlock:
1126
- (void (^)(NSString *snippet, NSString *collection, NSString *key, id metadata, BOOL *stop))block
1127
- {
1128
- if (block == nil) return;
1129
- if ([query length] == 0) return;
1130
-
1131
- sqlite3_stmt *statement = [ftsConnection querySnippetStatement];
1132
- if (statement == NULL) return;
1133
-
1134
- YapDatabaseFullTextSearchSnippetOptions *options;
1135
- if (inOptions)
1136
- options = [inOptions copy];
1137
- else
1138
- options = [[YapDatabaseFullTextSearchSnippetOptions alloc] init]; // default snippet options
1139
-
1140
- BOOL stop = NO;
1141
- isMutated = NO; // mutation during enumeration protection
1142
-
1143
- // SELECT "rowid", snippet("tableName", ?, ?, ?, ?, ?) FROM "tableName" WHERE "tableName" MATCH ?;
1144
-
1145
- YapDatabaseString _startMatchText; MakeYapDatabaseString(&_startMatchText, options.startMatchText);
1146
- sqlite3_bind_text(statement, 1, _startMatchText.str, _startMatchText.length, SQLITE_STATIC);
1147
-
1148
- YapDatabaseString _endMatchText; MakeYapDatabaseString(&_endMatchText, options.endMatchText);
1149
- sqlite3_bind_text(statement, 2, _endMatchText.str, _endMatchText.length, SQLITE_STATIC);
1150
-
1151
- YapDatabaseString _ellipsesText; MakeYapDatabaseString(&_ellipsesText, options.ellipsesText);
1152
- sqlite3_bind_text(statement, 3, _ellipsesText.str, _ellipsesText.length, SQLITE_STATIC);
1153
-
1154
- int columnIndex = -1;
1155
- if (options.columnName)
1156
- {
1157
- NSUInteger index = [ftsConnection->fts->columnNames indexOfObject:options.columnName];
1158
- if (index == NSNotFound)
1159
- {
1160
- YDBLogWarn(@"Invalid snippet option: columnName(%@) not found", options.columnName);
1161
- }
1162
- else
1163
- {
1164
- columnIndex = (int)index;
1165
- }
1166
- }
1167
- sqlite3_bind_int(statement, 4, columnIndex);
1168
- sqlite3_bind_int(statement, 5, options.numberOfTokens);
1169
-
1170
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
1171
- sqlite3_bind_text(statement, 6, _query.str, _query.length, SQLITE_STATIC);
1172
-
1173
- int status = sqlite3_step(statement);
1174
- if (status == SQLITE_ROW)
1175
- {
1176
- do
1177
- {
1178
- int64_t rowid = sqlite3_column_int64(statement, 0);
1179
-
1180
- const unsigned char *text = sqlite3_column_text(statement, 1);
1181
- int textSize = sqlite3_column_bytes(statement, 1);
1182
-
1183
- NSString *snippet = [[NSString alloc] initWithBytes:text length:textSize encoding:NSUTF8StringEncoding];
1184
-
1185
- YapCollectionKey *ck = nil;
1186
- id metadata = nil;
1187
- [databaseTransaction getCollectionKey:&ck metadata:&metadata forRowid:rowid];
1188
-
1189
- block(snippet, ck.collection, ck.key, metadata, &stop);
1190
-
1191
- if (stop || isMutated) break;
1192
-
1193
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
1194
- }
1195
-
1196
- if ((status != SQLITE_DONE) && !stop && !isMutated)
1197
- {
1198
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
1199
- status, sqlite3_errmsg(databaseTransaction->connection->db));
1200
- }
1201
-
1202
- sqlite3_clear_bindings(statement);
1203
- sqlite3_reset(statement);
1204
-
1205
- FreeYapDatabaseString(&_startMatchText);
1206
- FreeYapDatabaseString(&_endMatchText);
1207
- FreeYapDatabaseString(&_ellipsesText);
1208
- FreeYapDatabaseString(&_query);
1209
-
1210
- if (isMutated && !stop)
1211
- {
1212
- @throw [databaseTransaction mutationDuringEnumerationException];
1213
- }
1214
- }
1215
-
1216
- - (void)enumerateKeysAndObjectsMatching:(NSString *)query
1217
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)inOptions
1218
- usingBlock:
1219
- (void (^)(NSString *snippet, NSString *collection, NSString *key, id object, BOOL *stop))block
1220
- {
1221
- if (block == nil) return;
1222
- if ([query length] == 0) return;
1223
-
1224
- sqlite3_stmt *statement = [ftsConnection querySnippetStatement];
1225
- if (statement == NULL) return;
1226
-
1227
- YapDatabaseFullTextSearchSnippetOptions *options;
1228
- if (inOptions)
1229
- options = [inOptions copy];
1230
- else
1231
- options = [[YapDatabaseFullTextSearchSnippetOptions alloc] init]; // default snippet options
1232
-
1233
- BOOL stop = NO;
1234
- isMutated = NO; // mutation during enumeration protection
1235
-
1236
- // SELECT "rowid", snippet("tableName", ?, ?, ?, ?, ?) FROM "tableName" WHERE "tableName" MATCH ?;
1237
-
1238
- YapDatabaseString _startMatchText; MakeYapDatabaseString(&_startMatchText, options.startMatchText);
1239
- sqlite3_bind_text(statement, 1, _startMatchText.str, _startMatchText.length, SQLITE_STATIC);
1240
-
1241
- YapDatabaseString _endMatchText; MakeYapDatabaseString(&_endMatchText, options.endMatchText);
1242
- sqlite3_bind_text(statement, 2, _endMatchText.str, _endMatchText.length, SQLITE_STATIC);
1243
-
1244
- YapDatabaseString _ellipsesText; MakeYapDatabaseString(&_ellipsesText, options.ellipsesText);
1245
- sqlite3_bind_text(statement, 3, _ellipsesText.str, _ellipsesText.length, SQLITE_STATIC);
1246
-
1247
- int columnIndex = -1;
1248
- if (options.columnName)
1249
- {
1250
- NSUInteger index = [ftsConnection->fts->columnNames indexOfObject:options.columnName];
1251
- if (index == NSNotFound)
1252
- {
1253
- YDBLogWarn(@"Invalid snippet option: columnName(%@) not found", options.columnName);
1254
- }
1255
- else
1256
- {
1257
- columnIndex = (int)index;
1258
- }
1259
- }
1260
- sqlite3_bind_int(statement, 4, columnIndex);
1261
- sqlite3_bind_int(statement, 5, options.numberOfTokens);
1262
-
1263
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
1264
- sqlite3_bind_text(statement, 6, _query.str, _query.length, SQLITE_STATIC);
1265
-
1266
- int status = sqlite3_step(statement);
1267
- if (status == SQLITE_ROW)
1268
- {
1269
- do
1270
- {
1271
- int64_t rowid = sqlite3_column_int64(statement, 0);
1272
-
1273
- const unsigned char *text = sqlite3_column_text(statement, 1);
1274
- int textSize = sqlite3_column_bytes(statement, 1);
1275
-
1276
- NSString *snippet = [[NSString alloc] initWithBytes:text length:textSize encoding:NSUTF8StringEncoding];
1277
-
1278
- YapCollectionKey *ck = nil;
1279
- id object = nil;
1280
- [databaseTransaction getCollectionKey:&ck object:&object forRowid:rowid];
1281
-
1282
- block(snippet, ck.collection, ck.key, object, &stop);
1283
-
1284
- if (stop || isMutated) break;
1285
-
1286
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
1287
- }
1288
-
1289
- if ((status != SQLITE_DONE) && !stop && !isMutated)
1290
- {
1291
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
1292
- status, sqlite3_errmsg(databaseTransaction->connection->db));
1293
- }
1294
-
1295
- sqlite3_clear_bindings(statement);
1296
- sqlite3_reset(statement);
1297
-
1298
- FreeYapDatabaseString(&_startMatchText);
1299
- FreeYapDatabaseString(&_endMatchText);
1300
- FreeYapDatabaseString(&_ellipsesText);
1301
- FreeYapDatabaseString(&_query);
1302
-
1303
- if (isMutated && !stop)
1304
- {
1305
- @throw [databaseTransaction mutationDuringEnumerationException];
1306
- }
1307
- }
1308
-
1309
- - (void)enumerateRowsMatching:(NSString *)query
1310
- withSnippetOptions:(YapDatabaseFullTextSearchSnippetOptions *)inOptions
1311
- usingBlock:
1312
- (void (^)(NSString *snippet, NSString *collection, NSString *key, id object, id metadata, BOOL *stop))block
1313
- {
1314
- if (block == nil) return;
1315
- if ([query length] == 0) return;
1316
-
1317
- sqlite3_stmt *statement = [ftsConnection querySnippetStatement];
1318
- if (statement == NULL) return;
1319
-
1320
- YapDatabaseFullTextSearchSnippetOptions *options;
1321
- if (inOptions)
1322
- options = [inOptions copy];
1323
- else
1324
- options = [[YapDatabaseFullTextSearchSnippetOptions alloc] init]; // default snippet options
1325
-
1326
- BOOL stop = NO;
1327
- isMutated = NO; // mutation during enumeration protection
1328
-
1329
- // SELECT "rowid", snippet("tableName", ?, ?, ?, ?, ?) FROM "tableName" WHERE "tableName" MATCH ?;
1330
-
1331
- YapDatabaseString _startMatchText; MakeYapDatabaseString(&_startMatchText, options.startMatchText);
1332
- sqlite3_bind_text(statement, 1, _startMatchText.str, _startMatchText.length, SQLITE_STATIC);
1333
-
1334
- YapDatabaseString _endMatchText; MakeYapDatabaseString(&_endMatchText, options.endMatchText);
1335
- sqlite3_bind_text(statement, 2, _endMatchText.str, _endMatchText.length, SQLITE_STATIC);
1336
-
1337
- YapDatabaseString _ellipsesText; MakeYapDatabaseString(&_ellipsesText, options.ellipsesText);
1338
- sqlite3_bind_text(statement, 3, _ellipsesText.str, _ellipsesText.length, SQLITE_STATIC);
1339
-
1340
- int columnIndex = -1;
1341
- if (options.columnName)
1342
- {
1343
- NSUInteger index = [ftsConnection->fts->columnNames indexOfObject:options.columnName];
1344
- if (index == NSNotFound)
1345
- {
1346
- YDBLogWarn(@"Invalid snippet option: columnName(%@) not found", options.columnName);
1347
- }
1348
- else
1349
- {
1350
- columnIndex = (int)index;
1351
- }
1352
- }
1353
- sqlite3_bind_int(statement, 4, columnIndex);
1354
- sqlite3_bind_int(statement, 5, options.numberOfTokens);
1355
-
1356
- YapDatabaseString _query; MakeYapDatabaseString(&_query, query);
1357
- sqlite3_bind_text(statement, 6, _query.str, _query.length, SQLITE_STATIC);
1358
-
1359
- int status = sqlite3_step(statement);
1360
- if (status == SQLITE_ROW)
1361
- {
1362
- do
1363
- {
1364
- int64_t rowid = sqlite3_column_int64(statement, 0);
1365
-
1366
- const unsigned char *text = sqlite3_column_text(statement, 1);
1367
- int textSize = sqlite3_column_bytes(statement, 1);
1368
-
1369
- NSString *snippet = [[NSString alloc] initWithBytes:text length:textSize encoding:NSUTF8StringEncoding];
1370
-
1371
- YapCollectionKey *ck = nil;
1372
- id object = nil;
1373
- id metadata = nil;
1374
- [databaseTransaction getCollectionKey:&ck object:&object metadata:&metadata forRowid:rowid];
1375
-
1376
- block(snippet, ck.collection, ck.key, object, metadata, &stop);
1377
-
1378
- if (stop || isMutated) break;
1379
-
1380
- } while ((status = sqlite3_step(statement)) == SQLITE_ROW);
1381
- }
1382
-
1383
- if ((status != SQLITE_DONE) && !stop && !isMutated)
1384
- {
1385
- YDBLogError(@"%@ - sqlite_step error: %d %s", THIS_METHOD,
1386
- status, sqlite3_errmsg(databaseTransaction->connection->db));
1387
- }
1388
-
1389
- sqlite3_clear_bindings(statement);
1390
- sqlite3_reset(statement);
1391
-
1392
- FreeYapDatabaseString(&_startMatchText);
1393
- FreeYapDatabaseString(&_endMatchText);
1394
- FreeYapDatabaseString(&_ellipsesText);
1395
- FreeYapDatabaseString(&_query);
1396
-
1397
- if (isMutated && !stop)
1398
- {
1399
- @throw [databaseTransaction mutationDuringEnumerationException];
1400
- }
1401
- }
1402
-
1403
- @end