# mysql-kit-main
**Repository Path**: hfbdqn/mysql-kit-main
## Basic Information
- **Project Name**: mysql-kit-main
- **Description**: Visit SQLKit's docs for more information on using SQLDatabase.
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-04-19
- **Last Updated**: 2023-04-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
🐬 Non-blocking, event-driven Swift client for MySQL.
### Major Releases
The table below shows a list of MySQLKit major releases alongside their compatible NIO and Swift versions.
|Version|NIO|Swift|SPM|
|---|---|---|---|
|4.0|2.0|5.2+|`from: "4.0.0"`|
|3.0|1.0|4.0+|`from: "3.0.0"`|
|2.0|N/A|3.1+|`from: "2.0.0"`|
|1.0|N/A|3.1+|`from: "1.0.0"`|
Use the SPM string to easily include the dependency in your `Package.swift` file.
```swift
.package(url: "https://github.com/vapor/mysql-kit.git", from: ...)
```
### Supported Platforms
MySQLKit supports the following platforms:
- Ubuntu 16.04+
- macOS 10.15+
## Overview
MySQLKit is a MySQL client library built on [SQLKit](https://github.com/vapor/sql-kit). It supports building and serializing MySQL-dialect SQL queries. MySQLKit uses [MySQLNIO](https://github.com/vapor/mysql-nio) to connect and communicate with the database server asynchronously. [AsyncKit](https://github.com/vapor/async-kit) is used to provide connection pooling.
### Configuration
Database connection options and credentials are specified using a `MySQLConfiguration` struct.
```swift
import MySQLKit
let 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://github.com/vapor/sql-kit) for more information on using `SQLDatabase`.