|
@@ -68,6 +68,7 @@ - (instancetype)initWithPath:(NSString *)path {
|
|
|
_logsErrors = YES;
|
|
_logsErrors = YES;
|
|
|
_crashOnErrors = NO;
|
|
_crashOnErrors = NO;
|
|
|
_maxBusyRetryTimeInterval = 2;
|
|
_maxBusyRetryTimeInterval = 2;
|
|
|
|
|
+ _isOpen = NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return self;
|
|
return self;
|
|
@@ -160,10 +161,18 @@ - (const char*)sqlitePath {
|
|
|
#pragma mark Open and close database
|
|
#pragma mark Open and close database
|
|
|
|
|
|
|
|
- (BOOL)open {
|
|
- (BOOL)open {
|
|
|
- if (_db) {
|
|
|
|
|
|
|
+ if (_isOpen) {
|
|
|
return YES;
|
|
return YES;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // if we previously tried to open and it failed, make sure to close it before we try again
|
|
|
|
|
+
|
|
|
|
|
+ if (_db) {
|
|
|
|
|
+ [self close];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // now open database
|
|
|
|
|
+
|
|
|
int err = sqlite3_open([self sqlitePath], (sqlite3**)&_db );
|
|
int err = sqlite3_open([self sqlitePath], (sqlite3**)&_db );
|
|
|
if(err != SQLITE_OK) {
|
|
if(err != SQLITE_OK) {
|
|
|
NSLog(@"error opening!: %d", err);
|
|
NSLog(@"error opening!: %d", err);
|
|
@@ -175,6 +184,7 @@ - (BOOL)open {
|
|
|
[self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval];
|
|
[self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ _isOpen = YES;
|
|
|
|
|
|
|
|
return YES;
|
|
return YES;
|
|
|
}
|
|
}
|
|
@@ -182,12 +192,21 @@ - (BOOL)open {
|
|
|
- (BOOL)openWithFlags:(int)flags {
|
|
- (BOOL)openWithFlags:(int)flags {
|
|
|
return [self openWithFlags:flags vfs:nil];
|
|
return [self openWithFlags:flags vfs:nil];
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
- (BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName {
|
|
- (BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName {
|
|
|
#if SQLITE_VERSION_NUMBER >= 3005000
|
|
#if SQLITE_VERSION_NUMBER >= 3005000
|
|
|
- if (_db) {
|
|
|
|
|
|
|
+ if (_isOpen) {
|
|
|
return YES;
|
|
return YES;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // if we previously tried to open and it failed, make sure to close it before we try again
|
|
|
|
|
+
|
|
|
|
|
+ if (_db) {
|
|
|
|
|
+ [self close];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // now open database
|
|
|
|
|
+
|
|
|
int err = sqlite3_open_v2([self sqlitePath], (sqlite3**)&_db, flags, [vfsName UTF8String]);
|
|
int err = sqlite3_open_v2([self sqlitePath], (sqlite3**)&_db, flags, [vfsName UTF8String]);
|
|
|
if(err != SQLITE_OK) {
|
|
if(err != SQLITE_OK) {
|
|
|
NSLog(@"error opening!: %d", err);
|
|
NSLog(@"error opening!: %d", err);
|
|
@@ -199,6 +218,8 @@ - (BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName {
|
|
|
[self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval];
|
|
[self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ _isOpen = YES;
|
|
|
|
|
+
|
|
|
return YES;
|
|
return YES;
|
|
|
#else
|
|
#else
|
|
|
NSLog(@"openWithFlags requires SQLite 3.5");
|
|
NSLog(@"openWithFlags requires SQLite 3.5");
|
|
@@ -206,7 +227,6 @@ - (BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName {
|
|
|
#endif
|
|
#endif
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- (BOOL)close {
|
|
- (BOOL)close {
|
|
|
|
|
|
|
|
[self clearCachedStatements];
|
|
[self clearCachedStatements];
|
|
@@ -466,7 +486,7 @@ - (NSString *)stringFromDate:(NSDate *)date {
|
|
|
|
|
|
|
|
- (BOOL)goodConnection {
|
|
- (BOOL)goodConnection {
|
|
|
|
|
|
|
|
- if (!_db) {
|
|
|
|
|
|
|
+ if (!_isOpen) {
|
|
|
return NO;
|
|
return NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -493,7 +513,7 @@ - (void)warnInUse {
|
|
|
|
|
|
|
|
- (BOOL)databaseExists {
|
|
- (BOOL)databaseExists {
|
|
|
|
|
|
|
|
- if (!_db) {
|
|
|
|
|
|
|
+ if (!_isOpen) {
|
|
|
|
|
|
|
|
NSLog(@"The FMDatabase %@ is not open.", self);
|
|
NSLog(@"The FMDatabase %@ is not open.", self);
|
|
|
|
|
|