Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - novi/mysql-swift: A type safe MySQL client for Swift
A type safe MySQL client for Swift. Contribute to novi/mysql-swift development by creating an account on GitHub.
Visit SiteGitHub - novi/mysql-swift: A type safe MySQL client for Swift
A type safe MySQL client for Swift. Contribute to novi/mysql-swift development by creating an account on GitHub.
Powered by 0x5a.live 💗
mysql-swift
This library is obsolete and not maintained. Use MySQLNIO instead.
MySQL client library for Swift. This is inspired by Node.js' mysql.
- Based on libmysqlclient
- Raw SQL query
- Simple query formatting and escaping (same as Node's)
- Mapping queried results to
Codable
structs or classes
Note: No asynchronous I/O support currently. It depends libmysqlclient.
// Declare a model
struct User: Codable, QueryParameter {
let id: Int
let userName: String
let age: Int?
let status: Status
let createdAt: Date
enum Status: String, Codable {
case created = "created"
case verified = "verified"
}
private enum CodingKeys: String, CodingKey {
case id
case userName = "user_name"
case age
case status = "status"
case createdAt = "created_at"
}
}
// Selecting
let nameParam = "some one"
let ids: [QueryParameter] = [1, 2, 3, 4, 5, 6]
let optionalInt: Int? = nil
let rows: [User] = try conn.query("SELECT id,user_name,status,status,created_at FROM `user` WHERE (age > ? OR age is ?) OR name = ? OR id IN (?)", [50, optionalInt, nameParam, QueryArray(ids)] ])
// Inserting
let age: Int? = 26
let user = User(id: 0, userName: "novi", age: age, status: .created, createdAt: Date())
let status = try conn.query("INSERT INTO `user` SET ?", [user]) as QueryStatus
let newId = status.insertedId
// Updating
let tableName = "user"
let defaultAge = 30
try conn.query("UPDATE ?? SET age = ? WHERE age is NULL;", [tableName, defaultAge])
Requirements
- Swift 5.0 or later
- MariaDB or MySQL Connector/C (libmysqlclient) 2.2.3 or later
macOS
Install pkg-config .pc
file in cmysql or cmysql-mariadb.
# cmysql
$ brew tap novi/tap
$ brew install novi/tap/cmysql
# cmysql-mariadb
$ brew tap novi/tap
$ brew install novi/tap/cmysqlmariadb
Ubuntu
- Install
libmariadbclient
- Follow Setting up MariaDB Repositories and set up your repository.
$ sudo apt-get install libmariadbclient-dev
Installation
Swift Package Manager
- Add
mysql-swift
toPackage.swift
of your project.
// swift-tools-version:5.2
import PackageDescription
let package = Package(
...,
dependencies: [
.package(url: "https://github.com/novi/mysql-swift.git", .upToNextMajor(from: "0.9.0"))
],
targets: [
.target(
name: "YourAppOrLibrary",
dependencies: [
// add a dependency
.product(name: "MySQL", package: "mysql-swift")
]
)
]
)
Usage
Connection & Querying
- Create a pool with options (hostname, port, password,...).
- Use
ConnectionPool.execute()
. It automatically get and release a connection.
let option = Option(host: "your.mysql.host"...) // Define and create your option type
let pool = ConnectionPool(option: option) // Create a pool with the option
let rows: [User] = try pool.execute { conn in
// The connection `conn` is held in this block
try conn.query("SELECT * FROM users;") // And it returns result to outside execute block
}
Transaction
let wholeStaus: QueryStatus = try pool.transaction { conn in
let status = try conn.query("INSERT INTO users SET ?;", [user]) as QueryStatus // Create a user
let userId = status.insertedId // the user's id
try conn.query("UPDATE info SET some_value = ? WHERE some_key = 'latest_user_id' ", [userId]) // Store user's id that we have created the above
}
wholeStaus.affectedRows == 1 // true
License
MIT
Swift Resources
are all listed below.
GitHub - davdroman/TextBuilder: Like a SwiftUI ViewBuilder, but for Text
resource
~/github.com
resource
GitHub - tadejr/ResizingTokenField: A token field implementation for iOS
resource
~/github.com
resource
GitHub - canalesb93/MantleModal: A draggable modal for iOS Applications.
resource
~/github.com
resource
GitHub - okmr-d/DOFavoriteButton: Cute Animated Button written in Swift.
resource
~/github.com
resource
GitHub - gmertk/GMStepper: A stepper with a sliding label in the middle.
resource
~/github.com
resource
GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.
resource
~/github.com
resource
GitHub - kciter/HorizontalDial: A horizontal scroll dial like Instagram.
resource
~/github.com
resource
GitHub - HeroTransitions/Hero: Elegant transition library for iOS & tvOS
resource
~/github.com
resource
GitHub - Brightify/Cuckoo: Boilerplate-free mocking framework for Swift!
resource
~/github.com
resource
GitHub - maxep/MXParallaxHeader: Simple parallax header for UIScrollView
resource
~/github.com
resource
GitHub - Viktoo/Insert3D: The fastest 🚀 way to embed a 3D model in Swift
resource
~/github.com
resource
GitHub - richardtop/CalendarKit: 📅 Calendar for Apple platforms in Swift
resource
~/github.com
resource
GitHub - exyte/PopupView: Toasts and popups library written with SwiftUI
resource
~/github.com
resource
GitHub - gkaimakas/SwiftValidators: String (and more) validation for iOS
resource
~/github.com
resource
GitHub - alexliubj/EZAnchor: An easier and faster way to code Autolayout
resource
~/github.com
resource
GitHub - Brightify/Reactant: Reactant is a reactive architecture for iOS
resource
~/github.com
resource
GitHub - Nero5023/CSVParser: A swift package for read and write CSV file
resource
~/github.com
resource
GitHub - andybest/linenoise-swift: A pure Swift replacement for readline
resource
~/github.com
resource
GitHub - s2mr/xc: Open your xcode project with Xcode of specific version
resource
~/github.com
resource
GitHub - marmelroy/Zip: Swift framework for zipping and unzipping files.
resource
~/github.com
resource
GitHub - yonaskolb/Beak: A command line interface for your Swift scripts
resource
~/github.com
resource
GitHub - Polidea/RxBluetoothKit: iOS & OSX Bluetooth library for RxSwift
resource
~/github.com
resource
Made with ❤️
to provide different kinds of informations and resources.