• Stars
    star
    9,453
  • Rank 3,557 (Top 0.08 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 9 years ago
  • Updated 15 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A type-safe, Swift-language layer over SQLite3.

SQLite.swift

Build Status CocoaPods Version Swift5 compatible Platform Carthage compatible Join the chat at https://gitter.im/stephencelis/SQLite.swift

A type-safe, Swift-language layer over SQLite3.

SQLite.swift provides compile-time confidence in SQL statement syntax and intent.

Features

  • A pure-Swift interface
  • A type-safe, optional-aware SQL expression builder
  • A flexible, chainable, lazy-executing query layer
  • Automatically-typed data access
  • A lightweight, uncomplicated query and parameter binding interface
  • Developer-friendly error handling and debugging
  • Full-text search support
  • Well-documented
  • Extensively tested
  • SQLCipher support via CocoaPods
  • Schema query/migration
  • Works on Linux (with some limitations)
  • Active support at StackOverflow, and Gitter Chat Room (experimental)

Usage

import SQLite

// Wrap everything in a do...catch to handle errors
do {
    let db = try Connection("path/to/db.sqlite3")

    let users = Table("users")
    let id = Expression<Int64>("id")
    let name = Expression<String?>("name")
    let email = Expression<String>("email")

    try db.run(users.create { t in
        t.column(id, primaryKey: true)
        t.column(name)
        t.column(email, unique: true)
    })
    // CREATE TABLE "users" (
    //     "id" INTEGER PRIMARY KEY NOT NULL,
    //     "name" TEXT,
    //     "email" TEXT NOT NULL UNIQUE
    // )

    let insert = users.insert(name <- "Alice", email <- "[email protected]")
    let rowid = try db.run(insert)
    // INSERT INTO "users" ("name", "email") VALUES ('Alice', '[email protected]')

    for user in try db.prepare(users) {
        print("id: \(user[id]), name: \(user[name]), email: \(user[email])")
        // id: 1, name: Optional("Alice"), email: [email protected]
    }
    // SELECT * FROM "users"

    let alice = users.filter(id == rowid)

    try db.run(alice.update(email <- email.replace("mac.com", with: "me.com")))
    // UPDATE "users" SET "email" = replace("email", 'mac.com', 'me.com')
    // WHERE ("id" = 1)

    try db.run(alice.delete())
    // DELETE FROM "users" WHERE ("id" = 1)

    try db.scalar(users.count) // 0
    // SELECT count(*) FROM "users"
} catch {
    print (error)
}

SQLite.swift also works as a lightweight, Swift-friendly wrapper over the C API.

// Wrap everything in a do...catch to handle errors
do {
    // ...

    let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)")
    for email in ["[email protected]", "[email protected]"] {
        try stmt.run(email)
    }

    db.totalChanges    // 3
    db.changes         // 1
    db.lastInsertRowid // 3

    for row in try db.prepare("SELECT id, email FROM users") {
        print("id: \(row[0]), email: \(row[1])")
        // id: Optional(2), email: Optional("[email protected]")
        // id: Optional(3), email: Optional("[email protected]")
    }

    try db.scalar("SELECT count(*) FROM users") // 2
} catch {
    print (error)
}

Read the documentation or explore more, interactively, from the Xcode projectโ€™s playground.

SQLite.playground Screen Shot

Installation

Swift Package Manager

The Swift Package Manager is a tool for managing the distribution of Swift code.

  1. Add the following to your Package.swift file:
dependencies: [
    .package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.15.3")
]
  1. Build your project:
$ swift build

See the Tests/SPM folder for a small demo project which uses SPM.

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa. To install SQLite.swift with Carthage:

  1. Make sure Carthage is installed.

  2. Update your Cartfile to include the following:

    github "stephencelis/SQLite.swift" ~> 0.15.3
  3. Run carthage update and add the appropriate framework.

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. To install SQLite.swift with CocoaPods:

  1. Make sure CocoaPods is installed.

    # Using the default Ruby install will require you to use sudo when
    # installing and updating gems.
    [sudo] gem install cocoapods
  2. Update your Podfile to include the following:

    use_frameworks!
    
    target 'YourAppTargetName' do
        pod 'SQLite.swift', '~> 0.14.0'
    end
  3. Run pod install --repo-update.

Manual

To install SQLite.swift as an Xcode sub-project:

  1. Drag the SQLite.xcodeproj file into your own project. (Submodule, clone, or download the project first.)

    Installation Screen Shot

  2. In your targetโ€™s General tab, click the + button under Linked Frameworks and Libraries.

  3. Select the appropriate SQLite.framework for your platform.

  4. Add.

Some additional steps are required to install the application on an actual device:

  1. In the General tab, click the + button under Embedded Binaries.

  2. Select the appropriate SQLite.framework for your platform.

  3. Add.

Communication

See the planning document for a roadmap and existing feature requests.

Read the contributing guidelines. The TL;DR (but please; R):

Original author

License

SQLite.swift is available under the MIT license. See the LICENSE file for more information.

Related

These projects enhance or use SQLite.swift:

Alternatives

Looking for something else? Try another Swift wrapper (or FMDB):

More Repositories

1

ghi

GitHub Issues on the command line. Use your $EDITOR, not your browser.
Ruby
2,137
star
2

syn

Syntax control for the command line
Objective-C
375
star
3

timeframe

Click-draggable. Range-makeable. A better calendar.
JavaScript
287
star
4

Formatting

Type-safe, functional string formatting in Swift.
Swift
248
star
5

sc_listener

A simple class for listening to microphone levels, suitable for the iPhone.
Objective-C
131
star
6

app

Easy App config.
Ruby
98
star
7

haddock

A more memorable password generator.
Ruby
88
star
8

githubbub

GitHubbub: A GitHub Fluid userscript. Growl/Dock notifications, and more.
JavaScript
84
star
9

minifacture

factory_girl for minitest
Ruby
69
star
10

BRLOptionParser

A short wrapper for getopt_long(3). Command line options parsing for Objective-C.
Objective-C
50
star
11

acts_as_singleton

A lightweight singleton library for your Active Record models.
Ruby
47
star
12

rdoctest

A doctest for Ruby. Parses RDoc text for examples and tests them.
Ruby
35
star
13

dots

Free progress dots for your scripts. Test::Unit-style.
Ruby
33
star
14

SQLiteCipher.swift

SQLite.swift + SQLCipher
Swift
32
star
15

vim-mml

Music Macro Language (MML) VIM plug-in. Edit, compile, and play NES chiptunes.
C
31
star
16

dotfiles

gone fishing
Ruby
25
star
17

rerails

Reinforcing the Rails with assorted patches.
Ruby
21
star
18

kvc

KVC (Key-Value Configuration): a powerful, transparent way to maintain mutable app settings in the database.
Ruby
15
star
19

scantron

Rule-based string scanning and scrubbing.
Ruby
7
star
20

Gestures.swift

iOS block-based gesture helpers.
Swift
7
star
21

ScreenshotWatcher

A demonstration of testing uncertainty in Swift Concurrency
Swift
6
star
22

gorilla

Unit conversion for the underdog.
Ruby
2
star
23

actionview-data

HTML5 data attribute helpers for ActionView.
Ruby
1
star
24

swift-remove-first-benchmark

Swift
1
star
25

EnumRuntimeBug

Swift
1
star
26

Platformer

Playing with Flixel.
ActionScript
1
star
27

scptest

Swift
1
star
28

ghi-playground

Nothing to see here, folks.
1
star