Latest 2.1.3
Homepage https://github.com/oleghnidets/OHMySQL
License MIT
Platforms ios 8.0, osx 10.9, requires ARC
Frameworks Foundation
Authors

OHMySQL supports Objective-C and Swift, iOS and macOS. You can connect to your remote MySQL database using OHMySQL API. It allows you doing queries in easy and object-oriented way. Common queries such as SELECT, INSERT, DELETE, JOIN are wrapped by Objective-C code and you don’t need to dive into MySQL C API.

Requirements

  • iOS 8.0+ / macOS 10.9+
  • Xcode 8.1+

How To Get Started

Installation

You can use CocoaPods. Add the following line to your Podfile:

pod 'OHMySQL'

If you are using Swift do not forget to add use_frameworks! at the top of Podfile. Also it is recommended to add platform platform :osx, '10.10'.

Migration Guide

Usage

At the first you need to connect to the database.

Objective-C version:

OHMySQLUser *user = [[OHMySQLUser alloc] initWithUserName:@"root"
                         password:@"root"
                           serverName:@"localhost"
                           dbName:@"sample"
                             port:3306
                           socket:@"/Applications/MAMP/tmp/mysql/mysql.sock"];
OHMySQLStoreCoordinator *coordinator = [[OHMySQLStoreCoordinator alloc] initWithUser:user];
[coordinator connect];

Swift version:

let user = OHMySQLUser(userName: "root", password: "root", serverName: "localhost", dbName: "ohmysql", port: 3306, socket: "/Applications/MAMP/tmp/mysql/mysql.sock")
let coordinator = OHMySQLStoreCoordinator(user: user!)
coordinator.encoding = .UTF8MB4
coordinator.connect()

To end a connection:

[coordinator disconnect];
coordinator.disconnect()

Query Context

To execute a query you have to create the context:

OHMySQLQueryContext *queryContext = [OHMySQLQueryContext new];
queryContext.storeCoordinator = coordinator;
let context = OHMySQLQueryContext()
context.storeCoordinator = coordinator

You will use this context to execute queries or manipulate the objects.

SELECT

The response contains array of dictionaries (like JSON).

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory SELECT:@"tasks" condition:nil];
NSError *error = nil;
NSArray *tasks = [queryContext executeQueryRequestAndFetchResult:query error:&error];
let query = OHMySQLQueryRequestFactory.select("tasks", condition: nil)
let response = try? OHMySQLContainer.shared().mainQueryContext?.executeQueryRequestAndFetchResult(query)

You will get a response like this:

[{ @"id": @1, @"name": @"Task name", @"description": @"Task description", @"status": [NSNull null] }]

INSERT

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory INSERT:@"tasks" set:@{ @"name": @"Something", @"desctiption": @"new task" }];
NSError error;
[queryContext executeQueryRequest:query error:&error];
let query = OHMySQLQueryRequestFactory.insert("tasks", set: ["name": "Something", "desctiption": "new task"])
try? mainQueryContext?.execute(query)

UPDATE

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory UPDATE:@"tasks" set:@{ @"name": @"Something", @"description": @"new task update" } condition:@"id=5"];
NSError error;
[queryContext executeQueryRequest:query error:&error];
let query = OHMySQLQueryRequestFactory.update("tasks", set: ["name": "Something"], condition: "id=7")
try? mainQueryContext?.execute(query)

DELETE

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory DELETE:@"tasks" condition:@"id=10"];
NSError error;
[queryContext executeQueryRequest:query error:&error];
let query = OHMySQLQueryRequestFactory.delete("tasks", condition: "id=10")
try? mainQueryContext?.execute(query)

JOINs

The response contains array of dictionaries (like JSON). You can do 4 types of joins (INNER, RIGHT, LEFT, FULL) using string constants.

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory JOINType:OHJoinInner                                                   fromTable:@"tasks"
                              columnNames:@[@"id", @"name", @"description"]
                               joinOn:@{ @"subtasks":@"tasks.id=subtasks.parentId" }];
NSArray *results = [queryContext executeQueryRequestAndFetchResult:query error:nil];
let query = OHMySQLQueryRequestFactory.joinType(OHJoinInner, fromTable: "tasks", columnNames: ["id", "name", "description"], joinOn: ["subtasks": "tasks.id=subtasks.parentId"])
let result = try? mainQueryContext?.executeQueryRequestAndFetchResult(query)

Object Mapping

You have to implement the protocol OHMappingProtocol for your models. Insertion looks like the following (in this example the NSManagedObject instance).
The library has only a primary logic for mapping, so I would recommend you writing a mapping logic by yourself. If you are using Swift you cannot use fundamental number types (Int, Double), only NSNumber (due to run-time).

[queryContext insertObject:task];
BOOL result = [queryContext save:nil];
mainQueryContext?.insertObject(task)
try? mainQueryContext?.save()

You can update/delete the objects easily.

// You don't need to specify primary index here.  It'll be update for you.
OHTask *task = [OHTask new];
task.name = @"Code cleanup";
task.taskDescription = @"Delete unused classes and files";
task.status = 0;
[queryContext updateObject:task];
...
task.name = @"Something";
task.status = 1;
[task update];
...
[queryContext deleteObject:task];
BOOL result = [queryContext save:nil];
let task = Task()
task.name = "sample"
mainQueryContext?.updateObject(task)
mainQueryContext?.deleteObject(task)

try? mainQueryContext?.save()

Communication

  • If you found a bug, have suggestions or need help, please, open an issue.
  • If you need help, write me [email protected]
  • If you want to contribute, submit a pull request.
  • If you want to donate I would be thankful ;]

paypal

License

The MIT License (MIT)

Latest podspec

{
    "name": "OHMySQL",
    "version": "2.1.3",
    "summary": "A simple Objective-C wrapper for MySQL C API.",
    "description": "You can connect to your remote MySQL database using OHMySQL API. It allows you doing queries in easy and object-oriented way. Common queries such as SELECT, INSERT, DELETE, JOIN are wrapped by Objective-C code and you don't need to dive into MySQL C API.",
    "homepage": "https://github.com/oleghnidets/OHMySQL",
    "license": "MIT",
    "authors": {
        "Oleg Hnidets": "[email protected]"
    },
    "source": {
        "git": "https://github.com/oleghnidets/OHMySQL.git",
        "tag": "2.1.3"
    },
    "platforms": {
        "ios": "8.0",
        "osx": "10.9"
    },
    "requires_arc": true,
    "source_files": [
        "OHMySQL/**/*.{h,m}",
        "OHMySQL/lib/include/**/**/*.{h}"
    ],
    "private_header_files": "OHMySQL/lib/include/**/**/*.{h}",
    "frameworks": "Foundation",
    "ios": {
        "vendored_libraries": "OHMySQL/lib/ios/libmysqlclient.a"
    },
    "osx": {
        "vendored_libraries": "OHMySQL/lib/mac/libmysqlclient.a"
    },
    "libraries": "c++"
}

Pin It on Pinterest

Share This