Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vapor/mysql-kit
🐬 Pure Swift MySQL client built on non-blocking, event-driven sockets.
https://github.com/vapor/mysql-kit
mysql server-side-swift swift swift-linux vapor vapor-service
Last synced: about 2 months ago
JSON representation
🐬 Pure Swift MySQL client built on non-blocking, event-driven sockets.
- Host: GitHub
- URL: https://github.com/vapor/mysql-kit
- Owner: vapor
- License: mit
- Created: 2016-06-15T21:44:36.000Z (over 8 years ago)
- Default Branch: main
- Last Pushed: 2024-05-02T11:07:47.000Z (8 months ago)
- Last Synced: 2024-05-13T15:26:47.588Z (8 months ago)
- Topics: mysql, server-side-swift, swift, swift-linux, vapor, vapor-service
- Language: Swift
- Homepage:
- Size: 847 KB
- Stars: 220
- Watchers: 23
- Forks: 73
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
MySQLKit is an [SQLKit] driver for MySQL clients. It supports building and serializing MySQL-dialect SQL queries. MySQLKit uses [MySQLNIO] to connect and communicate with the database server asynchronously. [AsyncKit] is used to provide connection pooling.
[SQLKit]: https://github.com/vapor/sql-kit
[MySQLNIO]: https://github.com/vapor/mysql-nio
[AsyncKit]: https://github.com/vapor/async-kit### Usage
Use the SPM string to easily include the dependendency in your `Package.swift` file.
```swift
.package(url: "https://github.com/vapor/mysql-kit.git", from: "4.0.0")
```### Supported Platforms
MySQLKit supports the following platforms:
- Ubuntu 20.04+
- macOS 10.15+### Configuration
Database connection options and credentials are specified using a `MySQLConfiguration` struct.
```swift
import MySQLKitlet configuration = MySQLConfiguration(
hostname: "localhost",
port: 3306,
username: "vapor_username",
password: "vapor_password",
database: "vapor_database"
)
```URL string based configuration is also supported.
```swift
guard let configuration = MySQLConfiguration(url: "mysql://...") else {
...
}
```To connect via unix-domain sockets, use `unixDomainSocketPath` instead of `hostname` and `port`.
```swift
let configuration = MySQLConfiguration(
unixDomainSocketPath: "/path/to/socket",
username: "vapor_username",
password: "vapor_password",
database: "vapor_database"
)
```### Connection Pool
Once you have a `MySQLConfiguration`, you can use it to create a connection source and pool.
```swift
let eventLoopGroup: EventLoopGroup = ...
defer { try! eventLoopGroup.syncShutdown() }let pools = EventLoopGroupConnectionPool(
source: MySQLConnectionSource(configuration: configuration),
on: eventLoopGroup
)
defer { pools.shutdown() }
```First create a `MySQLConnectionSource` using the configuration struct. This type is responsible for creating new connections to your database server as needed.
Next, use the connection source to create an `EventLoopGroupConnectionPool`. You will also need to pass an `EventLoopGroup`. For more information on creating an `EventLoopGroup`, visit SwiftNIO's [documentation](https://apple.github.io/swift-nio/docs/current/NIO/index.html). Make sure to shutdown the connection pool before it deinitializes.
`EventLoopGroupConnectionPool` is a collection of pools for each event loop. When using `EventLoopGroupConnectionPool` directly, random event loops will be chosen as needed.
```swift
pools.withConnection { conn
print(conn) // MySQLConnection on randomly chosen event loop
}
```To get a pool for a specific event loop, use `pool(for:)`. This returns an `EventLoopConnectionPool`.
```swift
let eventLoop: EventLoop = ...
let pool = pools.pool(for: eventLoop)pool.withConnection { conn
print(conn) // MySQLConnection on eventLoop
}
```### MySQLDatabase
Both `EventLoopGroupConnectionPool` and `EventLoopConnectionPool` can be used to create instances of `MySQLDatabase`.
```swift
let mysql = pool.database(logger: ...) // MySQLDatabase
let rows = try mysql.simpleQuery("SELECT @@version;").wait()
```Visit [MySQLNIO's docs](https://github.com/vapor/mysql-nio) for more information on using `MySQLDatabase`.
### SQLDatabase
A `MySQLDatabase` can be used to create an instance of `SQLDatabase`.
```swift
let sql = mysql.sql() // SQLDatabase
let planets = try sql.select().column("*").from("planets").all().wait()
```Visit [SQLKit's docs](https://api.vapor.codes/sqlkit/documentation/sqlkit) for more information on using `SQLDatabase`.