FMDatabaseQueue.html 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
  5. <title>FMDatabaseQueue Class Reference</title>
  6. <meta id="xcode-display" name="xcode-display" content="render"/>
  7. <meta name="viewport" content="width=550" />
  8. <link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
  9. <link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
  10. <meta name="generator" content="appledoc 2.1 (build 858)" />
  11. </head>
  12. <body>
  13. <header id="top_header">
  14. <div id="library" class="hideInXcode">
  15. <h1><a id="libraryTitle" href="../index.html">FMDB </a></h1>
  16. <a id="developerHome" href="../index.html">ccgus</a>
  17. </div>
  18. <div id="title" role="banner">
  19. <h1 class="hideInXcode">FMDatabaseQueue Class Reference</h1>
  20. </div>
  21. <ul id="headerButtons" role="toolbar">
  22. <li id="toc_button">
  23. <button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
  24. </li>
  25. <li id="jumpto_button" role="navigation">
  26. <select id="jumpTo">
  27. <option value="top">Jump To&#133;</option>
  28. <option value="overview">Overview</option>
  29. <option value="tasks">Tasks</option>
  30. <option value="properties">Properties</option>
  31. <option value="//api/name/openFlags">&nbsp;&nbsp;&nbsp;&nbsp;openFlags</option>
  32. <option value="//api/name/path">&nbsp;&nbsp;&nbsp;&nbsp;path</option>
  33. <option value="class_methods">Class Methods</option>
  34. <option value="//api/name/databaseClass">&nbsp;&nbsp;&nbsp;&nbsp;+ databaseClass</option>
  35. <option value="//api/name/databaseQueueWithPath:">&nbsp;&nbsp;&nbsp;&nbsp;+ databaseQueueWithPath:</option>
  36. <option value="//api/name/databaseQueueWithPath:flags:">&nbsp;&nbsp;&nbsp;&nbsp;+ databaseQueueWithPath:flags:</option>
  37. <option value="instance_methods">Instance Methods</option>
  38. <option value="//api/name/close">&nbsp;&nbsp;&nbsp;&nbsp;- close</option>
  39. <option value="//api/name/inDatabase:">&nbsp;&nbsp;&nbsp;&nbsp;- inDatabase:</option>
  40. <option value="//api/name/inDeferredTransaction:">&nbsp;&nbsp;&nbsp;&nbsp;- inDeferredTransaction:</option>
  41. <option value="//api/name/inSavePoint:">&nbsp;&nbsp;&nbsp;&nbsp;- inSavePoint:</option>
  42. <option value="//api/name/inTransaction:">&nbsp;&nbsp;&nbsp;&nbsp;- inTransaction:</option>
  43. <option value="//api/name/initWithPath:">&nbsp;&nbsp;&nbsp;&nbsp;- initWithPath:</option>
  44. <option value="//api/name/initWithPath:flags:">&nbsp;&nbsp;&nbsp;&nbsp;- initWithPath:flags:</option>
  45. </select>
  46. </li>
  47. </ul>
  48. </header>
  49. <nav id="tocContainer" class="isShowingTOC">
  50. <ul id="toc" role="tree">
  51. <li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
  52. <li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
  53. </ul></li>
  54. <li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
  55. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/openFlags">openFlags</a></span></li>
  56. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/path">path</a></span></li>
  57. </ul></li>
  58. <li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#class_methods">Class Methods</a></span><ul>
  59. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/databaseClass">databaseClass</a></span></li>
  60. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/databaseQueueWithPath:">databaseQueueWithPath:</a></span></li>
  61. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/databaseQueueWithPath:flags:">databaseQueueWithPath:flags:</a></span></li>
  62. </ul></li>
  63. <li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
  64. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/close">close</a></span></li>
  65. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/inDatabase:">inDatabase:</a></span></li>
  66. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/inDeferredTransaction:">inDeferredTransaction:</a></span></li>
  67. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/inSavePoint:">inSavePoint:</a></span></li>
  68. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/inTransaction:">inTransaction:</a></span></li>
  69. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/initWithPath:">initWithPath:</a></span></li>
  70. <li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/initWithPath:flags:">initWithPath:flags:</a></span></li>
  71. </ul></li>
  72. </ul>
  73. </nav>
  74. <article>
  75. <div id="contents" class="isShowingTOC" role="main">
  76. <a title="FMDatabaseQueue Class Reference" name="top"></a>
  77. <div class="main-navigation navigation-top">
  78. <ul>
  79. <li><a href="../index.html">Index</a></li>
  80. <li><a href="../hierarchy.html">Hierarchy</a></li>
  81. </ul>
  82. </div>
  83. <div id="header">
  84. <div class="section-header">
  85. <h1 class="title title-header">FMDatabaseQueue Class Reference</h1>
  86. </div>
  87. </div>
  88. <div id="container">
  89. <div class="section section-specification"><table cellspacing="0"><tbody>
  90. <tr>
  91. <td class="specification-title">Inherits from</td>
  92. <td class="specification-value">NSObject</td>
  93. </tr><tr>
  94. <td class="specification-title">Declared in</td>
  95. <td class="specification-value">FMDatabaseQueue.h<br />FMDatabaseQueue.m</td>
  96. </tr>
  97. </tbody></table></div>
  98. <div class="section section-overview">
  99. <a title="Overview" name="overview"></a>
  100. <h2 class="subtitle subtitle-overview">Overview</h2>
  101. <p>To perform queries and updates on multiple threads, you&rsquo;ll want to use <code>FMDatabaseQueue</code>.</p>
  102. <p>Using a single instance of <a href="../Classes/FMDatabase.html"><code>FMDatabase</code></a> from multiple threads at once is a bad idea. It has always been OK to make a <a href="../Classes/FMDatabase.html"><code>FMDatabase</code></a> object <em>per thread</em>. Just don&rsquo;t share a single instance across threads, and definitely not across multiple threads at the same time.</p>
  103. <p>Instead, use <code>FMDatabaseQueue</code>. Here&rsquo;s how to use it:</p>
  104. <p>First, make your queue.</p>
  105. <pre><code>FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
  106. </code></pre>
  107. <p>Then use it like so:</p>
  108. <pre><code>[queue inDatabase:^(FMDatabase *db) {
  109. [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
  110. [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
  111. [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
  112. FMResultSet *rs = [db executeQuery:@"select * from foo"];
  113. while ([rs next]) {
  114. //…
  115. }
  116. }];
  117. </code></pre>
  118. <p>An easy way to wrap things up in a transaction can be done like this:</p>
  119. <pre><code>[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  120. [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
  121. [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
  122. [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
  123. if (whoopsSomethingWrongHappened) {
  124. *rollback = YES;
  125. return;
  126. }
  127. // etc…
  128. [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
  129. }];
  130. </code></pre>
  131. <p><code>FMDatabaseQueue</code> will run the blocks on a serialized queue (hence the name of the class). So if you call <code>FMDatabaseQueue</code>&rsquo;s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won&rsquo;t step on each other&rsquo;s toes, and every one is happy.</p>
  132. <h3>See also</h3>
  133. <ul>
  134. <li><a href="../Classes/FMDatabase.html"><code>FMDatabase</code></a></li>
  135. </ul>
  136. <div class="warning"><p><strong>Warning:</strong> Do not instantiate a single <a href="../Classes/FMDatabase.html"><code>FMDatabase</code></a> object and use it across multiple threads. Use <code>FMDatabaseQueue</code> instead.</p></div><div class="warning"><p><strong>Warning:</strong> The calls to <code>FMDatabaseQueue</code>&rsquo;s methods are blocking. So even though you are passing along blocks, they will <strong>not</strong> be run on another thread.</p></div>
  137. </div>
  138. <div class="section section-tasks">
  139. <a title="Tasks" name="tasks"></a>
  140. <h2 class="subtitle subtitle-tasks">Tasks</h2>
  141. <h3 class="subsubtitle task-title">Other Methods</h3>
  142. <ul class="task-list">
  143. <li>
  144. <span class="tooltip">
  145. <code><a href="#//api/name/databaseQueueWithPath:">+&nbsp;databaseQueueWithPath:</a></code>
  146. <span class="tooltip"><p>Create queue using path.</p></span>
  147. </span>
  148. </li><li>
  149. <span class="tooltip">
  150. <code><a href="#//api/name/databaseQueueWithPath:flags:">+&nbsp;databaseQueueWithPath:flags:</a></code>
  151. <span class="tooltip"><p>Create queue using path and specified flags.</p></span>
  152. </span>
  153. </li><li>
  154. <span class="tooltip">
  155. <code><a href="#//api/name/databaseClass">+&nbsp;databaseClass</a></code>
  156. <span class="tooltip"><p>Returns the Class of &lsquo;FMDatabase&rsquo; subclass, that will be used to instantiate database object.</p></span>
  157. </span>
  158. </li><li>
  159. <span class="tooltip">
  160. <code><a href="#//api/name/initWithPath:flags:">&ndash;&nbsp;initWithPath:flags:</a></code>
  161. <span class="tooltip"><p>Create queue using path and specified flags.</p></span>
  162. </span>
  163. </li><li>
  164. <span class="tooltip">
  165. <code><a href="#//api/name/initWithPath:">&ndash;&nbsp;initWithPath:</a></code>
  166. <span class="tooltip"><p>Create queue using path.</p></span>
  167. </span>
  168. </li><li>
  169. <span class="tooltip">
  170. <code><a href="#//api/name/close">&ndash;&nbsp;close</a></code>
  171. <span class="tooltip"><p>Close database used by queue.</p></span>
  172. </span>
  173. </li><li>
  174. <span class="tooltip">
  175. <code><a href="#//api/name/inDatabase:">&ndash;&nbsp;inDatabase:</a></code>
  176. <span class="tooltip"><p>Synchronously perform database operations on queue.</p></span>
  177. </span>
  178. </li><li>
  179. <span class="tooltip">
  180. <code><a href="#//api/name/inDeferredTransaction:">&ndash;&nbsp;inDeferredTransaction:</a></code>
  181. <span class="tooltip"><p>Synchronously perform database operations on queue, using deferred transactions.</p></span>
  182. </span>
  183. </li><li>
  184. <span class="tooltip">
  185. <code><a href="#//api/name/inTransaction:">&ndash;&nbsp;inTransaction:</a></code>
  186. <span class="tooltip"><p>Synchronously perform database operations on queue, using transactions.</p></span>
  187. </span>
  188. </li><li>
  189. <span class="tooltip">
  190. <code><a href="#//api/name/inSavePoint:">&ndash;&nbsp;inSavePoint:</a></code>
  191. <span class="tooltip"><p>Synchronously perform database operations using save point.</p></span>
  192. </span>
  193. </li>
  194. </ul>
  195. <h3 class="subsubtitle task-title">Other Methods</h3>
  196. <ul class="task-list">
  197. <li>
  198. <span class="tooltip">
  199. <code><a href="#//api/name/path">&nbsp;&nbsp;path</a></code>
  200. <span class="tooltip"><p>Path of database</p></span>
  201. </span>
  202. <span class="task-item-suffix">property</span>
  203. </li><li>
  204. <span class="tooltip">
  205. <code><a href="#//api/name/openFlags">&nbsp;&nbsp;openFlags</a></code>
  206. <span class="tooltip"><p>Open flags</p></span>
  207. </span>
  208. <span class="task-item-suffix">property</span>
  209. </li>
  210. </ul>
  211. </div>
  212. <div class="section section-methods">
  213. <a title="Properties" name="properties"></a>
  214. <h2 class="subtitle subtitle-methods">Properties</h2>
  215. <div class="section-method">
  216. <a name="//api/name/openFlags" title="openFlags"></a>
  217. <h3 class="subsubtitle method-title">openFlags</h3>
  218. <div class="method-subsection brief-description">
  219. <p>Open flags</p>
  220. </div>
  221. <div class="method-subsection method-declaration"><code>@property (atomic, readonly) int openFlags</code></div>
  222. <div class="method-subsection declared-in-section">
  223. <h4 class="method-subtitle">Declared In</h4>
  224. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  225. </div>
  226. </div>
  227. <div class="section-method">
  228. <a name="//api/name/path" title="path"></a>
  229. <h3 class="subsubtitle method-title">path</h3>
  230. <div class="method-subsection brief-description">
  231. <p>Path of database</p>
  232. </div>
  233. <div class="method-subsection method-declaration"><code>@property (atomic, retain) NSString *path</code></div>
  234. <div class="method-subsection declared-in-section">
  235. <h4 class="method-subtitle">Declared In</h4>
  236. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  237. </div>
  238. </div>
  239. </div>
  240. <div class="section section-methods">
  241. <a title="Class Methods" name="class_methods"></a>
  242. <h2 class="subtitle subtitle-methods">Class Methods</h2>
  243. <div class="section-method">
  244. <a name="//api/name/databaseClass" title="databaseClass"></a>
  245. <h3 class="subsubtitle method-title">databaseClass</h3>
  246. <div class="method-subsection brief-description">
  247. <p>Returns the Class of &lsquo;FMDatabase&rsquo; subclass, that will be used to instantiate database object.</p>
  248. </div>
  249. <div class="method-subsection method-declaration"><code>+ (Class)databaseClass</code></div>
  250. <div class="method-subsection return">
  251. <h4 class="method-subtitle parameter-title">Return Value</h4>
  252. <p>The Class of &lsquo;FMDatabase&rsquo; subclass, that will be used to instantiate database object.</p>
  253. </div>
  254. <div class="method-subsection discussion-section">
  255. <h4 class="method-subtitle">Discussion</h4>
  256. <p>Subclasses can override this method to return specified Class of &lsquo;FMDatabase&rsquo; subclass.</p>
  257. </div>
  258. <div class="method-subsection declared-in-section">
  259. <h4 class="method-subtitle">Declared In</h4>
  260. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  261. </div>
  262. </div>
  263. <div class="section-method">
  264. <a name="//api/name/databaseQueueWithPath:" title="databaseQueueWithPath:"></a>
  265. <h3 class="subsubtitle method-title">databaseQueueWithPath:</h3>
  266. <div class="method-subsection brief-description">
  267. <p>Create queue using path.</p>
  268. </div>
  269. <div class="method-subsection method-declaration"><code>+ (instancetype)databaseQueueWithPath:(NSString *)<em>aPath</em></code></div>
  270. <div class="method-subsection arguments-section parameters">
  271. <h4 class="method-subtitle parameter-title">Parameters</h4>
  272. <dl class="argument-def parameter-def">
  273. <dt><em>aPath</em></dt>
  274. <dd><p>The file path of the database.</p></dd>
  275. </dl>
  276. </div>
  277. <div class="method-subsection return">
  278. <h4 class="method-subtitle parameter-title">Return Value</h4>
  279. <p>The <code>FMDatabaseQueue</code> object. <code>nil</code> on error.</p>
  280. </div>
  281. <div class="method-subsection declared-in-section">
  282. <h4 class="method-subtitle">Declared In</h4>
  283. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  284. </div>
  285. </div>
  286. <div class="section-method">
  287. <a name="//api/name/databaseQueueWithPath:flags:" title="databaseQueueWithPath:flags:"></a>
  288. <h3 class="subsubtitle method-title">databaseQueueWithPath:flags:</h3>
  289. <div class="method-subsection brief-description">
  290. <p>Create queue using path and specified flags.</p>
  291. </div>
  292. <div class="method-subsection method-declaration"><code>+ (instancetype)databaseQueueWithPath:(NSString *)<em>aPath</em> flags:(int)<em>openFlags</em></code></div>
  293. <div class="method-subsection arguments-section parameters">
  294. <h4 class="method-subtitle parameter-title">Parameters</h4>
  295. <dl class="argument-def parameter-def">
  296. <dt><em>aPath</em></dt>
  297. <dd><p>The file path of the database.</p></dd>
  298. </dl>
  299. <dl class="argument-def parameter-def">
  300. <dt><em>openFlags</em></dt>
  301. <dd><p>Flags passed to the openWithFlags method of the database</p></dd>
  302. </dl>
  303. </div>
  304. <div class="method-subsection return">
  305. <h4 class="method-subtitle parameter-title">Return Value</h4>
  306. <p>The <code>FMDatabaseQueue</code> object. <code>nil</code> on error.</p>
  307. </div>
  308. <div class="method-subsection declared-in-section">
  309. <h4 class="method-subtitle">Declared In</h4>
  310. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  311. </div>
  312. </div>
  313. </div>
  314. <div class="section section-methods">
  315. <a title="Instance Methods" name="instance_methods"></a>
  316. <h2 class="subtitle subtitle-methods">Instance Methods</h2>
  317. <div class="section-method">
  318. <a name="//api/name/close" title="close"></a>
  319. <h3 class="subsubtitle method-title">close</h3>
  320. <div class="method-subsection brief-description">
  321. <p>Close database used by queue.</p>
  322. </div>
  323. <div class="method-subsection method-declaration"><code>- (void)close</code></div>
  324. <div class="method-subsection declared-in-section">
  325. <h4 class="method-subtitle">Declared In</h4>
  326. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  327. </div>
  328. </div>
  329. <div class="section-method">
  330. <a name="//api/name/inDatabase:" title="inDatabase:"></a>
  331. <h3 class="subsubtitle method-title">inDatabase:</h3>
  332. <div class="method-subsection brief-description">
  333. <p>Synchronously perform database operations on queue.</p>
  334. </div>
  335. <div class="method-subsection method-declaration"><code>- (void)inDatabase:(void ( ^ ) ( FMDatabase *db ))<em>block</em></code></div>
  336. <div class="method-subsection arguments-section parameters">
  337. <h4 class="method-subtitle parameter-title">Parameters</h4>
  338. <dl class="argument-def parameter-def">
  339. <dt><em>block</em></dt>
  340. <dd><p>The code to be run on the queue of <code>FMDatabaseQueue</code></p></dd>
  341. </dl>
  342. </div>
  343. <div class="method-subsection declared-in-section">
  344. <h4 class="method-subtitle">Declared In</h4>
  345. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  346. </div>
  347. </div>
  348. <div class="section-method">
  349. <a name="//api/name/inDeferredTransaction:" title="inDeferredTransaction:"></a>
  350. <h3 class="subsubtitle method-title">inDeferredTransaction:</h3>
  351. <div class="method-subsection brief-description">
  352. <p>Synchronously perform database operations on queue, using deferred transactions.</p>
  353. </div>
  354. <div class="method-subsection method-declaration"><code>- (void)inDeferredTransaction:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))<em>block</em></code></div>
  355. <div class="method-subsection arguments-section parameters">
  356. <h4 class="method-subtitle parameter-title">Parameters</h4>
  357. <dl class="argument-def parameter-def">
  358. <dt><em>block</em></dt>
  359. <dd><p>The code to be run on the queue of <code>FMDatabaseQueue</code></p></dd>
  360. </dl>
  361. </div>
  362. <div class="method-subsection declared-in-section">
  363. <h4 class="method-subtitle">Declared In</h4>
  364. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  365. </div>
  366. </div>
  367. <div class="section-method">
  368. <a name="//api/name/inSavePoint:" title="inSavePoint:"></a>
  369. <h3 class="subsubtitle method-title">inSavePoint:</h3>
  370. <div class="method-subsection brief-description">
  371. <p>Synchronously perform database operations using save point.</p>
  372. </div>
  373. <div class="method-subsection method-declaration"><code>- (NSError *)inSavePoint:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))<em>block</em></code></div>
  374. <div class="method-subsection arguments-section parameters">
  375. <h4 class="method-subtitle parameter-title">Parameters</h4>
  376. <dl class="argument-def parameter-def">
  377. <dt><em>block</em></dt>
  378. <dd><p>The code to be run on the queue of <code>FMDatabaseQueue</code></p></dd>
  379. </dl>
  380. </div>
  381. <div class="method-subsection declared-in-section">
  382. <h4 class="method-subtitle">Declared In</h4>
  383. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  384. </div>
  385. </div>
  386. <div class="section-method">
  387. <a name="//api/name/inTransaction:" title="inTransaction:"></a>
  388. <h3 class="subsubtitle method-title">inTransaction:</h3>
  389. <div class="method-subsection brief-description">
  390. <p>Synchronously perform database operations on queue, using transactions.</p>
  391. </div>
  392. <div class="method-subsection method-declaration"><code>- (void)inTransaction:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))<em>block</em></code></div>
  393. <div class="method-subsection arguments-section parameters">
  394. <h4 class="method-subtitle parameter-title">Parameters</h4>
  395. <dl class="argument-def parameter-def">
  396. <dt><em>block</em></dt>
  397. <dd><p>The code to be run on the queue of <code>FMDatabaseQueue</code></p></dd>
  398. </dl>
  399. </div>
  400. <div class="method-subsection declared-in-section">
  401. <h4 class="method-subtitle">Declared In</h4>
  402. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  403. </div>
  404. </div>
  405. <div class="section-method">
  406. <a name="//api/name/initWithPath:" title="initWithPath:"></a>
  407. <h3 class="subsubtitle method-title">initWithPath:</h3>
  408. <div class="method-subsection brief-description">
  409. <p>Create queue using path.</p>
  410. </div>
  411. <div class="method-subsection method-declaration"><code>- (instancetype)initWithPath:(NSString *)<em>aPath</em></code></div>
  412. <div class="method-subsection arguments-section parameters">
  413. <h4 class="method-subtitle parameter-title">Parameters</h4>
  414. <dl class="argument-def parameter-def">
  415. <dt><em>aPath</em></dt>
  416. <dd><p>The file path of the database.</p></dd>
  417. </dl>
  418. </div>
  419. <div class="method-subsection return">
  420. <h4 class="method-subtitle parameter-title">Return Value</h4>
  421. <p>The <code>FMDatabaseQueue</code> object. <code>nil</code> on error.</p>
  422. </div>
  423. <div class="method-subsection declared-in-section">
  424. <h4 class="method-subtitle">Declared In</h4>
  425. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  426. </div>
  427. </div>
  428. <div class="section-method">
  429. <a name="//api/name/initWithPath:flags:" title="initWithPath:flags:"></a>
  430. <h3 class="subsubtitle method-title">initWithPath:flags:</h3>
  431. <div class="method-subsection brief-description">
  432. <p>Create queue using path and specified flags.</p>
  433. </div>
  434. <div class="method-subsection method-declaration"><code>- (instancetype)initWithPath:(NSString *)<em>aPath</em> flags:(int)<em>openFlags</em></code></div>
  435. <div class="method-subsection arguments-section parameters">
  436. <h4 class="method-subtitle parameter-title">Parameters</h4>
  437. <dl class="argument-def parameter-def">
  438. <dt><em>aPath</em></dt>
  439. <dd><p>The file path of the database.</p></dd>
  440. </dl>
  441. <dl class="argument-def parameter-def">
  442. <dt><em>openFlags</em></dt>
  443. <dd><p>Flags passed to the openWithFlags method of the database</p></dd>
  444. </dl>
  445. </div>
  446. <div class="method-subsection return">
  447. <h4 class="method-subtitle parameter-title">Return Value</h4>
  448. <p>The <code>FMDatabaseQueue</code> object. <code>nil</code> on error.</p>
  449. </div>
  450. <div class="method-subsection declared-in-section">
  451. <h4 class="method-subtitle">Declared In</h4>
  452. <code class="declared-in-ref">FMDatabaseQueue.h</code><br />
  453. </div>
  454. </div>
  455. </div>
  456. </div>
  457. <div class="main-navigation navigation-bottom">
  458. <ul>
  459. <li><a href="../index.html">Index</a></li>
  460. <li><a href="../hierarchy.html">Hierarchy</a></li>
  461. </ul>
  462. </div>
  463. <div id="footer">
  464. <hr />
  465. <div class="footer-copyright">
  466. <p><span class="copyright">&copy; 2014 ccgus. All rights reserved. (Last updated: 2014-05-25)</span><br />
  467. <span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 858)</a>.</span></p>
  468. </div>
  469. </div>
  470. </div>
  471. </article>
  472. <script type="text/javascript">
  473. function jumpToChange()
  474. {
  475. window.location.hash = this.options[this.selectedIndex].value;
  476. }
  477. function toggleTOC()
  478. {
  479. var contents = document.getElementById('contents');
  480. var tocContainer = document.getElementById('tocContainer');
  481. if (this.getAttribute('class') == 'open')
  482. {
  483. this.setAttribute('class', '');
  484. contents.setAttribute('class', '');
  485. tocContainer.setAttribute('class', '');
  486. window.name = "hideTOC";
  487. }
  488. else
  489. {
  490. this.setAttribute('class', 'open');
  491. contents.setAttribute('class', 'isShowingTOC');
  492. tocContainer.setAttribute('class', 'isShowingTOC');
  493. window.name = "";
  494. }
  495. return false;
  496. }
  497. function toggleTOCEntryChildren(e)
  498. {
  499. e.stopPropagation();
  500. var currentClass = this.getAttribute('class');
  501. if (currentClass == 'children') {
  502. this.setAttribute('class', 'children open');
  503. }
  504. else if (currentClass == 'children open') {
  505. this.setAttribute('class', 'children');
  506. }
  507. return false;
  508. }
  509. function tocEntryClick(e)
  510. {
  511. e.stopPropagation();
  512. return true;
  513. }
  514. function init()
  515. {
  516. var selectElement = document.getElementById('jumpTo');
  517. selectElement.addEventListener('change', jumpToChange, false);
  518. var tocButton = document.getElementById('table_of_contents');
  519. tocButton.addEventListener('click', toggleTOC, false);
  520. var taskTreeItem = document.getElementById('task_treeitem');
  521. if (taskTreeItem.getElementsByTagName('li').length > 0)
  522. {
  523. taskTreeItem.setAttribute('class', 'children');
  524. taskTreeItem.firstChild.setAttribute('class', 'disclosure');
  525. }
  526. var tocList = document.getElementById('toc');
  527. var tocEntries = tocList.getElementsByTagName('li');
  528. for (var i = 0; i < tocEntries.length; i++) {
  529. tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
  530. }
  531. var tocLinks = tocList.getElementsByTagName('a');
  532. for (var i = 0; i < tocLinks.length; i++) {
  533. tocLinks[i].addEventListener('click', tocEntryClick, false);
  534. }
  535. if (window.name == "hideTOC") {
  536. toggleTOC.call(tocButton);
  537. }
  538. }
  539. window.onload = init;
  540. // If showing in Xcode, hide the TOC and Header
  541. if (navigator.userAgent.match(/xcode/i)) {
  542. document.getElementById("contents").className = "hideInXcode"
  543. document.getElementById("tocContainer").className = "hideInXcode"
  544. document.getElementById("top_header").className = "hideInXcode"
  545. }
  546. </script>
  547. </body>
  548. </html>