Check-in [eb35efa511]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
SHA1 Hash:eb35efa5118b30a0ba0b82644d9a8cb3840d4e7a
Date: 2009-10-09 15:36:02
User: dmitry
Comment:Initial commit
Tags And Properties
Changes

Added CRDB.m

Old () New (0b115a66503a79b5)
> 1 #import <Foundation/Foundation.h>
> 2 #import "CRDatabase.h"
> 3
> 4 //
> 5 // Some test code
> 6 //
> 7
> 8 int main (int argc, const char * argv[])
> 9 {
> 10 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
> 11
> 12 // Create ~/Documents/database.db
> 13 // and CREATE TABLE posts(id PRIMARY KEY, body TEXT);
> 14
> 15 CRDatabase* database = [CRDatabase databaseWithURL:[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.db"]]];
> 16
> 17
> 18 __block dispatch_queue_t myQueue = dispatch_queue_create("com.codingrobots.CRDatabase.testQueue", NULL);
> 19
> 20 NSLog(@"---------------------------------------");
> 21
> 22
> 23 for (NSInteger i = 0; i < 3; i++) {
> 24
> 25 [database asyncExecuteQuery:@"SELECT * FROM `posts`"
> 26 withArguments:nil
> 27 doWithResult:^(CRDatabaseResult *result) {
> 28
> 29 dispatch_sync(myQueue, ^{
> 30 int me = random() % 100;
> 31 for(CRDatabaseRow *row in result) {
> 32 NSLog(@"(%d) Id: %d, Body: %@", me, [row integerForColumn:@"id"], [row stringForColumn:@"body"]);
> 33 }
> 34 });
> 35
> 36 }];
> 37 }
> 38
> 39 //// Insert test
> 40
> 41 //[database executeUpdate:@"INSERT INTO posts(body) VALUES (?)"
> 42 // withArguments:[NSArray arrayWithObject:[NSString stringWithFormat:@"Test body #%d", (random() % 100)]]];
> 43
> 44
> 45 NSLog(@"=Done=");
> 46
> 47 // while(YES) {usleep(1000);}; // UNCOMMENT THIS WHEN RUNNING ASYNC CODE
> 48 // TO WAIT FOREVER. Terminate program with Ctrl+C
> 49 // or Shift+Cmd+Enter in Xcode
> 50
> 51 [pool drain];
> 52 return 0;
> 53 }

Added CRDB.xcodeproj/dmitry.mode1v3

Old () New (95bc2c028ab8dc79)
> 1 <?xml version="1.0" encoding="UTF-8"?>
> 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
> 3 <plist version="1.0">
> 4 <dict>
> 5 <key>ActivePerspectiveName</key>
> 6 <string>Project</string>
> 7 <key>AllowedModules</key>
> 8 <array>
> 9 <dict>
> 10 <key>BundleLoadPath</key>
> 11 <string></string>
> 12 <key>MaxInstances</key>
> 13 <string>n</string>
> 14 <key>Module</key>
> 15 <string>PBXSmartGroupTreeModule</string>
> 16 <key>Name</key>
> 17 <string>Groups and Files Outline View</string>
> 18 </dict>
> 19 <dict>
> 20 <key>BundleLoadPath</key>
> 21 <string></string>
> 22 <key>MaxInstances</key>
> 23 <string>n</string>
> 24 <key>Module</key>
> 25 <string>PBXNavigatorGroup</string>
> 26 <key>Name</key>
> 27 <string>Editor</string>
> 28 </dict>
> 29 <dict>
> 30 <key>BundleLoadPath</key>
> 31 <string></string>
> 32 <key>MaxInstances</key>
> 33 <string>n</string>
> 34 <key>Module</key>
> 35 <string>XCTaskListModule</string>
> 36 <key>Name</key>
> 37 <string>Task List</string>
> 38 </dict>
> 39 <dict>
> 40 <key>BundleLoadPath</key>
> 41 <string></string>
> 42 <key>MaxInstances</key>
> 43 <string>n</string>
> 44 <key>Module</key>
> 45 <string>XCDetailModule</string>
> 46 <key>Name</key>
> 47 <string>File and Smart Group Detail Viewer</string>
> 48 </dict>
> 49 <dict>
> 50 <key>BundleLoadPath</key>
> 51 <string></string>
> 52 <key>MaxInstances</key>
> 53 <string>1</string>
> 54 <key>Module</key>
> 55 <string>PBXBuildResultsModule</string>
> 56 <key>Name</key>
> 57 <string>Detailed Build Results Viewer</string>
> 58 </dict>
> 59 <dict>
> 60 <key>BundleLoadPath</key>
> 61 <string></string>
> 62 <key>MaxInstances</key>
> 63 <string>1</string>
> 64 <key>Module</key>
> 65 <string>PBXProjectFindModule</string>
> 66 <key>Name</key>
> 67 <string>Project Batch Find Tool</string>
> 68 </dict>
> 69 <dict>
> 70 <key>BundleLoadPath</key>
> 71 <string></string>
> 72 <key>MaxInstances</key>
> 73 <string>n</string>
> 74 <key>Module</key>
> 75 <string>XCProjectFormatConflictsModule</string>
> 76 <key>Name</key>
> 77 <string>Project Format Conflicts List</string>
> 78 </dict>
> 79 <dict>
> 80 <key>BundleLoadPath</key>
> 81 <string></string>
> 82 <key>MaxInstances</key>
> 83 <string>n</string>
> 84 <key>Module</key>
> 85 <string>PBXBookmarksModule</string>
> 86 <key>Name</key>
> 87 <string>Bookmarks Tool</string>
> 88 </dict>
> 89 <dict>
> 90 <key>BundleLoadPath</key>
> 91 <string></string>
> 92 <key>MaxInstances</key>
> 93 <string>n</string>
> 94 <key>Module</key>
> 95 <string>PBXClassBrowserModule</string>
> 96 <key>Name</key>
> 97 <string>Class Browser</string>
> 98 </dict>
> 99 <dict>
> 100 <key>BundleLoadPath</key>
> 101 <string></string>
> 102 <key>MaxInstances</key>
> 103 <string>n</string>
> 104 <key>Module</key>
> 105 <string>PBXCVSModule</string>
> 106 <key>Name</key>
> 107 <string>Source Code Control Tool</string>
> 108 </dict>
> 109 <dict>
> 110 <key>BundleLoadPath</key>
> 111 <string></string>
> 112 <key>MaxInstances</key>
> 113 <string>n</string>
> 114 <key>Module</key>
> 115 <string>PBXDebugBreakpointsModule</string>
> 116 <key>Name</key>
> 117 <string>Debug Breakpoints Tool</string>
> 118 </dict>
> 119 <dict>
> 120 <key>BundleLoadPath</key>
> 121 <string></string>
> 122 <key>MaxInstances</key>
> 123 <string>n</string>
> 124 <key>Module</key>
> 125 <string>XCDockableInspector</string>
> 126 <key>Name</key>
> 127 <string>Inspector</string>
> 128 </dict>
> 129 <dict>
> 130 <key>BundleLoadPath</key>
> 131 <string></string>
> 132 <key>MaxInstances</key>
> 133 <string>n</string>
> 134 <key>Module</key>
> 135 <string>PBXOpenQuicklyModule</string>
> 136 <key>Name</key>
> 137 <string>Open Quickly Tool</string>
> 138 </dict>
> 139 <dict>
> 140 <key>BundleLoadPath</key>
> 141 <string></string>
> 142 <key>MaxInstances</key>
> 143 <string>1</string>
> 144 <key>Module</key>
> 145 <string>PBXDebugSessionModule</string>
> 146 <key>Name</key>
> 147 <string>Debugger</string>
> 148 </dict>
> 149 <dict>
> 150 <key>BundleLoadPath</key>
> 151 <string></string>
> 152 <key>MaxInstances</key>
> 153 <string>1</string>
> 154 <key>Module</key>
> 155 <string>PBXDebugCLIModule</string>
> 156 <key>Name</key>
> 157 <string>Debug Console</string>
> 158 </dict>
> 159 <dict>
> 160 <key>BundleLoadPath</key>
> 161 <string></string>
> 162 <key>MaxInstances</key>
> 163 <string>n</string>
> 164 <key>Module</key>
> 165 <string>XCSnapshotModule</string>
> 166 <key>Name</key>
> 167 <string>Snapshots Tool</string>
> 168 </dict>
> 169 </array>
> 170 <key>BundlePath</key>
> 171 <string>/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
> 172 <key>Description</key>
> 173 <string>DefaultDescriptionKey</string>
> 174 <key>DockingSystemVisible</key>
> 175 <false/>
> 176 <key>Extension</key>
> 177 <string>mode1v3</string>
> 178 <key>FavBarConfig</key>
> 179 <dict>
> 180 <key>PBXProjectModuleGUID</key>
> 181 <string>0ACEBDFA106E7ACF007FCDBD</string>
> 182 <key>XCBarModuleItemNames</key>
> 183 <dict/>
> 184 <key>XCBarModuleItems</key>
> 185 <array/>
> 186 </dict>
> 187 <key>FirstTimeWindowDisplayed</key>
> 188 <false/>
> 189 <key>Identifier</key>
> 190 <string>com.apple.perspectives.project.mode1v3</string>
> 191 <key>MajorVersion</key>
> 192 <integer>33</integer>
> 193 <key>MinorVersion</key>
> 194 <integer>0</integer>
> 195 <key>Name</key>
> 196 <string>Default</string>
> 197 <key>Notifications</key>
> 198 <array/>
> 199 <key>OpenEditors</key>
> 200 <array/>
> 201 <key>PerspectiveWidths</key>
> 202 <array>
> 203 <integer>-1</integer>
> 204 <integer>-1</integer>
> 205 </array>
> 206 <key>Perspectives</key>
> 207 <array>
> 208 <dict>
> 209 <key>ChosenToolbarItems</key>
> 210 <array>
> 211 <string>active-combo-popup</string>
> 212 <string>action</string>
> 213 <string>NSToolbarFlexibleSpaceItem</string>
> 214 <string>debugger-enable-breakpoints</string>
> 215 <string>build-and-go</string>
> 216 <string>com.apple.ide.PBXToolbarStopButton</string>
> 217 <string>get-info</string>
> 218 <string>NSToolbarFlexibleSpaceItem</string>
> 219 <string>com.apple.pbx.toolbar.searchfield</string>
> 220 </array>
> 221 <key>ControllerClassBaseName</key>
> 222 <string></string>
> 223 <key>IconName</key>
> 224 <string>WindowOfProjectWithEditor</string>
> 225 <key>Identifier</key>
> 226 <string>perspective.project</string>
> 227 <key>IsVertical</key>
> 228 <false/>
> 229 <key>Layout</key>
> 230 <array>
> 231 <dict>
> 232 <key>ContentConfiguration</key>
> 233 <dict>
> 234 <key>PBXBottomSmartGroupGIDs</key>
> 235 <array>
> 236 <string>1C37FBAC04509CD000000102</string>
> 237 <string>1C37FAAC04509CD000000102</string>
> 238 <string>1C37FABC05509CD000000102</string>
> 239 <string>1C37FABC05539CD112110102</string>
> 240 <string>E2644B35053B69B200211256</string>
> 241 <string>1C37FABC04509CD000100104</string>
> 242 <string>1CC0EA4004350EF90044410B</string>
> 243 <string>1CC0EA4004350EF90041110B</string>
> 244 </array>
> 245 <key>PBXProjectModuleGUID</key>
> 246 <string>1CE0B1FE06471DED0097A5F4</string>
> 247 <key>PBXProjectModuleLabel</key>
> 248 <string>Files</string>
> 249 <key>PBXProjectStructureProvided</key>
> 250 <string>yes</string>
> 251 <key>PBXSmartGroupTreeModuleColumnData</key>
> 252 <dict>
> 253 <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
> 254 <array>
> 255 <real>186</real>
> 256 </array>
> 257 <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
> 258 <array>
> 259 <string>MainColumn</string>
> 260 </array>
> 261 </dict>
> 262 <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
> 263 <dict>
> 264 <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
> 265 <array>
> 266 <string>08FB7794FE84155DC02AAC07</string>
> 267 <string>0ACEBDF5106E7ACA007FCDBD</string>
> 268 <string>08FB7795FE84155DC02AAC07</string>
> 269 <string>08FB779DFE84155DC02AAC07</string>
> 270 <string>1AB674ADFE9D54B511CA2CBB</string>
> 271 <string>1C37FBAC04509CD000000102</string>
> 272 <string>1C37FABC05509CD000000102</string>
> 273 </array>
> 274 <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
> 275 <array>
> 276 <array>
> 277 <integer>8</integer>
> 278 <integer>1</integer>
> 279 <integer>0</integer>
> 280 </array>
> 281 </array>
> 282 <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
> 283 <string>{{0, 0}, {186, 637}}</string>
> 284 </dict>
> 285 <key>PBXTopSmartGroupGIDs</key>
> 286 <array/>
> 287 <key>XCIncludePerspectivesSwitch</key>
> 288 <true/>
> 289 <key>XCSharingToken</key>
> 290 <string>com.apple.Xcode.GFSharingToken</string>
> 291 </dict>
> 292 <key>GeometryConfiguration</key>
> 293 <dict>
> 294 <key>Frame</key>
> 295 <string>{{0, 0}, {203, 655}}</string>
> 296 <key>GroupTreeTableConfiguration</key>
> 297 <array>
> 298 <string>MainColumn</string>
> 299 <real>186</real>
> 300 </array>
> 301 <key>RubberWindowFrame</key>
> 302 <string>19 60 983 696 0 0 1280 778 </string>
> 303 </dict>
> 304 <key>Module</key>
> 305 <string>PBXSmartGroupTreeModule</string>
> 306 <key>Proportion</key>
> 307 <string>203pt</string>
> 308 </dict>
> 309 <dict>
> 310 <key>Dock</key>
> 311 <array>
> 312 <dict>
> 313 <key>BecomeActive</key>
> 314 <true/>
> 315 <key>ContentConfiguration</key>
> 316 <dict>
> 317 <key>PBXProjectModuleGUID</key>
> 318 <string>1CE0B20306471E060097A5F4</string>
> 319 <key>PBXProjectModuleLabel</key>
> 320 <string>README</string>
> 321 <key>PBXSplitModuleInNavigatorKey</key>
> 322 <dict>
> 323 <key>Split0</key>
> 324 <dict>
> 325 <key>PBXProjectModuleGUID</key>
> 326 <string>1CE0B20406471E060097A5F4</string>
> 327 <key>PBXProjectModuleLabel</key>
> 328 <string>README</string>
> 329 <key>_historyCapacity</key>
> 330 <integer>0</integer>
> 331 <key>bookmark</key>
> 332 <string>0A76B97A106F73D90048097B</string>
> 333 <key>history</key>
> 334 <array>
> 335 <string>0A76B5BC106E949F0048097B</string>
> 336 <string>0A76B658106EA6530048097B</string>
> 337 <string>0A76B660106EA6530048097B</string>
> 338 <string>0A76B742106EAFBF0048097B</string>
> 339 <string>0A76B745106EAFBF0048097B</string>
> 340 <string>0A76B7D6106EC13E0048097B</string>
> 341 <string>0A76B912106EE11E0048097B</string>
> 342 <string>0A76B95C106F6F020048097B</string>
> 343 <string>0A76B95E106F6F020048097B</string>
> 344 <string>0A76B95F106F6F020048097B</string>
> 345 <string>0A76B960106F6F020048097B</string>
> 346 <string>0A76B961106F6F020048097B</string>
> 347 <string>0A76B977106F73D90048097B</string>
> 348 <string>0A76B978106F73D90048097B</string>
> 349 <string>0A76B979106F73D90048097B</string>
> 350 <string>0A76B95D106F6F020048097B</string>
> 351 </array>
> 352 </dict>
> 353 <key>SplitCount</key>
> 354 <string>1</string>
> 355 </dict>
> 356 <key>StatusBarVisibility</key>
> 357 <true/>
> 358 </dict>
> 359 <key>GeometryConfiguration</key>
> 360 <dict>
> 361 <key>Frame</key>
> 362 <string>{{0, 0}, {775, 650}}</string>
> 363 <key>RubberWindowFrame</key>
> 364 <string>19 60 983 696 0 0 1280 778 </string>
> 365 </dict>
> 366 <key>Module</key>
> 367 <string>PBXNavigatorGroup</string>
> 368 <key>Proportion</key>
> 369 <string>650pt</string>
> 370 </dict>
> 371 <dict>
> 372 <key>ContentConfiguration</key>
> 373 <dict>
> 374 <key>PBXProjectModuleGUID</key>
> 375 <string>1CE0B20506471E060097A5F4</string>
> 376 <key>PBXProjectModuleLabel</key>
> 377 <string>Detail</string>
> 378 </dict>
> 379 <key>GeometryConfiguration</key>
> 380 <dict>
> 381 <key>Frame</key>
> 382 <string>{{0, 655}, {775, 0}}</string>
> 383 <key>RubberWindowFrame</key>
> 384 <string>19 60 983 696 0 0 1280 778 </string>
> 385 </dict>
> 386 <key>Module</key>
> 387 <string>XCDetailModule</string>
> 388 <key>Proportion</key>
> 389 <string>0pt</string>
> 390 </dict>
> 391 </array>
> 392 <key>Proportion</key>
> 393 <string>775pt</string>
> 394 </dict>
> 395 </array>
> 396 <key>Name</key>
> 397 <string>Project</string>
> 398 <key>ServiceClasses</key>
> 399 <array>
> 400 <string>XCModuleDock</string>
> 401 <string>PBXSmartGroupTreeModule</string>
> 402 <string>XCModuleDock</string>
> 403 <string>PBXNavigatorGroup</string>
> 404 <string>XCDetailModule</string>
> 405 </array>
> 406 <key>TableOfContents</key>
> 407 <array>
> 408 <string>0A76B97B106F73D90048097B</string>
> 409 <string>1CE0B1FE06471DED0097A5F4</string>
> 410 <string>0A76B97C106F73D90048097B</string>
> 411 <string>1CE0B20306471E060097A5F4</string>
> 412 <string>1CE0B20506471E060097A5F4</string>
> 413 </array>
> 414 <key>ToolbarConfigUserDefaultsMinorVersion</key>
> 415 <string>2</string>
> 416 <key>ToolbarConfiguration</key>
> 417 <string>xcode.toolbar.config.defaultV3</string>
> 418 </dict>
> 419 <dict>
> 420 <key>ControllerClassBaseName</key>
> 421 <string></string>
> 422 <key>IconName</key>
> 423 <string>WindowOfProject</string>
> 424 <key>Identifier</key>
> 425 <string>perspective.morph</string>
> 426 <key>IsVertical</key>
> 427 <integer>0</integer>
> 428 <key>Layout</key>
> 429 <array>
> 430 <dict>
> 431 <key>BecomeActive</key>
> 432 <integer>1</integer>
> 433 <key>ContentConfiguration</key>
> 434 <dict>
> 435 <key>PBXBottomSmartGroupGIDs</key>
> 436 <array>
> 437 <string>1C37FBAC04509CD000000102</string>
> 438 <string>1C37FAAC04509CD000000102</string>
> 439 <string>1C08E77C0454961000C914BD</string>
> 440 <string>1C37FABC05509CD000000102</string>
> 441 <string>1C37FABC05539CD112110102</string>
> 442 <string>E2644B35053B69B200211256</string>
> 443 <string>1C37FABC04509CD000100104</string>
> 444 <string>1CC0EA4004350EF90044410B</string>
> 445 <string>1CC0EA4004350EF90041110B</string>
> 446 </array>
> 447 <key>PBXProjectModuleGUID</key>
> 448 <string>11E0B1FE06471DED0097A5F4</string>
> 449 <key>PBXProjectModuleLabel</key>
> 450 <string>Files</string>
> 451 <key>PBXProjectStructureProvided</key>
> 452 <string>yes</string>
> 453 <key>PBXSmartGroupTreeModuleColumnData</key>
> 454 <dict>
> 455 <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
> 456 <array>
> 457 <real>186</real>
> 458 </array>
> 459 <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
> 460 <array>
> 461 <string>MainColumn</string>
> 462 </array>
> 463 </dict>
> 464 <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
> 465 <dict>
> 466 <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
> 467 <array>
> 468 <string>29B97314FDCFA39411CA2CEA</string>
> 469 <string>1C37FABC05509CD000000102</string>
> 470 </array>
> 471 <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
> 472 <array>
> 473 <array>
> 474 <integer>0</integer>
> 475 </array>
> 476 </array>
> 477 <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
> 478 <string>{{0, 0}, {186, 337}}</string>
> 479 </dict>
> 480 <key>PBXTopSmartGroupGIDs</key>
> 481 <array/>
> 482 <key>XCIncludePerspectivesSwitch</key>
> 483 <integer>1</integer>
> 484 <key>XCSharingToken</key>
> 485 <string>com.apple.Xcode.GFSharingToken</string>
> 486 </dict>
> 487 <key>GeometryConfiguration</key>
> 488 <dict>
> 489 <key>Frame</key>
> 490 <string>{{0, 0}, {203, 355}}</string>
> 491 <key>GroupTreeTableConfiguration</key>
> 492 <array>
> 493 <string>MainColumn</string>
> 494 <real>186</real>
> 495 </array>
> 496 <key>RubberWindowFrame</key>
> 497 <string>373 269 690 397 0 0 1440 878 </string>
> 498 </dict>
> 499 <key>Module</key>
> 500 <string>PBXSmartGroupTreeModule</string>
> 501 <key>Proportion</key>
> 502 <string>100%</string>
> 503 </dict>
> 504 </array>
> 505 <key>Name</key>
> 506 <string>Morph</string>
> 507 <key>PreferredWidth</key>
> 508 <integer>300</integer>
> 509 <key>ServiceClasses</key>
> 510 <array>
> 511 <string>XCModuleDock</string>
> 512 <string>PBXSmartGroupTreeModule</string>
> 513 </array>
> 514 <key>TableOfContents</key>
> 515 <array>
> 516 <string>11E0B1FE06471DED0097A5F4</string>
> 517 </array>
> 518 <key>ToolbarConfiguration</key>
> 519 <string>xcode.toolbar.config.default.shortV3</string>
> 520 </dict>
> 521 </array>
> 522 <key>PerspectivesBarVisible</key>
> 523 <false/>
> 524 <key>ShelfIsVisible</key>
> 525 <false/>
> 526 <key>SourceDescription</key>
> 527 <string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
> 528 <key>StatusbarIsVisible</key>
> 529 <true/>
> 530 <key>TimeStamp</key>
> 531 <real>0.0</real>
> 532 <key>ToolbarConfigUserDefaultsMinorVersion</key>
> 533 <string>2</string>
> 534 <key>ToolbarDisplayMode</key>
> 535 <integer>1</integer>
> 536 <key>ToolbarIsVisible</key>
> 537 <true/>
> 538 <key>ToolbarSizeMode</key>
> 539 <integer>1</integer>
> 540 <key>Type</key>
> 541 <string>Perspectives</string>
> 542 <key>UpdateMessage</key>
> 543 <string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?</string>
> 544 <key>WindowJustification</key>
> 545 <integer>5</integer>
> 546 <key>WindowOrderList</key>
> 547 <array>
> 548 <string>0A76B983106F73D90048097B</string>
> 549 <string>0A76B984106F73D90048097B</string>
> 550 <string>1CD10A99069EF8BA00B06720</string>
> 551 <string>0ACEBDFB106E7ACF007FCDBD</string>
> 552 <string>1C78EAAD065D492600B07095</string>
> 553 <string>/Users/dmitry/Projects/CRDatabase/CRDB.xcodeproj</string>
> 554 </array>
> 555 <key>WindowString</key>
> 556 <string>19 60 983 696 0 0 1280 778 </string>
> 557 <key>WindowToolsV3</key>
> 558 <array>
> 559 <dict>
> 560 <key>FirstTimeWindowDisplayed</key>
> 561 <false/>
> 562 <key>Identifier</key>
> 563 <string>windowTool.build</string>
> 564 <key>IsVertical</key>
> 565 <true/>
> 566 <key>Layout</key>
> 567 <array>
> 568 <dict>
> 569 <key>Dock</key>
> 570 <array>
> 571 <dict>
> 572 <key>BecomeActive</key>
> 573 <true/>
> 574 <key>ContentConfiguration</key>
> 575 <dict>
> 576 <key>PBXProjectModuleGUID</key>
> 577 <string>1CD0528F0623707200166675</string>
> 578 <key>PBXProjectModuleLabel</key>
> 579 <string>CRDB.m</string>
> 580 <key>StatusBarVisibility</key>
> 581 <true/>
> 582 </dict>
> 583 <key>GeometryConfiguration</key>
> 584 <dict>
> 585 <key>Frame</key>
> 586 <string>{{0, 0}, {500, 218}}</string>
> 587 <key>RubberWindowFrame</key>
> 588 <string>42 232 500 500 0 0 1280 778 </string>
> 589 </dict>
> 590 <key>Module</key>
> 591 <string>PBXNavigatorGroup</string>
> 592 <key>Proportion</key>
> 593 <string>218pt</string>
> 594 </dict>
> 595 <dict>
> 596 <key>ContentConfiguration</key>
> 597 <dict>
> 598 <key>PBXProjectModuleGUID</key>
> 599 <string>XCMainBuildResultsModuleGUID</string>
> 600 <key>PBXProjectModuleLabel</key>
> 601 <string>Build Results</string>
> 602 <key>XCBuildResultsTrigger_Collapse</key>
> 603 <integer>1021</integer>
> 604 <key>XCBuildResultsTrigger_Open</key>
> 605 <integer>1011</integer>
> 606 </dict>
> 607 <key>GeometryConfiguration</key>
> 608 <dict>
> 609 <key>Frame</key>
> 610 <string>{{0, 223}, {500, 236}}</string>
> 611 <key>RubberWindowFrame</key>
> 612 <string>42 232 500 500 0 0 1280 778 </string>
> 613 </dict>
> 614 <key>Module</key>
> 615 <string>PBXBuildResultsModule</string>
> 616 <key>Proportion</key>
> 617 <string>236pt</string>
> 618 </dict>
> 619 </array>
> 620 <key>Proportion</key>
> 621 <string>459pt</string>
> 622 </dict>
> 623 </array>
> 624 <key>Name</key>
> 625 <string>Build Results</string>
> 626 <key>ServiceClasses</key>
> 627 <array>
> 628 <string>PBXBuildResultsModule</string>
> 629 </array>
> 630 <key>StatusbarIsVisible</key>
> 631 <true/>
> 632 <key>TableOfContents</key>
> 633 <array>
> 634 <string>0ACEBDFB106E7ACF007FCDBD</string>
> 635 <string>0A76B971106F6F690048097B</string>
> 636 <string>1CD0528F0623707200166675</string>
> 637 <string>XCMainBuildResultsModuleGUID</string>
> 638 </array>
> 639 <key>ToolbarConfiguration</key>
> 640 <string>xcode.toolbar.config.buildV3</string>
> 641 <key>WindowContentMinSize</key>
> 642 <string>486 300</string>
> 643 <key>WindowString</key>
> 644 <string>42 232 500 500 0 0 1280 778 </string>
> 645 <key>WindowToolGUID</key>
> 646 <string>0ACEBDFB106E7ACF007FCDBD</string>
> 647 <key>WindowToolIsVisible</key>
> 648 <false/>
> 649 </dict>
> 650 <dict>
> 651 <key>FirstTimeWindowDisplayed</key>
> 652 <false/>
> 653 <key>Identifier</key>
> 654 <string>windowTool.debugger</string>
> 655 <key>IsVertical</key>
> 656 <true/>
> 657 <key>Layout</key>
> 658 <array>
> 659 <dict>
> 660 <key>Dock</key>
> 661 <array>
> 662 <dict>
> 663 <key>ContentConfiguration</key>
> 664 <dict>
> 665 <key>Debugger</key>
> 666 <dict>
> 667 <key>HorizontalSplitView</key>
> 668 <dict>
> 669 <key>_collapsingFrameDimension</key>
> 670 <real>0.0</real>
> 671 <key>_indexOfCollapsedView</key>
> 672 <integer>0</integer>
> 673 <key>_percentageOfCollapsedView</key>
> 674 <real>0.0</real>
> 675 <key>isCollapsed</key>
> 676 <string>yes</string>
> 677 <key>sizes</key>
> 678 <array>
> 679 <string>{{0, 0}, {371, 278}}</string>
> 680 <string>{{371, 0}, {443, 278}}</string>
> 681 </array>
> 682 </dict>
> 683 <key>VerticalSplitView</key>
> 684 <dict>
> 685 <key>_collapsingFrameDimension</key>
> 686 <real>0.0</real>
> 687 <key>_indexOfCollapsedView</key>
> 688 <integer>0</integer>
> 689 <key>_percentageOfCollapsedView</key>
> 690 <real>0.0</real>
> 691 <key>isCollapsed</key>
> 692 <string>yes</string>
> 693 <key>sizes</key>
> 694 <array>
> 695 <string>{{0, 0}, {814, 278}}</string>
> 696 <string>{{0, 278}, {814, 257}}</string>
> 697 </array>
> 698 </dict>
> 699 </dict>
> 700 <key>LauncherConfigVersion</key>
> 701 <string>8</string>
> 702 <key>PBXProjectModuleGUID</key>
> 703 <string>1C162984064C10D400B95A72</string>
> 704 <key>PBXProjectModuleLabel</key>
> 705 <string>Debug - GLUTExamples (Underwater)</string>
> 706 </dict>
> 707 <key>GeometryConfiguration</key>
> 708 <dict>
> 709 <key>DebugConsoleVisible</key>
> 710 <string>None</string>
> 711 <key>DebugConsoleWindowFrame</key>
> 712 <string>{{200, 200}, {500, 300}}</string>
> 713 <key>DebugSTDIOWindowFrame</key>
> 714 <string>{{200, 200}, {500, 300}}</string>
> 715 <key>Frame</key>
> 716 <string>{{0, 0}, {814, 535}}</string>
> 717 <key>PBXDebugSessionStackFrameViewKey</key>
> 718 <dict>
> 719 <key>DebugVariablesTableConfiguration</key>
> 720 <array>
> 721 <string>Name</string>
> 722 <real>120</real>
> 723 <string>Value</string>
> 724 <real>85</real>
> 725 <string>Summary</string>
> 726 <real>213</real>
> 727 </array>
> 728 <key>Frame</key>
> 729 <string>{{371, 0}, {443, 278}}</string>
> 730 <key>RubberWindowFrame</key>
> 731 <string>42 156 814 576 0 0 1280 778 </string>
> 732 </dict>
> 733 <key>RubberWindowFrame</key>
> 734 <string>42 156 814 576 0 0 1280 778 </string>
> 735 </dict>
> 736 <key>Module</key>
> 737 <string>PBXDebugSessionModule</string>
> 738 <key>Proportion</key>
> 739 <string>535pt</string>
> 740 </dict>
> 741 </array>
> 742 <key>Proportion</key>
> 743 <string>535pt</string>
> 744 </dict>
> 745 </array>
> 746 <key>Name</key>
> 747 <string>Debugger</string>
> 748 <key>ServiceClasses</key>
> 749 <array>
> 750 <string>PBXDebugSessionModule</string>
> 751 </array>
> 752 <key>StatusbarIsVisible</key>
> 753 <true/>
> 754 <key>TableOfContents</key>
> 755 <array>
> 756 <string>1CD10A99069EF8BA00B06720</string>
> 757 <string>0A76B97D106F73D90048097B</string>
> 758 <string>1C162984064C10D400B95A72</string>
> 759 <string>0A76B97E106F73D90048097B</string>
> 760 <string>0A76B97F106F73D90048097B</string>
> 761 <string>0A76B980106F73D90048097B</string>
> 762 <string>0A76B981106F73D90048097B</string>
> 763 <string>0A76B982106F73D90048097B</string>
> 764 </array>
> 765 <key>ToolbarConfiguration</key>
> 766 <string>xcode.toolbar.config.debugV3</string>
> 767 <key>WindowString</key>
> 768 <string>42 156 814 576 0 0 1280 778 </string>
> 769 <key>WindowToolGUID</key>
> 770 <string>1CD10A99069EF8BA00B06720</string>
> 771 <key>WindowToolIsVisible</key>
> 772 <false/>
> 773 </dict>
> 774 <dict>
> 775 <key>Identifier</key>
> 776 <string>windowTool.find</string>
> 777 <key>Layout</key>
> 778 <array>
> 779 <dict>
> 780 <key>Dock</key>
> 781 <array>
> 782 <dict>
> 783 <key>Dock</key>
> 784 <array>
> 785 <dict>
> 786 <key>ContentConfiguration</key>
> 787 <dict>
> 788 <key>PBXProjectModuleGUID</key>
> 789 <string>1CDD528C0622207200134675</string>
> 790 <key>PBXProjectModuleLabel</key>
> 791 <string>&lt;No Editor&gt;</string>
> 792 <key>PBXSplitModuleInNavigatorKey</key>
> 793 <dict>
> 794 <key>Split0</key>
> 795 <dict>
> 796 <key>PBXProjectModuleGUID</key>
> 797 <string>1CD0528D0623707200166675</string>
> 798 </dict>
> 799 <key>SplitCount</key>
> 800 <string>1</string>
> 801 </dict>
> 802 <key>StatusBarVisibility</key>
> 803 <integer>1</integer>
> 804 </dict>
> 805 <key>GeometryConfiguration</key>
> 806 <dict>
> 807 <key>Frame</key>
> 808 <string>{{0, 0}, {781, 167}}</string>
> 809 <key>RubberWindowFrame</key>
> 810 <string>62 385 781 470 0 0 1440 878 </string>
> 811 </dict>
> 812 <key>Module</key>
> 813 <string>PBXNavigatorGroup</string>
> 814 <key>Proportion</key>
> 815 <string>781pt</string>
> 816 </dict>
> 817 </array>
> 818 <key>Proportion</key>
> 819 <string>50%</string>
> 820 </dict>
> 821 <dict>
> 822 <key>BecomeActive</key>
> 823 <integer>1</integer>
> 824 <key>ContentConfiguration</key>
> 825 <dict>
> 826 <key>PBXProjectModuleGUID</key>
> 827 <string>1CD0528E0623707200166675</string>
> 828 <key>PBXProjectModuleLabel</key>
> 829 <string>Project Find</string>
> 830 </dict>
> 831 <key>GeometryConfiguration</key>
> 832 <dict>
> 833 <key>Frame</key>
> 834 <string>{{8, 0}, {773, 254}}</string>
> 835 <key>RubberWindowFrame</key>
> 836 <string>62 385 781 470 0 0 1440 878 </string>
> 837 </dict>
> 838 <key>Module</key>
> 839 <string>PBXProjectFindModule</string>
> 840 <key>Proportion</key>
> 841 <string>50%</string>
> 842 </dict>
> 843 </array>
> 844 <key>Proportion</key>
> 845 <string>428pt</string>
> 846 </dict>
> 847 </array>
> 848 <key>Name</key>
> 849 <string>Project Find</string>
> 850 <key>ServiceClasses</key>
> 851 <array>
> 852 <string>PBXProjectFindModule</string>
> 853 </array>
> 854 <key>StatusbarIsVisible</key>
> 855 <integer>1</integer>
> 856 <key>TableOfContents</key>
> 857 <array>
> 858 <string>1C530D57069F1CE1000CFCEE</string>
> 859 <string>1C530D58069F1CE1000CFCEE</string>
> 860 <string>1C530D59069F1CE1000CFCEE</string>
> 861 <string>1CDD528C0622207200134675</string>
> 862 <string>1C530D5A069F1CE1000CFCEE</string>
> 863 <string>1CE0B1FE06471DED0097A5F4</string>
> 864 <string>1CD0528E0623707200166675</string>
> 865 </array>
> 866 <key>WindowString</key>
> 867 <string>62 385 781 470 0 0 1440 878 </string>
> 868 <key>WindowToolGUID</key>
> 869 <string>1C530D57069F1CE1000CFCEE</string>
> 870 <key>WindowToolIsVisible</key>
> 871 <integer>0</integer>
> 872 </dict>
> 873 <dict>
> 874 <key>Identifier</key>
> 875 <string>MENUSEPARATOR</string>
> 876 </dict>
> 877 <dict>
> 878 <key>FirstTimeWindowDisplayed</key>
> 879 <false/>
> 880 <key>Identifier</key>
> 881 <string>windowTool.debuggerConsole</string>
> 882 <key>IsVertical</key>
> 883 <true/>
> 884 <key>Layout</key>
> 885 <array>
> 886 <dict>
> 887 <key>Dock</key>
> 888 <array>
> 889 <dict>
> 890 <key>BecomeActive</key>
> 891 <true/>
> 892 <key>ContentConfiguration</key>
> 893 <dict>
> 894 <key>PBXProjectModuleGUID</key>
> 895 <string>1C78EAAC065D492600B07095</string>
> 896 <key>PBXProjectModuleLabel</key>
> 897 <string>Debugger Console</string>
> 898 </dict>
> 899 <key>GeometryConfiguration</key>
> 900 <dict>
> 901 <key>Frame</key>
> 902 <string>{{0, 0}, {741, 258}}</string>
> 903 <key>RubberWindowFrame</key>
> 904 <string>483 479 741 299 0 0 1280 778 </string>
> 905 </dict>
> 906 <key>Module</key>
> 907 <string>PBXDebugCLIModule</string>
> 908 <key>Proportion</key>
> 909 <string>258pt</string>
> 910 </dict>
> 911 </array>
> 912 <key>Proportion</key>
> 913 <string>258pt</string>
> 914 </dict>
> 915 </array>
> 916 <key>Name</key>
> 917 <string>Debugger Console</string>
> 918 <key>ServiceClasses</key>
> 919 <array>
> 920 <string>PBXDebugCLIModule</string>
> 921 </array>
> 922 <key>StatusbarIsVisible</key>
> 923 <true/>
> 924 <key>TableOfContents</key>
> 925 <array>
> 926 <string>1C78EAAD065D492600B07095</string>
> 927 <string>0A76B972106F6F690048097B</string>
> 928 <string>1C78EAAC065D492600B07095</string>
> 929 </array>
> 930 <key>ToolbarConfiguration</key>
> 931 <string>xcode.toolbar.config.consoleV3</string>
> 932 <key>WindowString</key>
> 933 <string>483 479 741 299 0 0 1280 778 </string>
> 934 <key>WindowToolGUID</key>
> 935 <string>1C78EAAD065D492600B07095</string>
> 936 <key>WindowToolIsVisible</key>
> 937 <true/>
> 938 </dict>
> 939 <dict>
> 940 <key>Identifier</key>
> 941 <string>windowTool.snapshots</string>
> 942 <key>Layout</key>
> 943 <array>
> 944 <dict>
> 945 <key>Dock</key>
> 946 <array>
> 947 <dict>
> 948 <key>Module</key>
> 949 <string>XCSnapshotModule</string>
> 950 <key>Proportion</key>
> 951 <string>100%</string>
> 952 </dict>
> 953 </array>
> 954 <key>Proportion</key>
> 955 <string>100%</string>
> 956 </dict>
> 957 </array>
> 958 <key>Name</key>
> 959 <string>Snapshots</string>
> 960 <key>ServiceClasses</key>
> 961 <array>
> 962 <string>XCSnapshotModule</string>
> 963 </array>
> 964 <key>StatusbarIsVisible</key>
> 965 <string>Yes</string>
> 966 <key>ToolbarConfiguration</key>
> 967 <string>xcode.toolbar.config.snapshots</string>
> 968 <key>WindowString</key>
> 969 <string>315 824 300 550 0 0 1440 878 </string>
> 970 <key>WindowToolIsVisible</key>
> 971 <string>Yes</string>
> 972 </dict>
> 973 <dict>
> 974 <key>Identifier</key>
> 975 <string>windowTool.scm</string>
> 976 <key>Layout</key>
> 977 <array>
> 978 <dict>
> 979 <key>Dock</key>
> 980 <array>
> 981 <dict>
> 982 <key>ContentConfiguration</key>
> 983 <dict>
> 984 <key>PBXProjectModuleGUID</key>
> 985 <string>1C78EAB2065D492600B07095</string>
> 986 <key>PBXProjectModuleLabel</key>
> 987 <string>&lt;No Editor&gt;</string>
> 988 <key>PBXSplitModuleInNavigatorKey</key>
> 989 <dict>
> 990 <key>Split0</key>
> 991 <dict>
> 992 <key>PBXProjectModuleGUID</key>
> 993 <string>1C78EAB3065D492600B07095</string>
> 994 </dict>
> 995 <key>SplitCount</key>
> 996 <string>1</string>
> 997 </dict>
> 998 <key>StatusBarVisibility</key>
> 999 <integer>1</integer>
> 1000 </dict>
> 1001 <key>GeometryConfiguration</key>
> 1002 <dict>
> 1003 <key>Frame</key>
> 1004 <string>{{0, 0}, {452, 0}}</string>
> 1005 <key>RubberWindowFrame</key>
> 1006 <string>743 379 452 308 0 0 1280 1002 </string>
> 1007 </dict>
> 1008 <key>Module</key>
> 1009 <string>PBXNavigatorGroup</string>
> 1010 <key>Proportion</key>
> 1011 <string>0pt</string>
> 1012 </dict>
> 1013 <dict>
> 1014 <key>BecomeActive</key>
> 1015 <integer>1</integer>
> 1016 <key>ContentConfiguration</key>
> 1017 <dict>
> 1018 <key>PBXProjectModuleGUID</key>
> 1019 <string>1CD052920623707200166675</string>
> 1020 <key>PBXProjectModuleLabel</key>
> 1021 <string>SCM</string>
> 1022 </dict>
> 1023 <key>GeometryConfiguration</key>
> 1024 <dict>
> 1025 <key>ConsoleFrame</key>
> 1026 <string>{{0, 259}, {452, 0}}</string>
> 1027 <key>Frame</key>
> 1028 <string>{{0, 7}, {452, 259}}</string>
> 1029 <key>RubberWindowFrame</key>
> 1030 <string>743 379 452 308 0 0 1280 1002 </string>
> 1031 <key>TableConfiguration</key>
> 1032 <array>
> 1033 <string>Status</string>
> 1034 <real>30</real>
> 1035 <string>FileName</string>
> 1036 <real>199</real>
> 1037 <string>Path</string>
> 1038 <real>197.0950012207031</real>
> 1039 </array>
> 1040 <key>TableFrame</key>
> 1041 <string>{{0, 0}, {452, 250}}</string>
> 1042 </dict>
> 1043 <key>Module</key>
> 1044 <string>PBXCVSModule</string>
> 1045 <key>Proportion</key>
> 1046 <string>262pt</string>
> 1047 </dict>
> 1048 </array>
> 1049 <key>Proportion</key>
> 1050 <string>266pt</string>
> 1051 </dict>
> 1052 </array>
> 1053 <key>Name</key>
> 1054 <string>SCM</string>
> 1055 <key>ServiceClasses</key>
> 1056 <array>
> 1057 <string>PBXCVSModule</string>
> 1058 </array>
> 1059 <key>StatusbarIsVisible</key>
> 1060 <integer>1</integer>
> 1061 <key>TableOfContents</key>
> 1062 <array>
> 1063 <string>1C78EAB4065D492600B07095</string>
> 1064 <string>1C78EAB5065D492600B07095</string>
> 1065 <string>1C78EAB2065D492600B07095</string>
> 1066 <string>1CD052920623707200166675</string>
> 1067 </array>
> 1068 <key>ToolbarConfiguration</key>
> 1069 <string>xcode.toolbar.config.scm</string>
> 1070 <key>WindowString</key>
> 1071 <string>743 379 452 308 0 0 1280 1002 </string>
> 1072 </dict>
> 1073 <dict>
> 1074 <key>FirstTimeWindowDisplayed</key>
> 1075 <false/>
> 1076 <key>Identifier</key>
> 1077 <string>windowTool.breakpoints</string>
> 1078 <key>IsVertical</key>
> 1079 <false/>
> 1080 <key>Layout</key>
> 1081 <array>
> 1082 <dict>
> 1083 <key>Dock</key>
> 1084 <array>
> 1085 <dict>
> 1086 <key>ContentConfiguration</key>
> 1087 <dict>
> 1088 <key>PBXBottomSmartGroupGIDs</key>
> 1089 <array>
> 1090 <string>1C77FABC04509CD000000102</string>
> 1091 </array>
> 1092 <key>PBXProjectModuleGUID</key>
> 1093 <string>1CE0B1FE06471DED0097A5F4</string>
> 1094 <key>PBXProjectModuleLabel</key>
> 1095 <string>Files</string>
> 1096 <key>PBXProjectStructureProvided</key>
> 1097 <string>no</string>
> 1098 <key>PBXSmartGroupTreeModuleColumnData</key>
> 1099 <dict>
> 1100 <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
> 1101 <array>
> 1102 <real>168</real>
> 1103 </array>
> 1104 <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
> 1105 <array>
> 1106 <string>MainColumn</string>
> 1107 </array>
> 1108 </dict>
> 1109 <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
> 1110 <dict>
> 1111 <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
> 1112 <array>
> 1113 <string>1C77FABC04509CD000000102</string>
> 1114 </array>
> 1115 <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
> 1116 <array>
> 1117 <array>
> 1118 <integer>0</integer>
> 1119 </array>
> 1120 </array>
> 1121 <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
> 1122 <string>{{0, 0}, {168, 350}}</string>
> 1123 </dict>
> 1124 <key>PBXTopSmartGroupGIDs</key>
> 1125 <array/>
> 1126 <key>XCIncludePerspectivesSwitch</key>
> 1127 <false/>
> 1128 </dict>
> 1129 <key>GeometryConfiguration</key>
> 1130 <dict>
> 1131 <key>Frame</key>
> 1132 <string>{{0, 0}, {185, 368}}</string>
> 1133 <key>GroupTreeTableConfiguration</key>
> 1134 <array>
> 1135 <string>MainColumn</string>
> 1136 <real>168</real>
> 1137 </array>
> 1138 <key>RubberWindowFrame</key>
> 1139 <string>42 323 744 409 0 0 1280 778 </string>
> 1140 </dict>
> 1141 <key>Module</key>
> 1142 <string>PBXSmartGroupTreeModule</string>
> 1143 <key>Proportion</key>
> 1144 <string>185pt</string>
> 1145 </dict>
> 1146 <dict>
> 1147 <key>BecomeActive</key>
> 1148 <true/>
> 1149 <key>ContentConfiguration</key>
> 1150 <dict>
> 1151 <key>PBXProjectModuleGUID</key>
> 1152 <string>1CA1AED706398EBD00589147</string>
> 1153 <key>PBXProjectModuleLabel</key>
> 1154 <string>Detail</string>
> 1155 </dict>
> 1156 <key>GeometryConfiguration</key>
> 1157 <dict>
> 1158 <key>Frame</key>
> 1159 <string>{{190, 0}, {554, 368}}</string>
> 1160 <key>RubberWindowFrame</key>
> 1161 <string>42 323 744 409 0 0 1280 778 </string>
> 1162 </dict>
> 1163 <key>Module</key>
> 1164 <string>XCDetailModule</string>
> 1165 <key>Proportion</key>
> 1166 <string>554pt</string>
> 1167 </dict>
> 1168 </array>
> 1169 <key>Proportion</key>
> 1170 <string>368pt</string>
> 1171 </dict>
> 1172 </array>
> 1173 <key>MajorVersion</key>
> 1174 <integer>3</integer>
> 1175 <key>MinorVersion</key>
> 1176 <integer>0</integer>
> 1177 <key>Name</key>
> 1178 <string>Breakpoints</string>
> 1179 <key>ServiceClasses</key>
> 1180 <array>
> 1181 <string>PBXSmartGroupTreeModule</string>
> 1182 <string>XCDetailModule</string>
> 1183 </array>
> 1184 <key>StatusbarIsVisible</key>
> 1185 <true/>
> 1186 <key>TableOfContents</key>
> 1187 <array>
> 1188 <string>0A76B5B7106E94870048097B</string>
> 1189 <string>0A76B5B8106E94870048097B</string>
> 1190 <string>1CE0B1FE06471DED0097A5F4</string>
> 1191 <string>1CA1AED706398EBD00589147</string>
> 1192 </array>
> 1193 <key>ToolbarConfiguration</key>
> 1194 <string>xcode.toolbar.config.breakpointsV3</string>
> 1195 <key>WindowString</key>
> 1196 <string>42 323 744 409 0 0 1280 778 </string>
> 1197 <key>WindowToolGUID</key>
> 1198 <string>0A76B5B7106E94870048097B</string>
> 1199 <key>WindowToolIsVisible</key>
> 1200 <false/>
> 1201 </dict>
> 1202 <dict>
> 1203 <key>Identifier</key>
> 1204 <string>windowTool.debugAnimator</string>
> 1205 <key>Layout</key>
> 1206 <array>
> 1207 <dict>
> 1208 <key>Dock</key>
> 1209 <array>
> 1210 <dict>
> 1211 <key>Module</key>
> 1212 <string>PBXNavigatorGroup</string>
> 1213 <key>Proportion</key>
> 1214 <string>100%</string>
> 1215 </dict>
> 1216 </array>
> 1217 <key>Proportion</key>
> 1218 <string>100%</string>
> 1219 </dict>
> 1220 </array>
> 1221 <key>Name</key>
> 1222 <string>Debug Visualizer</string>
> 1223 <key>ServiceClasses</key>
> 1224 <array>
> 1225 <string>PBXNavigatorGroup</string>
> 1226 </array>
> 1227 <key>StatusbarIsVisible</key>
> 1228 <integer>1</integer>
> 1229 <key>ToolbarConfiguration</key>
> 1230 <string>xcode.toolbar.config.debugAnimatorV3</string>
> 1231 <key>WindowString</key>
> 1232 <string>100 100 700 500 0 0 1280 1002 </string>
> 1233 </dict>
> 1234 <dict>
> 1235 <key>Identifier</key>
> 1236 <string>windowTool.bookmarks</string>
> 1237 <key>Layout</key>
> 1238 <array>
> 1239 <dict>
> 1240 <key>Dock</key>
> 1241 <array>
> 1242 <dict>
> 1243 <key>Module</key>
> 1244 <string>PBXBookmarksModule</string>
> 1245 <key>Proportion</key>
> 1246 <string>100%</string>
> 1247 </dict>
> 1248 </array>
> 1249 <key>Proportion</key>
> 1250 <string>100%</string>
> 1251 </dict>
> 1252 </array>
> 1253 <key>Name</key>
> 1254 <string>Bookmarks</string>
> 1255 <key>ServiceClasses</key>
> 1256 <array>
> 1257 <string>PBXBookmarksModule</string>
> 1258 </array>
> 1259 <key>StatusbarIsVisible</key>
> 1260 <integer>0</integer>
> 1261 <key>WindowString</key>
> 1262 <string>538 42 401 187 0 0 1280 1002 </string>
> 1263 </dict>
> 1264 <dict>
> 1265 <key>Identifier</key>
> 1266 <string>windowTool.projectFormatConflicts</string>
> 1267 <key>Layout</key>
> 1268 <array>
> 1269 <dict>
> 1270 <key>Dock</key>
> 1271 <array>
> 1272 <dict>
> 1273 <key>Module</key>
> 1274 <string>XCProjectFormatConflictsModule</string>
> 1275 <key>Proportion</key>
> 1276 <string>100%</string>
> 1277 </dict>
> 1278 </array>
> 1279 <key>Proportion</key>
> 1280 <string>100%</string>
> 1281 </dict>
> 1282 </array>
> 1283 <key>Name</key>
> 1284 <string>Project Format Conflicts</string>
> 1285 <key>ServiceClasses</key>
> 1286 <array>
> 1287 <string>XCProjectFormatConflictsModule</string>
> 1288 </array>
> 1289 <key>StatusbarIsVisible</key>
> 1290 <integer>0</integer>
> 1291 <key>WindowContentMinSize</key>
> 1292 <string>450 300</string>
> 1293 <key>WindowString</key>
> 1294 <string>50 850 472 307 0 0 1440 877</string>
> 1295 </dict>
> 1296 <dict>
> 1297 <key>FirstTimeWindowDisplayed</key>
> 1298 <false/>
> 1299 <key>Identifier</key>
> 1300 <string>windowTool.classBrowser</string>
> 1301 <key>IsVertical</key>
> 1302 <true/>
> 1303 <key>Layout</key>
> 1304 <array>
> 1305 <dict>
> 1306 <key>Dock</key>
> 1307 <array>
> 1308 <dict>
> 1309 <key>ContentConfiguration</key>
> 1310 <dict>
> 1311 <key>OptionsSetName</key>
> 1312 <string>Hierarchy, all classes</string>
> 1313 <key>PBXProjectModuleGUID</key>
> 1314 <string>1CA6456E063B45B4001379D8</string>
> 1315 <key>PBXProjectModuleLabel</key>
> 1316 <string>Class Browser - NSObject</string>
> 1317 </dict>
> 1318 <key>GeometryConfiguration</key>
> 1319 <dict>
> 1320 <key>ClassesFrame</key>
> 1321 <string>{{0, 0}, {378, 96}}</string>
> 1322 <key>ClassesTreeTableConfiguration</key>
> 1323 <array>
> 1324 <string>PBXClassNameColumnIdentifier</string>
> 1325 <real>208</real>
> 1326 <string>PBXClassBookColumnIdentifier</string>
> 1327 <real>22</real>
> 1328 </array>
> 1329 <key>Frame</key>
> 1330 <string>{{0, 0}, {630, 332}}</string>
> 1331 <key>MembersFrame</key>
> 1332 <string>{{0, 101}, {378, 231}}</string>
> 1333 <key>MembersTreeTableConfiguration</key>
> 1334 <array>
> 1335 <string>PBXMemberTypeIconColumnIdentifier</string>
> 1336 <real>22</real>
> 1337 <string>PBXMemberNameColumnIdentifier</string>
> 1338 <real>216</real>
> 1339 <string>PBXMemberTypeColumnIdentifier</string>
> 1340 <real>101</real>
> 1341 <string>PBXMemberBookColumnIdentifier</string>
> 1342 <real>22</real>
> 1343 </array>
> 1344 <key>RubberWindowFrame</key>
> 1345 <string>42 380 630 352 0 0 1280 778 </string>
> 1346 </dict>
> 1347 <key>Module</key>
> 1348 <string>PBXClassBrowserModule</string>
> 1349 <key>Proportion</key>
> 1350 <string>332pt</string>
> 1351 </dict>
> 1352 </array>
> 1353 <key>Proportion</key>
> 1354 <string>332pt</string>
> 1355 </dict>
> 1356 </array>
> 1357 <key>Name</key>
> 1358 <string>Class Browser</string>
> 1359 <key>ServiceClasses</key>
> 1360 <array>
> 1361 <string>PBXClassBrowserModule</string>
> 1362 </array>
> 1363 <key>StatusbarIsVisible</key>
> 1364 <false/>
> 1365 <key>TableOfContents</key>
> 1366 <array>
> 1367 <string>1C0AD2AF069F1E9B00FABCE6</string>
> 1368 <string>0A76B8A9106ED0860048097B</string>
> 1369 <string>1CA6456E063B45B4001379D8</string>
> 1370 </array>
> 1371 <key>ToolbarConfiguration</key>
> 1372 <string>xcode.toolbar.config.classbrowser</string>
> 1373 <key>WindowString</key>
> 1374 <string>42 380 630 352 0 0 1280 778 </string>
> 1375 <key>WindowToolGUID</key>
> 1376 <string>1C0AD2AF069F1E9B00FABCE6</string>
> 1377 <key>WindowToolIsVisible</key>
> 1378 <false/>
> 1379 </dict>
> 1380 <dict>
> 1381 <key>FirstTimeWindowDisplayed</key>
> 1382 <false/>
> 1383 <key>Identifier</key>
> 1384 <string>windowTool.refactoring</string>
> 1385 <key>IncludeInToolsMenu</key>
> 1386 <integer>0</integer>
> 1387 <key>IsVertical</key>
> 1388 <true/>
> 1389 <key>Layout</key>
> 1390 <array>
> 1391 <dict>
> 1392 <key>Dock</key>
> 1393 <array>
> 1394 <dict>
> 1395 <key>ContentConfiguration</key>
> 1396 <dict>
> 1397 <key>PBXProjectModuleGUID</key>
> 1398 <string>0A76B5DD106E972C0048097B</string>
> 1399 </dict>
> 1400 <key>GeometryConfiguration</key>
> 1401 <dict>
> 1402 <key>Frame</key>
> 1403 <string>{{0, 0}, {500, 315}}</string>
> 1404 <key>RubberWindowFrame</key>
> 1405 <string>42 376 500 356 0 0 1280 778 </string>
> 1406 <key>XCRefactoringSplitViewLowerHeight</key>
> 1407 <real>112</real>
> 1408 <key>XCRefactoringSplitViewTotalHeight</key>
> 1409 <real>232</real>
> 1410 </dict>
> 1411 <key>Module</key>
> 1412 <string>XCRefactoringModule</string>
> 1413 <key>Proportion</key>
> 1414 <string>315pt</string>
> 1415 </dict>
> 1416 </array>
> 1417 <key>Proportion</key>
> 1418 <string>315pt</string>
> 1419 </dict>
> 1420 </array>
> 1421 <key>Name</key>
> 1422 <string>Refactoring</string>
> 1423 <key>ServiceClasses</key>
> 1424 <array>
> 1425 <string>XCRefactoringModule</string>
> 1426 </array>
> 1427 <key>StatusbarIsVisible</key>
> 1428 <true/>
> 1429 <key>TableOfContents</key>
> 1430 <array>
> 1431 <string>0A76B5DE106E972C0048097B</string>
> 1432 <string>0A76B5DF106E972C0048097B</string>
> 1433 <string>0A76B5DD106E972C0048097B</string>
> 1434 </array>
> 1435 <key>WindowString</key>
> 1436 <string>42 376 500 356 0 0 1280 778 </string>
> 1437 <key>WindowToolGUID</key>
> 1438 <string>0A76B5DE106E972C0048097B</string>
> 1439 <key>WindowToolIsVisible</key>
> 1440 <false/>
> 1441 </dict>
> 1442 </array>
> 1443 </dict>
> 1444 </plist>

Added CRDB.xcodeproj/dmitry.pbxuser

Old () New (009dc339a1965f75)
> 1 // !$*UTF8*$!
> 2 {
> 3 08FB7793FE84155DC02AAC07 /* Project object */ = {
> 4 activeBuildConfigurationName = Debug;
> 5 activeExecutable = 0ACEBDEC106E7A1F007FCDBD /* CRDB */;
> 6 activeTarget = 8DD76F960486AA7600D96B5E /* CRDB */;
> 7 addToTargets = (
> 8 );
> 9 breakpoints = (
> 10 );
> 11 codeSenseManager = 0ACEBDF1106E7A3E007FCDBD /* Code sense */;
> 12 executables = (
> 13 0ACEBDEC106E7A1F007FCDBD /* CRDB */,
> 14 );
> 15 perUserDictionary = {
> 16 "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
> 17 PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
> 18 PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
> 19 PBXFileTableDataSourceColumnWidthsKey = (
> 20 20,
> 21 20,
> 22 198,
> 23 20,
> 24 99,
> 25 99,
> 26 29,
> 27 20,
> 28 );
> 29 PBXFileTableDataSourceColumnsKey = (
> 30 PBXBreakpointsDataSource_ActionID,
> 31 PBXBreakpointsDataSource_TypeID,
> 32 PBXBreakpointsDataSource_BreakpointID,
> 33 PBXBreakpointsDataSource_UseID,
> 34 PBXBreakpointsDataSource_LocationID,
> 35 PBXBreakpointsDataSource_ConditionID,
> 36 PBXBreakpointsDataSource_IgnoreCountID,
> 37 PBXBreakpointsDataSource_ContinueID,
> 38 );
> 39 };
> 40 PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
> 41 PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
> 42 PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
> 43 PBXFileTableDataSourceColumnWidthsKey = (
> 44 22,
> 45 300,
> 46 424,
> 47 );
> 48 PBXFileTableDataSourceColumnsKey = (
> 49 PBXExecutablesDataSource_ActiveFlagID,
> 50 PBXExecutablesDataSource_NameID,
> 51 PBXExecutablesDataSource_CommentsID,
> 52 );
> 53 };
> 54 PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
> 55 PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
> 56 PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
> 57 PBXFileTableDataSourceColumnWidthsKey = (
> 58 20,
> 59 536,
> 60 20,
> 61 48,
> 62 43,
> 63 43,
> 64 20,
> 65 );
> 66 PBXFileTableDataSourceColumnsKey = (
> 67 PBXFileDataSource_FiletypeID,
> 68 PBXFileDataSource_Filename_ColumnID,
> 69 PBXFileDataSource_Built_ColumnID,
> 70 PBXFileDataSource_ObjectSize_ColumnID,
> 71 PBXFileDataSource_Errors_ColumnID,
> 72 PBXFileDataSource_Warnings_ColumnID,
> 73 PBXFileDataSource_Target_ColumnID,
> 74 );
> 75 };
> 76 PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
> 77 PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
> 78 PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
> 79 PBXFileTableDataSourceColumnWidthsKey = (
> 80 20,
> 81 496,
> 82 60,
> 83 20,
> 84 48,
> 85 43,
> 86 43,
> 87 );
> 88 PBXFileTableDataSourceColumnsKey = (
> 89 PBXFileDataSource_FiletypeID,
> 90 PBXFileDataSource_Filename_ColumnID,
> 91 PBXTargetDataSource_PrimaryAttribute,
> 92 PBXFileDataSource_Built_ColumnID,
> 93 PBXFileDataSource_ObjectSize_ColumnID,
> 94 PBXFileDataSource_Errors_ColumnID,
> 95 PBXFileDataSource_Warnings_ColumnID,
> 96 );
> 97 };
> 98 PBXPerProjectTemplateStateSaveDate = 275738438;
> 99 PBXWorkspaceStateSaveDate = 275738438;
> 100 };
> 101 perUserProjectItems = {
> 102 0A76B5BC106E949F0048097B /* PBXTextBookmark */ = 0A76B5BC106E949F0048097B /* PBXTextBookmark */;
> 103 0A76B658106EA6530048097B /* PBXTextBookmark */ = 0A76B658106EA6530048097B /* PBXTextBookmark */;
> 104 0A76B660106EA6530048097B /* PBXTextBookmark */ = 0A76B660106EA6530048097B /* PBXTextBookmark */;
> 105 0A76B742106EAFBF0048097B /* PBXTextBookmark */ = 0A76B742106EAFBF0048097B /* PBXTextBookmark */;
> 106 0A76B745106EAFBF0048097B /* PBXTextBookmark */ = 0A76B745106EAFBF0048097B /* PBXTextBookmark */;
> 107 0A76B7D6106EC13E0048097B /* PBXTextBookmark */ = 0A76B7D6106EC13E0048097B /* PBXTextBookmark */;
> 108 0A76B912106EE11E0048097B /* PBXTextBookmark */ = 0A76B912106EE11E0048097B /* PBXTextBookmark */;
> 109 0A76B95C106F6F020048097B /* PBXTextBookmark */ = 0A76B95C106F6F020048097B /* PBXTextBookmark */;
> 110 0A76B95D106F6F020048097B /* PBXTextBookmark */ = 0A76B95D106F6F020048097B /* PBXTextBookmark */;
> 111 0A76B95E106F6F020048097B /* PBXTextBookmark */ = 0A76B95E106F6F020048097B /* PBXTextBookmark */;
> 112 0A76B95F106F6F020048097B /* PBXTextBookmark */ = 0A76B95F106F6F020048097B /* PBXTextBookmark */;
> 113 0A76B960106F6F020048097B /* PBXTextBookmark */ = 0A76B960106F6F020048097B /* PBXTextBookmark */;
> 114 0A76B961106F6F020048097B /* PBXTextBookmark */ = 0A76B961106F6F020048097B /* PBXTextBookmark */;
> 115 0A76B977106F73D90048097B /* PBXTextBookmark */ = 0A76B977106F73D90048097B /* PBXTextBookmark */;
> 116 0A76B978106F73D90048097B /* PBXTextBookmark */ = 0A76B978106F73D90048097B /* PBXTextBookmark */;
> 117 0A76B979106F73D90048097B /* PBXTextBookmark */ = 0A76B979106F73D90048097B /* PBXTextBookmark */;
> 118 0A76B97A106F73D90048097B /* PBXTextBookmark */ = 0A76B97A106F73D90048097B /* PBXTextBookmark */;
> 119 };
> 120 sourceControlManager = 0ACEBDF0106E7A3E007FCDBD /* Source Control */;
> 121 userBuildSettings = {
> 122 };
> 123 };
> 124 08FB7796FE84155DC02AAC07 /* CRDB.m */ = {
> 125 uiCtxt = {
> 126 sepNavIntBoundsRect = "{{0, 0}, {439, 806}}";
> 127 sepNavSelRange = "{1550, 0}";
> 128 sepNavVisRange = "{1299, 282}";
> 129 };
> 130 };
> 131 0A76B5BC106E949F0048097B /* PBXTextBookmark */ = {
> 132 isa = PBXTextBookmark;
> 133 fRef = 0A76B5BD106E949F0048097B /* stdarg.h */;
> 134 name = "stdarg.h: 105";
> 135 rLen = 32;
> 136 rLoc = 3650;
> 137 rType = 0;
> 138 vrLen = 1432;
> 139 vrLoc = 2801;
> 140 };
> 141 0A76B5BD106E949F0048097B /* stdarg.h */ = {
> 142 isa = PBXFileReference;
> 143 lastKnownFileType = sourcecode.c.h;
> 144 name = stdarg.h;
> 145 path = "/Developer/SDKs/MacOSX10.6.sdk/usr/lib/gcc/i686-apple-darwin10/4.2.1/include/stdarg.h";
> 146 sourceTree = "<absolute>";
> 147 };
> 148 0A76B658106EA6530048097B /* PBXTextBookmark */ = {
> 149 isa = PBXTextBookmark;
> 150 fRef = 32A70AAB03705E1F00C91783 /* CRDB_Prefix.pch */;
> 151 name = "CRDB_Prefix.pch: 1";
> 152 rLen = 0;
> 153 rLoc = 0;
> 154 rType = 0;
> 155 vrLen = 152;
> 156 vrLoc = 0;
> 157 };
> 158 0A76B65D106EA6530048097B /* sqlite3.h */ = {
> 159 isa = PBXFileReference;
> 160 lastKnownFileType = sourcecode.c.h;
> 161 name = sqlite3.h;
> 162 path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/sqlite3.h;
> 163 sourceTree = "<absolute>";
> 164 };
> 165 0A76B660106EA6530048097B /* PBXTextBookmark */ = {
> 166 isa = PBXTextBookmark;
> 167 fRef = 0A76B661106EA6530048097B /* NSPathUtilities.h */;
> 168 name = "NSPathUtilities.h: 34";
> 169 rLen = 51;
> 170 rLoc = 992;
> 171 rType = 0;
> 172 vrLen = 1387;
> 173 vrLoc = 0;
> 174 };
> 175 0A76B661106EA6530048097B /* NSPathUtilities.h */ = {
> 176 isa = PBXFileReference;
> 177 lastKnownFileType = sourcecode.c.h;
> 178 name = NSPathUtilities.h;
> 179 path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSPathUtilities.h;
> 180 sourceTree = "<absolute>";
> 181 };
> 182 0A76B742106EAFBF0048097B /* PBXTextBookmark */ = {
> 183 isa = PBXTextBookmark;
> 184 fRef = 0A76B743106EAFBF0048097B /* EGODatabase.m */;
> 185 name = "EGODatabase.m: 242";
> 186 rLen = 4;
> 187 rLoc = 6592;
> 188 rType = 0;
> 189 vrLen = 1117;
> 190 vrLoc = 6127;
> 191 };
> 192 0A76B743106EAFBF0048097B /* EGODatabase.m */ = {
> 193 isa = PBXFileReference;
> 194 lastKnownFileType = sourcecode.c.objc;
> 195 name = EGODatabase.m;
> 196 path = /Users/dmitry/Projects/egodatabase/EGODatabase.m;
> 197 sourceTree = "<absolute>";
> 198 };
> 199 0A76B745106EAFBF0048097B /* PBXTextBookmark */ = {
> 200 isa = PBXTextBookmark;
> 201 fRef = 0A76B746106EAFBF0048097B /* queue.h */;
> 202 name = "queue.h: 334";
> 203 rLen = 54;
> 204 rLoc = 10530;
> 205 rType = 0;
> 206 vrLen = 1625;
> 207 vrLoc = 9723;
> 208 };
> 209 0A76B746106EAFBF0048097B /* queue.h */ = {
> 210 isa = PBXFileReference;
> 211 lastKnownFileType = sourcecode.c.h;
> 212 name = queue.h;
> 213 path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/dispatch/queue.h;
> 214 sourceTree = "<absolute>";
> 215 };
> 216 0A76B7D6106EC13E0048097B /* PBXTextBookmark */ = {
> 217 isa = PBXTextBookmark;
> 218 fRef = 0A76B7D7106EC13E0048097B /* NSObjCRuntime.h */;
> 219 name = "NSObjCRuntime.h: 218";
> 220 rLen = 34;
> 221 rLoc = 7437;
> 222 rType = 0;
> 223 vrLen = 1168;
> 224 vrLoc = 6804;
> 225 };
> 226 0A76B7D7106EC13E0048097B /* NSObjCRuntime.h */ = {
> 227 isa = PBXFileReference;
> 228 lastKnownFileType = sourcecode.c.h;
> 229 name = NSObjCRuntime.h;
> 230 path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObjCRuntime.h;
> 231 sourceTree = "<absolute>";
> 232 };
> 233 0A76B912106EE11E0048097B /* PBXTextBookmark */ = {
> 234 isa = PBXTextBookmark;
> 235 fRef = 0A76B65D106EA6530048097B /* sqlite3.h */;
> 236 name = "sqlite3.h: 1209";
> 237 rLen = 51;
> 238 rLoc = 55138;
> 239 rType = 0;
> 240 vrLen = 2202;
> 241 vrLoc = 52987;
> 242 };
> 243 0A76B950106F68230048097B /* LICENSE */ = {
> 244 uiCtxt = {
> 245 sepNavIntBoundsRect = "{{0, 0}, {714, 633}}";
> 246 sepNavSelRange = "{64, 0}";
> 247 sepNavVisRange = "{0, 1153}";
> 248 };
> 249 };
> 250 0A76B95C106F6F020048097B /* PBXTextBookmark */ = {
> 251 isa = PBXTextBookmark;
> 252 fRef = 0A76B950106F68230048097B /* LICENSE */;
> 253 name = "LICENSE: 4";
> 254 rLen = 0;
> 255 rLoc = 64;
> 256 rType = 0;
> 257 vrLen = 1153;
> 258 vrLoc = 0;
> 259 };
> 260 0A76B95D106F6F020048097B /* PBXTextBookmark */ = {
> 261 isa = PBXTextBookmark;
> 262 fRef = 0ACEBE03106E7AD8007FCDBD /* README */;
> 263 name = "README: 54";
> 264 rLen = 0;
> 265 rLoc = 1472;
> 266 rType = 0;
> 267 vrLen = 1412;
> 268 vrLoc = 0;
> 269 };
> 270 0A76B95E106F6F020048097B /* PBXTextBookmark */ = {
> 271 isa = PBXTextBookmark;
> 272 fRef = 0ACEBE02106E7AD8007FCDBD /* CRDatabaseRow.m */;
> 273 name = "CRDatabaseRow.m: 3";
> 274 rLen = 0;
> 275 rLoc = 29;
> 276 rType = 0;
> 277 vrLen = 1079;
> 278 vrLoc = 0;
> 279 };
> 280 0A76B95F106F6F020048097B /* PBXTextBookmark */ = {
> 281 isa = PBXTextBookmark;
> 282 fRef = 0ACEBE01106E7AD8007FCDBD /* CRDatabaseRow.h */;
> 283 name = "CRDatabaseRow.h: 5";
> 284 rLen = 0;
> 285 rLoc = 41;
> 286 rType = 0;
> 287 vrLen = 1172;
> 288 vrLoc = 0;
> 289 };
> 290 0A76B960106F6F020048097B /* PBXTextBookmark */ = {
> 291 isa = PBXTextBookmark;
> 292 fRef = 0ACEBE00106E7AD8007FCDBD /* CRDatabaseResult.m */;
> 293 name = "CRDatabaseResult.m: 5";
> 294 rLen = 0;
> 295 rLoc = 44;
> 296 rType = 0;
> 297 vrLen = 1001;
> 298 vrLoc = 0;
> 299 };
> 300 0A76B961106F6F020048097B /* PBXTextBookmark */ = {
> 301 isa = PBXTextBookmark;
> 302 fRef = 0ACEBDFF106E7AD8007FCDBD /* CRDatabaseResult.h */;
> 303 name = "CRDatabaseResult.h: 5";
> 304 rLen = 0;
> 305 rLoc = 44;
> 306 rType = 0;
> 307 vrLen = 650;
> 308 vrLoc = 0;
> 309 };
> 310 0A76B977106F73D90048097B /* PBXTextBookmark */ = {
> 311 isa = PBXTextBookmark;
> 312 fRef = 08FB7796FE84155DC02AAC07 /* CRDB.m */;
> 313 name = "CRDB.m: 46";
> 314 rLen = 0;
> 315 rLoc = 1325;
> 316 rType = 0;
> 317 vrLen = 1323;
> 318 vrLoc = 0;
> 319 };
> 320 0A76B978106F73D90048097B /* PBXTextBookmark */ = {
> 321 isa = PBXTextBookmark;
> 322 fRef = 0ACEBDFE106E7AD8007FCDBD /* CRDatabase.m */;
> 323 name = "CRDatabase.m: 3";
> 324 rLen = 0;
> 325 rLoc = 34;
> 326 rType = 0;
> 327 vrLen = 1483;
> 328 vrLoc = 2468;
> 329 };
> 330 0A76B979106F73D90048097B /* PBXTextBookmark */ = {
> 331 isa = PBXTextBookmark;
> 332 fRef = 0ACEBDFD106E7AD8007FCDBD /* CRDatabase.h */;
> 333 name = "CRDatabase.h: 41";
> 334 rLen = 0;
> 335 rLoc = 1007;
> 336 rType = 0;
> 337 vrLen = 1640;
> 338 vrLoc = 38;
> 339 };
> 340 0A76B97A106F73D90048097B /* PBXTextBookmark */ = {
> 341 isa = PBXTextBookmark;
> 342 fRef = 0ACEBE03106E7AD8007FCDBD /* README */;
> 343 name = "README: 8";
> 344 rLen = 0;
> 345 rLoc = 190;
> 346 rType = 0;
> 347 vrLen = 1411;
> 348 vrLoc = 0;
> 349 };
> 350 0ACEBDEC106E7A1F007FCDBD /* CRDB */ = {
> 351 isa = PBXExecutable;
> 352 activeArgIndices = (
> 353 );
> 354 argumentStrings = (
> 355 );
> 356 autoAttachOnCrash = 1;
> 357 breakpointsEnabled = 0;
> 358 configStateDict = {
> 359 };
> 360 customDataFormattersEnabled = 1;
> 361 dataTipCustomDataFormattersEnabled = 1;
> 362 dataTipShowTypeColumn = 1;
> 363 dataTipSortType = 0;
> 364 debuggerPlugin = GDBDebugging;
> 365 disassemblyDisplayState = 0;
> 366 dylibVariantSuffix = "";
> 367 enableDebugStr = 1;
> 368 environmentEntries = (
> 369 );
> 370 executableSystemSymbolLevel = 0;
> 371 executableUserSymbolLevel = 0;
> 372 libgmallocEnabled = 0;
> 373 name = CRDB;
> 374 savedGlobals = {
> 375 };
> 376 showTypeColumn = 0;
> 377 sourceDirectories = (
> 378 );
> 379 variableFormatDictionary = {
> 380 };
> 381 };
> 382 0ACEBDF0106E7A3E007FCDBD /* Source Control */ = {
> 383 isa = PBXSourceControlManager;
> 384 fallbackIsa = XCSourceControlManager;
> 385 isSCMEnabled = 0;
> 386 scmConfiguration = {
> 387 repositoryNamesForRoots = {
> 388 "" = "";
> 389 };
> 390 };
> 391 };
> 392 0ACEBDF1106E7A3E007FCDBD /* Code sense */ = {
> 393 isa = PBXCodeSenseManager;
> 394 indexTemplatePath = "";
> 395 };
> 396 0ACEBDFD106E7AD8007FCDBD /* CRDatabase.h */ = {
> 397 uiCtxt = {
> 398 sepNavIntBoundsRect = "{{0, 0}, {714, 819}}";
> 399 sepNavSelRange = "{1007, 0}";
> 400 sepNavVisRange = "{38, 1640}";
> 401 };
> 402 };
> 403 0ACEBDFE106E7AD8007FCDBD /* CRDatabase.m */ = {
> 404 uiCtxt = {
> 405 sepNavIntBoundsRect = "{{0, 0}, {714, 4966}}";
> 406 sepNavSelRange = "{34, 0}";
> 407 sepNavVisRange = "{2468, 1483}";
> 408 sepNavWindowFrame = "{{15, 83}, {791, 690}}";
> 409 };
> 410 };
> 411 0ACEBDFF106E7AD8007FCDBD /* CRDatabaseResult.h */ = {
> 412 uiCtxt = {
> 413 sepNavIntBoundsRect = "{{0, 0}, {714, 633}}";
> 414 sepNavSelRange = "{44, 0}";
> 415 sepNavVisRange = "{0, 650}";
> 416 };
> 417 };
> 418 0ACEBE00106E7AD8007FCDBD /* CRDatabaseResult.m */ = {
> 419 uiCtxt = {
> 420 sepNavIntBoundsRect = "{{0, 0}, {714, 715}}";
> 421 sepNavSelRange = "{44, 0}";
> 422 sepNavVisRange = "{0, 1001}";
> 423 };
> 424 };
> 425 0ACEBE01106E7AD8007FCDBD /* CRDatabaseRow.h */ = {
> 426 uiCtxt = {
> 427 sepNavIntBoundsRect = "{{0, 0}, {714, 633}}";
> 428 sepNavSelRange = "{41, 0}";
> 429 sepNavVisRange = "{0, 1172}";
> 430 };
> 431 };
> 432 0ACEBE02106E7AD8007FCDBD /* CRDatabaseRow.m */ = {
> 433 uiCtxt = {
> 434 sepNavIntBoundsRect = "{{0, 0}, {714, 1885}}";
> 435 sepNavSelRange = "{29, 0}";
> 436 sepNavVisRange = "{0, 1079}";
> 437 };
> 438 };
> 439 0ACEBE03106E7AD8007FCDBD /* README */ = {
> 440 uiCtxt = {
> 441 sepNavIntBoundsRect = "{{0, 0}, {714, 702}}";
> 442 sepNavSelRange = "{190, 0}";
> 443 sepNavVisRange = "{0, 1411}";
> 444 };
> 445 };
> 446 32A70AAB03705E1F00C91783 /* CRDB_Prefix.pch */ = {
> 447 uiCtxt = {
> 448 sepNavIntBoundsRect = "{{0, 0}, {714, 633}}";
> 449 sepNavSelRange = "{0, 0}";
> 450 sepNavVisRange = "{0, 152}";
> 451 };
> 452 };
> 453 8DD76F960486AA7600D96B5E /* CRDB */ = {
> 454 activeExec = 0;
> 455 executables = (
> 456 0ACEBDEC106E7A1F007FCDBD /* CRDB */,
> 457 );
> 458 };
> 459 }

Added CRDB.xcodeproj/project.pbxproj

Old () New (3fcb85846ebc30b6)
> 1 // !$*UTF8*$!
> 2 {
> 3 archiveVersion = 1;
> 4 classes = {
> 5 };
> 6 objectVersion = 45;
> 7 objects = {
> 8
> 9 /* Begin PBXBuildFile section */
> 10 0ACEBE04106E7AD9007FCDBD /* CRDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ACEBDFE106E7AD8007FCDBD /* CRDatabase.m */; };
> 11 0ACEBE05106E7AD9007FCDBD /* CRDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ACEBE00106E7AD8007FCDBD /* CRDatabaseResult.m */; };
> 12 0ACEBE06106E7AD9007FCDBD /* CRDatabaseRow.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ACEBE02106E7AD8007FCDBD /* CRDatabaseRow.m */; };
> 13 0ACEBF74106E7B66007FCDBD /* libsqlite3.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0ACEBF73106E7B66007FCDBD /* libsqlite3.0.dylib */; };
> 14 8DD76F9A0486AA7600D96B5E /* CRDB.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* CRDB.m */; settings = {ATTRIBUTES = (); }; };
> 15 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
> 16 /* End PBXBuildFile section */
> 17
> 18 /* Begin PBXCopyFilesBuildPhase section */
> 19 8DD76F9E0486AA7600D96B5E /* CopyFiles */ = {
> 20 isa = PBXCopyFilesBuildPhase;
> 21 buildActionMask = 8;
> 22 dstPath = /usr/share/man/man1/;
> 23 dstSubfolderSpec = 0;
> 24 files = (
> 25 );
> 26 runOnlyForDeploymentPostprocessing = 1;
> 27 };
> 28 /* End PBXCopyFilesBuildPhase section */
> 29
> 30 /* Begin PBXFileReference section */
> 31 08FB7796FE84155DC02AAC07 /* CRDB.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CRDB.m; sourceTree = "<group>"; };
> 32 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
> 33 0A76B950106F68230048097B /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
> 34 0ACEBDFD106E7AD8007FCDBD /* CRDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CRDatabase.h; sourceTree = "<group>"; };
> 35 0ACEBDFE106E7AD8007FCDBD /* CRDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CRDatabase.m; sourceTree = "<group>"; };
> 36 0ACEBDFF106E7AD8007FCDBD /* CRDatabaseResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CRDatabaseResult.h; sourceTree = "<group>"; };
> 37 0ACEBE00106E7AD8007FCDBD /* CRDatabaseResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CRDatabaseResult.m; sourceTree = "<group>"; };
> 38 0ACEBE01106E7AD8007FCDBD /* CRDatabaseRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CRDatabaseRow.h; sourceTree = "<group>"; };
> 39 0ACEBE02106E7AD8007FCDBD /* CRDatabaseRow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CRDatabaseRow.m; sourceTree = "<group>"; };
> 40 0ACEBE03106E7AD8007FCDBD /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
> 41 0ACEBF73106E7B66007FCDBD /* libsqlite3.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.0.dylib; path = /usr/lib/libsqlite3.0.dylib; sourceTree = "<absolute>"; };
> 42 32A70AAB03705E1F00C91783 /* CRDB_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CRDB_Prefix.pch; sourceTree = "<group>"; };
> 43 8DD76FA10486AA7600D96B5E /* CRDB */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = CRDB; sourceTree = BUILT_PRODUCTS_DIR; };
> 44 /* End PBXFileReference section */
> 45
> 46 /* Begin PBXFrameworksBuildPhase section */
> 47 8DD76F9B0486AA7600D96B5E /* Frameworks */ = {
> 48 isa = PBXFrameworksBuildPhase;
> 49 buildActionMask = 2147483647;
> 50 files = (
> 51 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */,
> 52 0ACEBF74106E7B66007FCDBD /* libsqlite3.0.dylib in Frameworks */,
> 53 );
> 54 runOnlyForDeploymentPostprocessing = 0;
> 55 };
> 56 /* End PBXFrameworksBuildPhase section */
> 57
> 58 /* Begin PBXGroup section */
> 59 08FB7794FE84155DC02AAC07 /* CRDB */ = {
> 60 isa = PBXGroup;
> 61 children = (
> 62 0ACEBDF5106E7ACA007FCDBD /* CRDatabase */,
> 63 08FB7795FE84155DC02AAC07 /* Test Source */,
> 64 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
> 65 1AB674ADFE9D54B511CA2CBB /* Products */,
> 66 );
> 67 name = CRDB;
> 68 sourceTree = "<group>";
> 69 };
> 70 08FB7795FE84155DC02AAC07 /* Test Source */ = {
> 71 isa = PBXGroup;
> 72 children = (
> 73 32A70AAB03705E1F00C91783 /* CRDB_Prefix.pch */,
> 74 08FB7796FE84155DC02AAC07 /* CRDB.m */,
> 75 );
> 76 name = "Test Source";
> 77 sourceTree = "<group>";
> 78 };
> 79 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
> 80 isa = PBXGroup;
> 81 children = (
> 82 08FB779EFE84155DC02AAC07 /* Foundation.framework */,
> 83 0ACEBF73106E7B66007FCDBD /* libsqlite3.0.dylib */,
> 84 );
> 85 name = "External Frameworks and Libraries";
> 86 sourceTree = "<group>";
> 87 };
> 88 0ACEBDF5106E7ACA007FCDBD /* CRDatabase */ = {
> 89 isa = PBXGroup;
> 90 children = (
> 91 0ACEBDFD106E7AD8007FCDBD /* CRDatabase.h */,
> 92 0ACEBDFE106E7AD8007FCDBD /* CRDatabase.m */,
> 93 0ACEBDFF106E7AD8007FCDBD /* CRDatabaseResult.h */,
> 94 0ACEBE00106E7AD8007FCDBD /* CRDatabaseResult.m */,
> 95 0ACEBE01106E7AD8007FCDBD /* CRDatabaseRow.h */,
> 96 0ACEBE02106E7AD8007FCDBD /* CRDatabaseRow.m */,
> 97 0ACEBE03106E7AD8007FCDBD /* README */,
> 98 0A76B950106F68230048097B /* LICENSE */,
> 99 );
> 100 name = CRDatabase;
> 101 sourceTree = "<group>";
> 102 };
> 103 1AB674ADFE9D54B511CA2CBB /* Products */ = {
> 104 isa = PBXGroup;
> 105 children = (
> 106 8DD76FA10486AA7600D96B5E /* CRDB */,
> 107 );
> 108 name = Products;
> 109 sourceTree = "<group>";
> 110 };
> 111 /* End PBXGroup section */
> 112
> 113 /* Begin PBXNativeTarget section */
> 114 8DD76F960486AA7600D96B5E /* CRDB */ = {
> 115 isa = PBXNativeTarget;
> 116 buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "CRDB" */;
> 117 buildPhases = (
> 118 8DD76F990486AA7600D96B5E /* Sources */,
> 119 8DD76F9B0486AA7600D96B5E /* Frameworks */,
> 120 8DD76F9E0486AA7600D96B5E /* CopyFiles */,
> 121 );
> 122 buildRules = (
> 123 );
> 124 dependencies = (
> 125 );
> 126 name = CRDB;
> 127 productInstallPath = "$(HOME)/bin";
> 128 productName = CRDB;
> 129 productReference = 8DD76FA10486AA7600D96B5E /* CRDB */;
> 130 productType = "com.apple.product-type.tool";
> 131 };
> 132 /* End PBXNativeTarget section */
> 133
> 134 /* Begin PBXProject section */
> 135 08FB7793FE84155DC02AAC07 /* Project object */ = {
> 136 isa = PBXProject;
> 137 buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "CRDB" */;
> 138 compatibilityVersion = "Xcode 3.1";
> 139 hasScannedForEncodings = 1;
> 140 mainGroup = 08FB7794FE84155DC02AAC07 /* CRDB */;
> 141 projectDirPath = "";
> 142 projectRoot = "";
> 143 targets = (
> 144 8DD76F960486AA7600D96B5E /* CRDB */,
> 145 );
> 146 };
> 147 /* End PBXProject section */
> 148
> 149 /* Begin PBXSourcesBuildPhase section */
> 150 8DD76F990486AA7600D96B5E /* Sources */ = {
> 151 isa = PBXSourcesBuildPhase;
> 152 buildActionMask = 2147483647;
> 153 files = (
> 154 8DD76F9A0486AA7600D96B5E /* CRDB.m in Sources */,
> 155 0ACEBE04106E7AD9007FCDBD /* CRDatabase.m in Sources */,
> 156 0ACEBE05106E7AD9007FCDBD /* CRDatabaseResult.m in Sources */,
> 157 0ACEBE06106E7AD9007FCDBD /* CRDatabaseRow.m in Sources */,
> 158 );
> 159 runOnlyForDeploymentPostprocessing = 0;
> 160 };
> 161 /* End PBXSourcesBuildPhase section */
> 162
> 163 /* Begin XCBuildConfiguration section */
> 164 1DEB927508733DD40010E9CD /* Debug */ = {
> 165 isa = XCBuildConfiguration;
> 166 buildSettings = {
> 167 ALWAYS_SEARCH_USER_PATHS = NO;
> 168 COPY_PHASE_STRIP = NO;
> 169 GCC_DYNAMIC_NO_PIC = NO;
> 170 GCC_ENABLE_FIX_AND_CONTINUE = YES;
> 171 GCC_ENABLE_OBJC_GC = required;
> 172 GCC_MODEL_TUNING = G5;
> 173 GCC_OPTIMIZATION_LEVEL = 0;
> 174 GCC_PRECOMPILE_PREFIX_HEADER = YES;
> 175 GCC_PREFIX_HEADER = CRDB_Prefix.pch;
> 176 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
> 177 INSTALL_PATH = /usr/local/bin;
> 178 PRODUCT_NAME = CRDB;
> 179 };
> 180 name = Debug;
> 181 };
> 182 1DEB927608733DD40010E9CD /* Release */ = {
> 183 isa = XCBuildConfiguration;
> 184 buildSettings = {
> 185 ALWAYS_SEARCH_USER_PATHS = NO;
> 186 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
> 187 GCC_ENABLE_OBJC_GC = required;
> 188 GCC_MODEL_TUNING = G5;
> 189 GCC_PRECOMPILE_PREFIX_HEADER = YES;
> 190 GCC_PREFIX_HEADER = CRDB_Prefix.pch;
> 191 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
> 192 INSTALL_PATH = /usr/local/bin;
> 193 PRODUCT_NAME = CRDB;
> 194 };
> 195 name = Release;
> 196 };
> 197 1DEB927908733DD40010E9CD /* Debug */ = {
> 198 isa = XCBuildConfiguration;
> 199 buildSettings = {
> 200 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
> 201 GCC_C_LANGUAGE_STANDARD = gnu99;
> 202 GCC_OPTIMIZATION_LEVEL = 0;
> 203 GCC_WARN_ABOUT_RETURN_TYPE = YES;
> 204 GCC_WARN_UNUSED_VARIABLE = YES;
> 205 ONLY_ACTIVE_ARCH = YES;
> 206 PREBINDING = NO;
> 207 SDKROOT = macosx10.6;
> 208 };
> 209 name = Debug;
> 210 };
> 211 1DEB927A08733DD40010E9CD /* Release */ = {
> 212 isa = XCBuildConfiguration;
> 213 buildSettings = {
> 214 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
> 215 GCC_C_LANGUAGE_STANDARD = gnu99;
> 216 GCC_WARN_ABOUT_RETURN_TYPE = YES;
> 217 GCC_WARN_UNUSED_VARIABLE = YES;
> 218 PREBINDING = NO;
> 219 SDKROOT = macosx10.6;
> 220 };
> 221 name = Release;
> 222 };
> 223 /* End XCBuildConfiguration section */
> 224
> 225 /* Begin XCConfigurationList section */
> 226 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "CRDB" */ = {
> 227 isa = XCConfigurationList;
> 228 buildConfigurations = (
> 229 1DEB927508733DD40010E9CD /* Debug */,
> 230 1DEB927608733DD40010E9CD /* Release */,
> 231 );
> 232 defaultConfigurationIsVisible = 0;
> 233 defaultConfigurationName = Release;
> 234 };
> 235 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "CRDB" */ = {
> 236 isa = XCConfigurationList;
> 237 buildConfigurations = (
> 238 1DEB927908733DD40010E9CD /* Debug */,
> 239 1DEB927A08733DD40010E9CD /* Release */,
> 240 );
> 241 defaultConfigurationIsVisible = 0;
> 242 defaultConfigurationName = Release;
> 243 };
> 244 /* End XCConfigurationList section */
> 245 };
> 246 rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
> 247 }

Added CRDB_Prefix.pch

Old () New (385dc992f3ff1f0f)
> 1 //
> 2 // Prefix header for all source files of the 'EgoDB' target in the 'EgoDB' project.
> 3 //
> 4
> 5 #ifdef __OBJC__
> 6 #import <Foundation/Foundation.h>
> 7 #endif

Added CRDatabase.h

Old () New (936dc300eac94487)
> 1 //
> 2 // CRDatabase.h
> 3 // CRDatabase
> 4 //
> 5
> 6 #import <Foundation/Foundation.h>
> 7 #import "CRDatabaseResult.h"
> 8 #import "CRDatabaseRow.h"
> 9 #import <sqlite3.h>
> 10
> 11
> 12 @interface CRDatabase : NSObject {
> 13 @protected
> 14 NSURL* databaseURL_;
> 15 dispatch_queue_t lockQueue_;
> 16
> 17 @private
> 18 sqlite3* db_;
> 19 BOOL isOpened_;
> 20 NSInteger busyRetryAttempts_;
> 21 }
> 22 // Number of times to retry execution if database is busy.
> 23 // Retries every 20 usec, so 50 attempts last about 1 second.
> 24 // (default is 50)
> 25 @property(assign) NSInteger busyRetryAttempts;
> 26
> 27 + (id)databaseWithURL:(NSURL *)url;
> 28 - (id)initWithURL:(NSURL *)url;
> 29
> 30 // Open database (Not thread-safe)
> 31 // If database has been opened, it will not open again, just returns YES.
> 32 - (BOOL)open;
> 33
> 34 // Close database (Not thread-safe)
> 35 - (void)close;
> 36
> 37 // Execute insert and return last row id (or NSNotFound if update failed)
> 38 - (NSInteger)executeInsert:(NSString *)sql withArguments:(NSArray *)args;
> 39 // Same thing, but accepts only one argument for clarity
> 40 - (NSInteger)executeInsert:(NSString *)sql withArgument:(id)arg;
> 41
> 42 // Execute update and return YES (success) or NO (failure)
> 43 // You do deletes also with this method.
> 44 - (BOOL)executeUpdate:(NSString *)sql withArguments:(NSArray *)args;
> 45 // Same thing, but accepts only one argument for clarity
> 46 - (BOOL)executeUpdate:(NSString *)sql withArgument:(id)arg;
> 47
> 48 // Execute query and return |CRDatabaseResult|.
> 49 // DO NOT use executeQuery for inserts or updates -- use appropriate methods
> 50 // for this, because they disable sudden termination
> 51 - (CRDatabaseResult *)executeQuery:(NSString*)sql withArguments:(NSArray *)args;
> 52 // Same thing, but accepts only one argument for clarity
> 53 - (CRDatabaseResult *)executeQuery:(NSString *)sql withArgument:(id)arg;
> 54
> 55 // Asyncroniously execute query and call block with results.
> 56 // Block is running under the global queue, so to make updates to GUI
> 57 // enclose relevant code in block with main queue dispatch.
> 58 - (void)asyncExecuteQuery:(NSString *)sql
> 59 withArguments:(NSArray *)args
> 60 doWithResult:(void (^)(CRDatabaseResult *))block;
> 61
> 62 // Do not use the following methods with threads!
> 63 // CRDatabaseResult contains these values if you need them
> 64 - (NSString*)lastErrorMessage;
> 65 - (BOOL)hadError;
> 66 - (int)lastErrorCode;
> 67
> 68 @end

Added CRDatabase.m

Old () New (04019fa0f46eeaec)
> 1 //
> 2 // CRDatabase.m
> 3 // CRDatabase
> 4 //
> 5
> 6 #import "CRDatabase.h"
> 7
> 8 @interface CRDatabase ()
> 9 @property(assign) BOOL isOpened;
> 10 - (sqlite3_stmt *)prepareStatementForSQL:(NSString *)sql;
> 11 - (BOOL)bindStatement:(sqlite3_stmt*)statement toArguments:(NSArray *)args;
> 12 - (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt *)pStmt;
> 13 @end
> 14
> 15 @implementation CRDatabase
> 16
> 17 @synthesize isOpened = isOpened_;
> 18 @synthesize busyRetryAttempts = busyRetryAttempts_;
> 19
> 20 + (id)databaseWithURL:(NSURL*)anURL
> 21 {
> 22 return [[[[self class] alloc] initWithURL:anURL] autorelease];
> 23 }
> 24
> 25
> 26 - (id)initWithURL:(NSURL *)anURL
> 27 {
> 28 if (![super init])
> 29 return nil;
> 30 databaseURL_ = [anURL retain];
> 31 lockQueue_ = dispatch_queue_create("com.codingrobots.CRDatabase.lockQueue", NULL);
> 32 busyRetryAttempts_ = 50;
> 33 return self;
> 34 }
> 35
> 36 - (BOOL)open
> 37 {
> 38 if (self.isOpened)
> 39 return YES;
> 40
> 41 int err = sqlite3_open([[databaseURL_ path] fileSystemRepresentation], &db_);
> 42
> 43 if(err != SQLITE_OK) {
> 44 NSLog(@"Error opening DB \"%@\": %d", [NSURL description], err);
> 45 return NO;
> 46 }
> 47
> 48 self.isOpened = YES;
> 49 return YES;
> 50 }
> 51
> 52 - (void)close
> 53 {
> 54 if (!db_)
> 55 return;
> 56 sqlite3_close(db_);
> 57 self.isOpened = NO;
> 58 }
> 59
> 60 - (NSInteger)executeInsert:(NSString *)sql withArgument:(id)arg
> 61 {
> 62 return [self executeInsert:sql withArguments:[NSArray arrayWithObject:arg]];
> 63 }
> 64
> 65 - (NSInteger)executeInsert:(NSString *)sql withArguments:(NSArray *)args
> 66 {
> 67 __block NSInteger result = NSNotFound;
> 68 [[NSProcessInfo processInfo] disableSuddenTermination];
> 69 dispatch_sync(lockQueue_, ^{
> 70
> 71 if (![self open])
> 72 return;
> 73
> 74 sqlite3_stmt *statement = [self prepareStatementForSQL:sql];
> 75 if (!statement)
> 76 return;
> 77
> 78 if (![self bindStatement:statement toArguments:args]) {
> 79 sqlite3_finalize(statement);
> 80 return;
> 81 }
> 82
> 83 int returnCode = sqlite3_step(statement);
> 84
> 85 if (SQLITE_BUSY == returnCode) {
> 86 NSLog(@"[EGODatabase] Query Failed, Database Busy:\n%@\n\n", sql);
> 87 }
> 88 else if (SQLITE_DONE == returnCode || SQLITE_ROW == returnCode) {
> 89 // nothing?
> 90 }
> 91 else if (SQLITE_ERROR == returnCode) {
> 92 NSLog(@"sqlite3_step Failed: (%d: %s) SQLITE_ERROR\n%@\n\n",
> 93 returnCode, [self lastErrorMessage], sql);
> 94 }
> 95 else if (SQLITE_MISUSE == returnCode) {
> 96 NSLog(@"sqlite3_step Failed: (%d: %s) SQLITE_MISUSE\n%@\n\n",
> 97 returnCode, [self lastErrorMessage], sql);
> 98 }
> 99 else {
> 100 NSLog(@"sqlite3_step Failed: (%d: %s) UNKNOWN_ERROR\n%@\n\n",
> 101 returnCode, [self lastErrorMessage], sql);
> 102 }
> 103 returnCode = sqlite3_finalize(statement);
> 104
> 105 if (returnCode == SQLITE_OK)
> 106 result = sqlite3_last_insert_rowid(db_);
> 107 });
> 108 [[NSProcessInfo processInfo] enableSuddenTermination];
> 109 return result;
> 110 }
> 111
> 112 - (BOOL)executeUpdate:(NSString *)sql withArgument:(id)arg
> 113 {
> 114 return [self executeUpdate:sql withArguments:[NSArray arrayWithObject:arg]];
> 115 }
> 116
> 117 - (BOOL)executeUpdate:(NSString *)sql withArguments:(NSArray *)args
> 118 {
> 119 __block BOOL result = NO;
> 120 [[NSProcessInfo processInfo] disableSuddenTermination];
> 121 dispatch_sync(lockQueue_, ^{
> 122
> 123 if (![self open])
> 124 return;
> 125
> 126 sqlite3_stmt *statement = [self prepareStatementForSQL:sql];
> 127 if (!statement)
> 128 return;
> 129
> 130 if (![self bindStatement:statement toArguments:args]) {
> 131 sqlite3_finalize(statement);
> 132 return;
> 133 }
> 134
> 135 int returnCode = sqlite3_step(statement);
> 136
> 137 if (SQLITE_BUSY == returnCode) {
> 138 NSLog(@"[EGODatabase] Query Failed, Database Busy:\n%@\n\n", sql);
> 139 } else if (SQLITE_DONE == returnCode || SQLITE_ROW == returnCode) {
> 140 // nothing?
> 141 } else if (SQLITE_ERROR == returnCode) {
> 142 NSLog(@"sqlite3_step Failed: (%d: %s) SQLITE_ERROR\n%@\n\n", returnCode, [self lastErrorMessage], sql);
> 143 } else if (SQLITE_MISUSE == returnCode) {
> 144 NSLog(@"sqlite3_step Failed: (%d: %s) SQLITE_MISUSE\n%@\n\n", returnCode, [self lastErrorMessage], sql);
> 145 } else {
> 146 NSLog(@"sqlite3_step Failed: (%d: %s) UNKNOWN_ERROR\n%@\n\n", returnCode, [self lastErrorMessage], sql);
> 147 }
> 148
> 149 returnCode = sqlite3_finalize(statement);
> 150 result = (returnCode == SQLITE_OK);
> 151 });
> 152 [[NSProcessInfo processInfo] enableSuddenTermination];
> 153 return result;
> 154 }
> 155
> 156
> 157
> 158 - (void)asyncExecuteQuery:(NSString *)sql withArguments:(NSArray *)args
> 159 doWithResult:(void (^)(CRDatabaseResult *))block;
> 160 {
> 161 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
> 162 block([self executeQuery:sql withArguments:args]);
> 163 });
> 164 }
> 165
> 166 - (CRDatabaseResult *)executeQuery:(NSString *)sql withArgument:(id)arg
> 167 {
> 168 return [self executeQuery:sql withArguments:[NSArray arrayWithObject:arg]];
> 169 }
> 170
> 171
> 172 - (CRDatabaseResult *)executeQuery:(NSString*)sql withArguments:(NSArray *)args;
> 173 {
> 174 __block CRDatabaseResult *result = [[[CRDatabaseResult alloc] init] autorelease];
> 175 dispatch_sync(lockQueue_, ^{
> 176
> 177 if (![self open])
> 178 return;
> 179
> 180 sqlite3_stmt *statement = [self prepareStatementForSQL:sql];
> 181 result.errorCode = [self lastErrorCode];
> 182 result.errorMessage = [self lastErrorMessage];
> 183 if (!statement)
> 184 return;
> 185
> 186 if (![self bindStatement:statement toArguments:args]) {
> 187 sqlite3_finalize(statement);
> 188 return;
> 189 }
> 190
> 191 // Retrieve columns
> 192 int columnCount = sqlite3_column_count(statement);
> 193 int col;
> 194
> 195 for (col = 0; col < columnCount; col++) {
> 196 const char *columnName = sqlite3_column_name(statement, col);
> 197 if (columnName != NULL)
> 198 [result.columnNames addObject:[NSString stringWithUTF8String:columnName]];
> 199 else
> 200 [result.columnNames addObject:[NSString stringWithFormat:@"%d", col]];
> 201
> 202 const char *declType = sqlite3_column_decltype(statement, col);
> 203 if(declType != NULL)
> 204 [result.columnTypes addObject:[NSString stringWithUTF8String:declType]];
> 205 else
> 206 [result.columnTypes addObject:@""];
> 207 }
> 208
> 209 while (sqlite3_step(statement) == SQLITE_ROW) {
> 210 CRDatabaseRow *row = [[CRDatabaseRow alloc] initWithDatabaseResult:result];
> 211 for (col = 0; col < columnCount; col++) {
> 212
> 213 switch (sqlite3_column_type(statement, col)) {
> 214
> 215 case SQLITE_INTEGER: {
> 216 NSInteger value = sqlite3_column_int64(statement, col);
> 217 [row.columnData addObject:[NSNumber numberWithInteger:value]];
> 218 break;
> 219 }
> 220
> 221 case SQLITE_FLOAT: {
> 222 double value = sqlite3_column_double(statement, col);
> 223 [row.columnData addObject:[NSNumber numberWithDouble:value]];
> 224 break;
> 225 }
> 226
> 227 case SQLITE_TEXT: {
> 228 int dataSize = sqlite3_column_bytes(statement, col);
> 229 const unsigned char *value = sqlite3_column_text(statement, col);
> 230 if (dataSize > 0 && value != NULL)
> 231 [row.columnData addObject:[NSString stringWithUTF8String:(char *)value]];
> 232 else
> 233 [row.columnData addObject:@""];
> 234 break;
> 235 }
> 236
> 237 case SQLITE_NULL: {
> 238 [row.columnData addObject:[NSNull null]];
> 239 break;
> 240 }
> 241
> 242 case SQLITE_BLOB: // same as default
> 243 default: {
> 244 int dataSize = sqlite3_column_bytes(statement, col);
> 245 const void *blob = sqlite3_column_blob(statement, col);
> 246 if (dataSize > 0 && blob != NULL) {
> 247 NSMutableData *data = [NSMutableData dataWithBytes:blob length:dataSize];
> 248 [row.columnData addObject:data];
> 249 }
> 250 else
> 251 [row.columnData addObject:[NSNull null]];
> 252 }
> 253 } // switch
> 254 }
> 255 [result addRow:row];
> 256 [row release];
> 257 }
> 258 sqlite3_finalize(statement);
> 259 }); // dispatch_sync block
> 260 return result;
> 261 }
> 262
> 263 - (NSString *)lastErrorMessage
> 264 {
> 265 if ([self hadError])
> 266 return [NSString stringWithUTF8String:sqlite3_errmsg(db_)];
> 267 else
> 268 return nil;
> 269 }
> 270
> 271 - (BOOL)hadError
> 272 {
> 273 return [self lastErrorCode] != SQLITE_OK;
> 274 }
> 275
> 276 - (int)lastErrorCode
> 277 {
> 278 return sqlite3_errcode(db_);
> 279 }
> 280
> 281
> 282 - (sqlite3_stmt *)prepareStatementForSQL:(NSString *)sql
> 283 {
> 284 int returnCode = 0;
> 285 sqlite3_stmt *statement = NULL;
> 286 NSInteger numberOfRetries = 0;
> 287 BOOL retry;
> 288
> 289 do {
> 290 retry = NO;
> 291
> 292 returnCode = sqlite3_prepare_v2(db_, [sql UTF8String], -1, &statement, 0);
> 293
> 294 if (SQLITE_BUSY == returnCode) {
> 295 retry = YES;
> 296 usleep(20);
> 297 if (busyRetryAttempts_ && (numberOfRetries++ > busyRetryAttempts_)) {
> 298 NSLog(@"%s:%d Database busy (%@)", __FUNCTION__, __LINE__,
> 299 [databaseURL_ description]);
> 300 sqlite3_finalize(statement);
> 301 return NULL;
> 302 }
> 303 }
> 304 else if (SQLITE_OK != returnCode) {
> 305 NSLog(@"%s:%d Query Failed, Error: %d \"%@\"\n%@\n\n", __FUNCTION__,
> 306 __LINE__, [self lastErrorCode], [self lastErrorMessage], sql);
> 307 sqlite3_finalize(statement);
> 308 return NULL;
> 309 }
> 310 } while (retry);
> 311 return statement;
> 312 }
> 313
> 314 - (BOOL)bindStatement:(sqlite3_stmt *)statement toArguments:(NSArray *)args
> 315 {
> 316 if (!args && sqlite3_bind_parameter_count(statement) == 0)
> 317 return YES;
> 318
> 319 if (!args || [args count] != sqlite3_bind_parameter_count(statement)) {
> 320 NSLog(@"'?' count doesn't correspond to arguments count in \"%s\"",
> 321 sqlite3_sql(statement));
> 322 return NO;
> 323 }
> 324
> 325 int index = 0;
> 326 for (id obj in args) {
> 327 [self bindObject:obj toColumn:++index inStatement:statement];
> 328 }
> 329 return YES;
> 330 }
> 331
> 332 - (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt
> 333 {
> 334 if ((!obj) || ((NSNull *)obj == [NSNull null])) {
> 335 sqlite3_bind_null(pStmt, idx);
> 336 } else if ([obj isKindOfClass:[NSData class]]) {
> 337 sqlite3_bind_blob(pStmt, idx, [obj bytes], [obj length], SQLITE_STATIC);
> 338 } else if ([obj isKindOfClass:[NSDate class]]) {
> 339 sqlite3_bind_double(pStmt, idx, [obj timeIntervalSince1970]);
> 340 } else if ([obj isKindOfClass:[NSNumber class]]) {
> 341 if (strcmp([obj objCType], @encode(BOOL)) == 0) {
> 342 sqlite3_bind_int(pStmt, idx, ([obj boolValue] ? 1 : 0));
> 343 } else if (strcmp([obj objCType], @encode(int)) == 0) {
> 344 sqlite3_bind_int64(pStmt, idx, [obj longValue]);
> 345 } else if (strcmp([obj objCType], @encode(long)) == 0) {
> 346 sqlite3_bind_int64(pStmt, idx, [obj longValue]);
> 347 } else if (strcmp([obj objCType], @encode(float)) == 0) {
> 348 sqlite3_bind_double(pStmt, idx, [obj floatValue]);
> 349 } else if (strcmp([obj objCType], @encode(double)) == 0) {
> 350 sqlite3_bind_double(pStmt, idx, [obj doubleValue]);
> 351 } else {
> 352 sqlite3_bind_text(pStmt, idx, [[obj description] UTF8String], -1, SQLITE_STATIC);
> 353 }
> 354 } else {
> 355 sqlite3_bind_text(pStmt, idx, [[obj description] UTF8String], -1, SQLITE_STATIC);
> 356 }
> 357 }
> 358
> 359 - (void)dealloc
> 360 {
> 361 [self close];
> 362 [databaseURL_ release];
> 363 dispatch_release(lockQueue_);
> 364 [super dealloc];
> 365 }
> 366
> 367 - (void)finalize
> 368 {
> 369 [self close];
> 370 dispatch_release(lockQueue_);
> 371 [super finalize];
> 372 }
> 373
> 374 @end

Added CRDatabaseResult.h

Old () New (16924eaf988424c7)
> 1 //
> 2 // CRDatabaseResult.h
> 3 // CRDatabase
> 4 //
> 5
> 6 #import <Foundation/Foundation.h>
> 7
> 8 @class CRDatabaseRow;
> 9
> 10 @interface CRDatabaseResult : NSObject<NSFastEnumeration> {
> 11 @private
> 12 int errorCode_;
> 13 NSString *errorMessage_;
> 14 NSMutableArray *columnNames_;
> 15 NSMutableArray *columnTypes_;
> 16 NSMutableArray *rows_;
> 17 }
> 18 @property(nonatomic,assign) int errorCode;
> 19 @property(nonatomic,copy) NSString *errorMessage;
> 20 @property(readonly) NSMutableArray *columnNames;
> 21 @property(readonly) NSMutableArray *columnTypes;
> 22 @property(readonly) NSMutableArray *rows;
> 23
> 24 - (void)addRow:(CRDatabaseRow *)row;
> 25 - (CRDatabaseRow *)rowAtIndex:(NSUInteger)index;
> 26 - (NSUInteger)count;
> 27
> 28 @end

Added CRDatabaseResult.m

Old () New (783bc0602ab9c6bf)
> 1 //
> 2 // CRDatabaseResult.m
> 3 // CRDatabase
> 4 //
> 5
> 6 #import "CRDatabaseResult.h"
> 7
> 8
> 9 @implementation CRDatabaseResult
> 10 @synthesize errorCode = errorCode_;
> 11 @synthesize errorMessage = errorMessage_;
> 12 @synthesize columnNames = columnNames_;
> 13 @synthesize columnTypes = columnTypes_;
> 14 @synthesize rows = rows_;
> 15
> 16 - (id)init {
> 17 if (![super init])
> 18 return nil;
> 19 errorCode_ = 0;
> 20 columnNames_ = [[NSMutableArray alloc] init];
> 21 columnTypes_ = [[NSMutableArray alloc] init];
> 22 rows_ = [[NSMutableArray alloc] init];
> 23 return self;
> 24 }
> 25
> 26 - (void)addRow:(CRDatabaseRow *)row
> 27 {
> 28 [rows_ addObject:row];
> 29 }
> 30
> 31 - (CRDatabaseRow *)rowAtIndex:(NSUInteger)index
> 32 {
> 33 return [rows_ objectAtIndex:index];
> 34 }
> 35
> 36 - (NSUInteger)count
> 37 {
> 38 return rows_.count;
> 39 }
> 40
> 41 - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
> 42 objects:(id *)stackbuf count:(NSUInteger)len
> 43 {
> 44 return [rows_ countByEnumeratingWithState:state objects:stackbuf count:len];
> 45 }
> 46
> 47 - (void)dealloc
> 48 {
> 49 [rows_ release];
> 50 [errorMessage_ release];
> 51 [columnNames_ release];
> 52 [columnTypes_ release];
> 53 [super dealloc];
> 54 }
> 55
> 56 @end

Added CRDatabaseRow.h

Old () New (e65d576916cd70b0)
> 1 //
> 2 // CRDatabaseRow.h
> 3 // CRDatabase
> 4 //
> 5
> 6 #import <Foundation/Foundation.h>
> 7
> 8 @class CRDatabaseResult;
> 9
> 10 @interface CRDatabaseRow : NSObject {
> 11 @private
> 12 NSMutableArray* columnData_;
> 13 CRDatabaseResult* result;
> 14 }
> 15 @property(readonly) NSMutableArray* columnData;
> 16
> 17 - (id)initWithDatabaseResult:(CRDatabaseResult *)aResult;
> 18
> 19 - (NSInteger)integerForColumn:(NSString *)columnName;
> 20 - (NSInteger)integerForColumnIndex:(NSUInteger)columnIndex;
> 21
> 22 - (int)intForColumn:(NSString *)columnName;
> 23 - (int)intForColumnIndex:(NSUInteger)columnIdx;
> 24
> 25 - (long long)longLongForColumn:(NSString *)columnName;
> 26 - (long long)longLongForColumnIndex:(NSUInteger)columnIdx;
> 27
> 28 - (BOOL)boolForColumn:(NSString *)columnName;
> 29 - (BOOL)boolForColumnIndex:(NSUInteger)columnIdx;
> 30
> 31 - (double)doubleForColumn:(NSString *)columnName;
> 32 - (double)doubleForColumnIndex:(NSUInteger)columnIdx;
> 33
> 34 - (NSString *)stringForColumn:(NSString *)columnName;
> 35 - (NSString *)stringForColumnIndex:(NSUInteger)columnIdx;
> 36
> 37 - (NSDate *)dateForColumn:(NSString *)columnName;
> 38 - (NSDate *)dateForColumnIndex:(NSUInteger)columnIdx;
> 39
> 40 - (NSData *)dataForColumn:(NSString *)columnName;
> 41 - (NSData *)dataForColumnIndex:(NSUInteger)columnIndex;
> 42
> 43 @end

Added CRDatabaseRow.m

Old () New (0284ae895f69a0a1)
> 1 //
> 2 // CRDatabaseRow.m
> 3 // CRDatabase
> 4 //
> 5
> 6 #import "CRDatabaseRow.h"
> 7 #import "CRDatabaseResult.h"
> 8
> 9
> 10 @implementation CRDatabaseRow
> 11 @synthesize columnData = columnData_;
> 12
> 13 - (id)initWithDatabaseResult:(CRDatabaseResult *)aResult
> 14 {
> 15 if (![super init])
> 16 return nil;
> 17 columnData_ = [[NSMutableArray alloc] init];
> 18 result = aResult;
> 19 return self;
> 20 }
> 21
> 22 - (NSUInteger)columnIndexForName:(NSString *)columnName
> 23 {
> 24 return [result.columnNames indexOfObject:columnName];
> 25 }
> 26
> 27 - (NSInteger)integerForColumn:(NSString *)columnName
> 28 {
> 29 NSUInteger columnIndex = [self columnIndexForName:columnName];
> 30 if (columnIndex == NSNotFound)
> 31 return 0;
> 32 return [self integerForColumnIndex:columnIndex];
> 33 }
> 34
> 35 - (NSInteger)integerForColumnIndex:(NSUInteger)columnIndex
> 36 {
> 37 id value = [columnData_ objectAtIndex:columnIndex];
> 38 if (![value isKindOfClass:[NSNumber class]]) // convert other values
> 39 return [[self stringForColumnIndex:columnIndex] integerValue];
> 40 return [value integerValue];
> 41 }
> 42
> 43 - (int)intForColumn:(NSString*)columnName
> 44 {
> 45 NSUInteger columnIndex = [self columnIndexForName:columnName];
> 46 if (columnIndex == NSNotFound)
> 47 return 0;
> 48 return [self intForColumnIndex:columnIndex];
> 49 }
> 50
> 51
> 52 - (int)intForColumnIndex:(NSUInteger)columnIndex
> 53 {
> 54 id value = [columnData_ objectAtIndex:columnIndex];
> 55 if (![value isKindOfClass:[NSNumber class]]) // convert other values
> 56 return [[self stringForColumnIndex:columnIndex] intValue];
> 57 return [value intValue];
> 58 }
> 59
> 60 - (long long)longLongForColumn:(NSString*)columnName
> 61 {
> 62 NSUInteger columnIndex = [self columnIndexForName:columnName];
> 63 if (columnIndex == NSNotFound)
> 64 return 0;
> 65 return [self longLongForColumnIndex:columnIndex];
> 66 }
> 67
> 68 - (long long)longLongForColumnIndex:(NSUInteger)columnIndex
> 69 {
> 70 id value = [columnData_ objectAtIndex:columnIndex];
> 71 if (![value isKindOfClass:[NSNumber class]]) // convert other values
> 72 return [[self stringForColumnIndex:columnIndex] longLongValue];
> 73 return [value longLongValue];
> 74 }
> 75
> 76 - (BOOL)boolForColumn:(NSString *)columnName
> 77 {
> 78 return ([self intForColumn:columnName] != 0);
> 79 }
> 80
> 81 - (BOOL)boolForColumnIndex:(NSUInteger)columnIndex
> 82 {
> 83 return ([self intForColumnIndex:columnIndex] != 0);
> 84 }
> 85
> 86 - (double)doubleForColumn:(NSString*)columnName
> 87 {
> 88 NSUInteger columnIndex = [self columnIndexForName:columnName];
> 89 if (columnIndex == NSNotFound)
> 90 return 0;
> 91 return [self doubleForColumnIndex:columnIndex];
> 92 }
> 93
> 94 - (double)doubleForColumnIndex:(NSUInteger)columnIndex
> 95 {
> 96 id value = [columnData_ objectAtIndex:columnIndex];
> 97 if (![value isKindOfClass:[NSNumber class]]) // convert other values
> 98 return [[self stringForColumnIndex:columnIndex] doubleValue];
> 99 return [value doubleValue];
> 100 }
> 101
> 102 - (NSString *)stringForColumn:(NSString *)columnName
> 103 {
> 104 NSUInteger columnIndex = [self columnIndexForName:columnName];
> 105 if (columnIndex == NSNotFound)
> 106 return @"";
> 107 return [self stringForColumnIndex:columnIndex];
> 108 }
> 109
> 110 - (NSString *)stringForColumnIndex:(NSUInteger)columnIndex
> 111 {
> 112 id value = [columnData_ objectAtIndex:columnIndex];
> 113 if ([value isKindOfClass:[NSString class]]) // convert other values
> 114 return value;
> 115 else if ([value isKindOfClass:[NSData class]])
> 116 return [[NSString alloc] initWithData:[columnData_ objectAtIndex:columnIndex]
> 117 encoding:NSUTF8StringEncoding];
> 118 else if ([value isKindOfClass:[NSNumber class]])
> 119 return [value stringValue];
> 120 else
> 121 return nil; // unknown type of value, shouldn't happen
> 122 }
> 123
> 124 - (NSDate *)dateForColumn:(NSString*)columnName
> 125 {
> 126 NSUInteger columnIndex = [self columnIndexForName:columnName];
> 127 if (columnIndex == NSNotFound)
> 128 return nil;
> 129 return [NSDate dateWithTimeIntervalSince1970:[self doubleForColumnIndex:columnIndex]];
> 130 }
> 131
> 132 - (NSDate *)dateForColumnIndex:(NSUInteger)columnIndex
> 133 {
> 134 return [NSDate dateWithTimeIntervalSince1970:[self doubleForColumnIndex:columnIndex]];
> 135 }
> 136
> 137 - (NSData *)dataForColumn:(NSString *)columnName;
> 138 {
> 139 NSUInteger columnIndex = [self columnIndexForName:columnName];
> 140 if (columnIndex == NSNotFound)
> 141 return nil;
> 142 return [self dataForColumnIndex:columnIndex];
> 143 }
> 144
> 145 - (NSData *)dataForColumnIndex:(NSUInteger)columnIndex;
> 146 {
> 147 return [columnData_ objectAtIndex:columnIndex];
> 148 }
> 149
> 150 - (void)dealloc
> 151 {
> 152 // [result release];
> 153 [columnData_ release];
> 154 [super dealloc];
> 155 }
> 156
> 157 @end

Added LICENSE

Old () New (61e95e0a840e02e1)
> 1 MIT License
> 2
> 3 CRDatabase
> 4 Copyright (c) 2009 Coding Robots, Dmitry Chestnykh
> 5
> 6 EGODatabase
> 7 Copyright (c) 2009 enormego
> 8
> 9 FMDB
> 10 Copyright (c) 2008 Flying Meat Inc.
> 11
> 12 Permission is hereby granted, free of charge, to any person obtaining a copy
> 13 of this software and associated documentation files (the "Software"), to deal
> 14 in the Software without restriction, including without limitation the rights
> 15 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> 16 copies of the Software, and to permit persons to whom the Software is
> 17 furnished to do so, subject to the following conditions:
> 18
> 19 The above copyright notice and this permission notice shall be included in
> 20 all copies or substantial portions of the Software.
> 21
> 22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> 23 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> 24 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> 25 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> 26 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> 27 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> 28 THE SOFTWARE.

Added README

Old () New (365ecccba3128f11)
> 1 -*- markdown -*-
> 2
> 3 CRDatabase
> 4 ----------
> 5
> 6 CRDatabase is an experimental fork of EGODatabase, a thread-safe
> 7 Objective-C SQLite wrapper (which uses some code from FMDB), where
> 8 thread-safety is implemented via custom GCD queues. It also has some
> 9 asyncronious methods that use C blocks.
> 10
> 11 This project is **experimental**, as I'm learning GCD and blocks.
> 12 Do not use it in production. If, however, you find it ready for
> 13 production use, please let me know - <dmitry@codingrobots.com> :)
> 14
> 15 You can find this project at <http://bitbucket.org/dchest/crdatabase>
> 16
> 17
> 18 Links to original projects:
> 19
> 20 * EGODatabase: <http://github.com/enormego/egodatabase>
> 21 * FMDB: <http://flycode.googlecode.com/svn/trunk/fmdb/>
> 22
> 23 ## Requirements
> 24
> 25 Mac OS X 10.6
> 26
> 27 ## Classes
> 28
> 29 ### CRDatabase
> 30
> 31 This is the class where you'll open your SQLite database file and execute queries through.
> 32 See CRDatabase.h for methods.
> 33
> 34 ### CRDatabaseResult
> 35
> 36 This is the class returned by CRDatabase when running "executeQuery:".
> 37 It supports fast enumeration, and contains properties for the column names,
> 38 column types, rows, and errors if there are any.
> 39
> 40 ### CRDatabaseRow
> 41
> 42 Every object that CRDatabaseResult contains, is an CRDatabaseRow.
> 43 This is your raw data for each row. You'll be able to return specific types
> 44 based on different methods such as intForColumn: or dateForColumn:.
> 45 Check out the header files for a complete listing.
> 46
> 47 ## Example
> 48 See CRDB.m
> 49
> 50 ## Note
> 51
> 52 Remember to link libsqlite3.dylib to your project!
> 53