Swift SDK

Swift SDK Quick Start — WoWSQL Docs

Swift Quick Start

WoWSQL Swift SDK — Get started in minutes

Get your API key: Use the WoWSQL project dashboard to create or copy your API key. The same key works for database, auth, and storage (unified API key).

Installation

Official package: View on GitHub →

Swift Package Manager: Add to your Package.swift:

// swift-tools-version: 5.9
import PackageDescription

let package = Package(
    name: "MyApp",
    platforms: [.iOS(.v13), .macOS(.v10_15)],
    dependencies: [
        .package(url: "https://github.com/WowSQL/wowsql-swift.git", from: "1.0.0")
    ],
    targets: [
        .target(
            name: "MyApp",
            dependencies: ["WowSQL"]
        ),
    ]
)

Or in Xcode: File → Add Package Dependencies → https://github.com/WowSQL/wowsql-swift

Initialize Client

import WowSQL

// Initialize client with your API key (same key for database, auth, storage)
let client = WowSQLClient(
    projectURL: "myproject",
    apiKey: "your_api_key_here"
)

// Or with full URL
let clientFull = WowSQLClient(
    projectURL: "https://myproject.wowsql.com",
    apiKey: "your_api_key"
)

// Always use select() before get()/execute()
client.table("users").select("*").get { _ in }

Query Data

Basic Queries

client.table("users").select("*").get { result in /* users */ }
client.table("users").select("*").gte("age", 18).get { result in /* adults */ }
client.table("users").select("id", "name").get { result in /* names */ }

Advanced Queries

client.table("users")
    .select("*")
    .filter("status", "eq", "active")
    .filter("age", "gt", 18)
    .order("created_at", "desc")
    .limit(20)
    .offset(0)
    .get { result in
        if case .success(let users) = result {
            print("Found \(users.count) users")
        }
    }

Filter Helper Methods

client.table("users")
    .eq("status", "active")
    .gt("age", 18)
    .like("email", "%@gmail.com")
    .in("role", ["admin", "moderator"])
    .between("created_at", "2024-01-01", "2024-12-31")
    .get { _ in }

GROUP BY and Aggregates

Basic GROUP BY

client.table("products")
    .select("category", "COUNT(*) as count", "AVG(price) as avg_price")
    .groupBy("category")
    .get { _ in }

HAVING Clause

client.table("products")
    .select("category", "COUNT(*) as count")
    .groupBy("category")
    .having("COUNT(*)", "gt", 10)
    .get { _ in }

CRUD Operations

Create Record

client.table("users").create([
    "name": "John Doe",
    "email": "john@example.com",
    "age": 30
]) { result in
    if case .success(let r) = result { print("Created ID: \(r["id"] ?? "")") }
}

Update Record

client.table("users").update(123, ["email": "newemail@example.com"]) { _ in }

Delete Record

client.table("users").delete(123) { _ in }

Get Single Record by ID

client.table("users").getById(123) { result in
    if case .success(let user) = result { print("User: \(user["name"] ?? "")") }
}

Get First Record

client.table("users").filter("status", "eq", "active").first { result in
    if case .success(let user) = result, let u = user { print("First: \(u["name"] ?? "")") }
}

Filter Operators

Available operators: eq, neq, gt, gte, lt, lte, like, is, in, not_in, between, not_between. Use .eq("col", value), .filter("col", "op", value), etc.

Error Handling

client.table("users").select("*").get { result in
    switch result {
    case .success(let users):
        print("Success: \(users.data.count) users")
    case .failure(let error):
        print("Error: \(error.localizedDescription)")
    }
}

Authentication

Use the same API key for authentication. One key works for database and auth.

Sign Up & Sign In

let auth = WowSQLAuth(projectURL: "myproject", apiKey: "your_api_key")
auth.signUp(email: "user@example.com", password: "SecurePassword123", fullName: "John Doe") { result in /* access_token */ }
auth.signIn(email: "user@example.com", password: "SecurePassword123") { result in /* user id */ }

Password Reset

auth.forgotPassword(email: "user@example.com") { _ in }
auth.resetPassword(token: "reset_token", newPassword: "NewSecurePassword123") { _ in }

Storage Operations

Initialize Storage

let storage = WowSQLStorage(
    projectURL: "myproject",
    apiKey: "your_api_key"
)

File Operations

// Upload file
storage.uploadFromPath("path/to/document.pdf", remotePath: "uploads/document.pdf", folder: "documents") { result in }

// Get file URL
storage.getFileUrl("uploads/document.pdf", expiresIn: 3600) { result in }

// List files
storage.listFiles(prefix: "uploads/") { result in }

// Delete file
storage.deleteFile("uploads/document.pdf") { _ in }

// Check quota
storage.getQuota() { result in }

Download or View File

Via REST: use GET .../files/{file_key}/download for attachment download, or GET .../files/{file_key}/view to view inline in the browser.