Index: src/SL3Connection.h ================================================================== --- src/SL3Connection.h +++ src/SL3Connection.h @@ -36,50 +36,49 @@ #endif sqlite3 *_conn; } /** - * @brief Creates a new connection to the database at the specified path. - * - * @param path The path to the database - * @return A new database connection - * @throw SL3OpenFailedException The database could not be opened - */ -+ (instancetype)connectionWithPath: (OFString *)path; - -/** - * @brief Creates a new connection to the database at the specified path. - * - * @param path The path to the database - * @param flags The flags to open the database with - * @return A new database connection - * @throw SL3OpenFailedException The database could not be opened - */ -+ (instancetype)connectionWithPath: (OFString *)path - flags: (int)flags; - -/** - * @brief Initializes an already allocated connection to connect to the - * database at the specified path. - * - * @param path The path to the database - * @return An initialized connection to the specified database - * @throw SL3OpenFailedException The database could not be opened - */ -- (instancetype)initWithPath: (OFString *)path; - -/** - * @brief Initializes an already allocated connection to connect to the - * database at the specified path. - * - * @param path The path to the database - * @param flags The flags to open the database with - * @return An initialized connection to the specified database - * @throw SL3OpenFailedException The database could not be opened - */ -- (instancetype)initWithPath: (OFString *)path - flags: (int)flags OF_DESIGNATED_INITIALIZER; + * @brief Creates a new connection to the database at the specified IRI. + * + * @param IRI The IRI to the database + * @return A new database connection + * @throw SL3OpenFailedException The database could not be opened + */ ++ (instancetype)connectionWithIRI: (OFIRI *)IRI; + +/** + * @brief Creates a new connection to the database at the specified IRI. + * + * @param IRI The IRI to the database + * @param flags The flags to open the database with + * @return A new database connection + * @throw SL3OpenFailedException The database could not be opened + */ ++ (instancetype)connectionWithIRI: (OFIRI *)IRI flags: (int)flags; + +/** + * @brief Initializes an already allocated connection to connect to the + * database at the specified IRI. + * + * @param IRI The IRI to the database + * @return An initialized connection to the specified database + * @throw SL3OpenFailedException The database could not be opened + */ +- (instancetype)initWithIRI: (OFIRI *)IRI; + +/** + * @brief Initializes an already allocated connection to connect to the + * database at the specified IRI. + * + * @param IRI The IRI to the database + * @param flags The flags to open the database with + * @return An initialized connection to the specified database + * @throw SL3OpenFailedException The database could not be opened + */ +- (instancetype)initWithIRI: (OFIRI *)IRI + flags: (int)flags OF_DESIGNATED_INITIALIZER; /** * @brief Prepares the specified SQL statement for the connection and returns * it. * Index: src/SL3Connection.m ================================================================== --- src/SL3Connection.m +++ src/SL3Connection.m @@ -22,41 +22,39 @@ #import "SL3ExecuteStatementFailedException.h" #import "SL3OpenFailedException.h" @implementation SL3Connection -+ (instancetype)connectionWithPath: (OFString *)path -{ - return [[[self alloc] initWithPath: path] autorelease]; -} - -+ (instancetype)connectionWithPath: (OFString *)path - flags: (int)flags -{ - return [[[self alloc] initWithPath: path - flags: flags] autorelease]; -} - -- (instancetype)initWithPath: (OFString *)path -{ - return [self initWithPath: path - flags: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE]; -} - -- (instancetype)initWithPath: (OFString *)path - flags: (int)flags ++ (instancetype)connectionWithIRI: (OFIRI *)IRI +{ + return [[[self alloc] initWithIRI: IRI] autorelease]; +} + ++ (instancetype)connectionWithIRI: (OFIRI *)IRI flags: (int)flags +{ + return [[[self alloc] initWithIRI: IRI flags: flags] autorelease]; +} + +- (instancetype)initWithIRI: (OFIRI *)IRI +{ + return [self initWithIRI: IRI + flags: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE]; +} + +- (instancetype)initWithIRI: (OFIRI *)IRI flags: (int)flags { self = [super init]; @try { - int code = sqlite3_open_v2(path.UTF8String, &_conn, flags, + int code = sqlite3_open_v2( + IRI.fileSystemRepresentation.UTF8String, &_conn, flags, NULL); if (code != SQLITE_OK) - @throw [SL3OpenFailedException exceptionWithPath: path - flags: flags - errorCode: code]; + @throw [SL3OpenFailedException exceptionWithIRI: IRI + flags: flags + errorCode: code]; } @catch (id e) { [self release]; @throw e; } Index: src/exceptions/SL3OpenFailedException.h ================================================================== --- src/exceptions/SL3OpenFailedException.h +++ src/exceptions/SL3OpenFailedException.h @@ -26,18 +26,18 @@ * * @brief An exception indicating that a database could not be opened. */ @interface SL3OpenFailedException: SL3Exception { - OFString *_path; + OFIRI *_IRI; int _flags; } /** - * @brief The path of the database that could not be opened. + * @brief The IRI of the database that could not be opened. */ -@property (readonly, nonatomic) OFString *path; +@property (readonly, nonatomic) OFIRI *IRI; /** * @brief The flags with which the database could not be opened. */ @property (readonly, nonatomic) int flags; @@ -46,31 +46,31 @@ errorCode: (int)errorCode OF_UNAVAILABLE; /** * @brief Creates a new open failed exception. * - * @param path The path of the database that could not be opened + * @param IRI The IRI of the database that could not be opened * @param flags The flags with which the database could not be opened * @param errorCode The SQLite3 error code * @return A new, autoreleased open failed exception */ -+ (instancetype)exceptionWithPath: (OFString *)path - flags: (int)flags - errorCode: (int)errorCode; ++ (instancetype)exceptionWithIRI: (OFIRI *)IFI + flags: (int)flags + errorCode: (int)errorCode; - (instancetype)initWithConnection: (nullable SL3Connection *)connection errorCode: (int)errorCode OF_UNAVAILABLE; /** * @brief Initializes an already allocated open failed exception. * - * @param path The path of the database that could not be opened + * @param IRI The IRI of the database that could not be opened * @param flags The flags with which the database could not be opened * @param errorCode The SQLite3 error code * @return An initialized open failed exception */ -- (instancetype)initWithPath: (OFString *)path - flags: (int)flags - errorCode: (int)errorCode OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithIRI: (OFIRI *)IRI + flags: (int)flags + errorCode: (int)errorCode OF_DESIGNATED_INITIALIZER; @end OF_ASSUME_NONNULL_END Index: src/exceptions/SL3OpenFailedException.m ================================================================== --- src/exceptions/SL3OpenFailedException.m +++ src/exceptions/SL3OpenFailedException.m @@ -17,42 +17,42 @@ */ #import "SL3OpenFailedException.h" @implementation SL3OpenFailedException -@synthesize path = _path, flags = _flags; +@synthesize IRI = _IRI, flags = _flags; + (instancetype)exceptionWithConnection: (SL3Connection *)connection errorCode: (int)errorCode { OF_UNRECOGNIZED_SELECTOR } -+ (instancetype)exceptionWithPath: (OFString *)path - flags: (int)flags - errorCode: (int)errorCode ++ (instancetype)exceptionWithIRI: (OFIRI *)IRI + flags: (int)flags + errorCode: (int)errorCode { - return [[[self alloc] initWithPath: path - flags: flags - errorCode: errorCode] autorelease]; + return [[[self alloc] initWithIRI: IRI + flags: flags + errorCode: errorCode] autorelease]; } - (instancetype)initWithConnection: (SL3Connection *)connection errorCode: (int)errorCode { OF_INVALID_INIT_METHOD } -- (instancetype)initWithPath: (OFString *)path - flags: (int)flags - errorCode: (int)errorCode +- (instancetype)initWithIRI: (OFIRI *)IRI + flags: (int)flags + errorCode: (int)errorCode { self = [super initWithConnection: nil errorCode: errorCode]; @try { - _path = [path copy]; + _IRI = [IRI copy]; _flags = flags; } @catch (id e) { [self release]; @throw e; } @@ -60,10 +60,10 @@ return self; } - (void)dealloc { - [_path release]; + [_IRI release]; [super dealloc]; } @end Index: tests/Tests.m ================================================================== --- tests/Tests.m +++ tests/Tests.m @@ -26,18 +26,19 @@ OF_APPLICATION_DELEGATE(Tests) @implementation Tests - (void)applicationDidFinishLaunching: (OFNotification *)notification { + OFIRI *IRI = [OFIRI fileIRIWithPath: @"tests.db"]; OFFileManager *fileManager = [OFFileManager defaultManager]; SL3Connection *conn; SL3PreparedStatement *stmt; - if ([fileManager fileExistsAtPath: @"tests.db"]) - [fileManager removeItemAtPath: @"tests.db"]; + if ([fileManager fileExistsAtIRI: IRI]) + [fileManager removeItemAtIRI: IRI]; - conn = [SL3Connection connectionWithPath: @"tests.db"]; + conn = [SL3Connection connectionWithIRI: IRI]; [conn executeStatement: @"CREATE TABLE test (a INT, b TEXT, c BLOB)"]; stmt = [conn prepareStatement: @"INSERT INTO test (a, b, c) VALUES ($a, $b, $c)"];