This is a library that provides a simple layer above SQLite for Swift.
It uses modern Swift features (async/await, parameter packs, etc) and only compiles with Swift 6.
Warning
This library is under active development, until 1.0 release breaking changes might be made.
- Swift 6.0 or later
- Xcode 16.0 or later
- iOS 14.0 or later
- macOS 11.0 or later
- macCatalyst 14.0 or later
- tvOS 14.0 or later
Import library:
import RelationalSwift
Create a database:
// Open in-memory database
let db = try await Database.openInMemory()
// Open an on-disk database
let db = try await Database.open(url: myDatabaseURL)
Define a table:
@Table struct User: Equatable {
@Column(primaryKey: true) var id: Int
@Column var name: String
@Column var age: Int
@Column var address: String?
}
Create the table in the database:
try await db.createTable(User.self)
Insert entry:
var joe = User(id: 0, name: "Joe", age: 21, address: nil)
try await db.insert(entry: &joe)
Query entries:
// Get full user entries
let users = try await db.from(User.self).where { $0.age > 20 }.select()
// Get select fields only
let names = try await db.from(User.self).where { $0.age > 20 }.select { $0.name }
Update entry:
joe.age = 22
try await db.update(joe)
Delete entry:
try await db.delete(joe)