Rope

Rope 为服务器端的 Swift 3 提供了一种方便、易用且类型安全的 PostgreSQL 访问方式。
它使用线程安全、高性能的 libpq 库。

Language Swift 3 Platforms CircleCI


如何使用

Rope 非常简单,您只需要学习 3 个方法

// credential struct as helper
let creds = RopeCredentials(host: "localhost", port: 5432,  dbName: "mydb",
                            user: "foo", password: "bar")

// establish connection using the struct, returns nil on error
guard let db = try? Rope.connect(credentials: creds) else {
	print("Could not connect to Postgres")
	return
}

// run INSERT query, it returns nil on a syntax or connection error
// the insert is SQL-injection safe due to the use of dollar params!
let text = "Hello World"
guard let _ = try? db.query("INSERT INTO my_table (my_text) VALUES($1)')", params: [text]) else {
	print("Could not insert \(text) into database");
	return
}

// run SELECT query, it returns nil on a syntax or connection error
guard let res = try? db.query("SELECT id, my_text FROM my_table") else {
	print("Could not fetch id & my_text from database")
	return
}

// execute statements with params (SQL-injection safe)  
guard let res = try? db.query("SELECT * FROM my_table WHERE my_text=$1", params: ["Hello World"]) else {
    print("Could not fetch id & my_text from database")
    return
}

// handle errors with a do/catch 
do {
    let res = try db.query("SELECT id, my_text FROM my_table")
} catch {
    // Error handling
}

// turn result into 2-dimensional array
if let rows = res?.rows() {
    for row in rows {
        let id = row["id"] as? Int
        let myText = row["my_text"] as? String
    }
}

Postgres 类型到 Swift 的转换


运行单元测试

Rope 的单元测试需要运行 Postgres 9.x 数据库,您可以选择通过环境变量或 CLI 参数提供数据库凭据,或者使用内置的默认值。

使用默认值

如果您的数据库具有以下设置,则所有测试都可以在没有任何其他配置的情况下运行

使用环境变量

您可以轻松地通过环境变量提供数据库凭据。 请参阅 RopeTestCredentials.swift 文件。 另请参阅有关如何使用 RopeCredentials 建立连接的单元测试。

对于 Xcode 中的环境变量,请通过 Edit Scheme > Arguments 使用 Environment VariablesArguments Passend On Launch 输入以下信息

使用 CLI 参数

swift build DATABASE_HOST=mydatabase_host DATABASE_PORT=mydatabase_port DATABASE_NAME=mydatabase_dbname DATABASE_USER=mydatabase_user DATABASE_PASSWORD=mydatabase_very_secure_password

要在 CLI 中运行测试,只需输入 swift test


源代码 Linting

源代码使用 SwiftLint 格式化,所有 commits & PRs 都需要没有任何 SwiftLint 警告或错误。


贡献

Rope 由 Thomas Catterall (@swizzlr), Johannes Erhardt (@johanneserhardt), Sebastian Kreutzberger (@skreutzberger) 维护。

非常欢迎贡献。您可以处理现有的 Github issue,也可以在新的 Github issue 中与我们讨论您的想法。 谢谢 🙌



许可证

Rope 在 Apache 2.0 许可证 下发布。