https://github.com/vaporexampleslab/vapor-til-sqlite
An sqlite variant of raywenderlich/vapor-til. Uses Vapor 3 & Swift 4
https://github.com/vaporexampleslab/vapor-til-sqlite
vapor vapor-3 vapor-example
Last synced: 3 months ago
JSON representation
An sqlite variant of raywenderlich/vapor-til. Uses Vapor 3 & Swift 4
- Host: GitHub
- URL: https://github.com/vaporexampleslab/vapor-til-sqlite
- Owner: VaporExamplesLab
- License: other
- Created: 2018-06-20T22:38:49.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-12-07T01:01:49.000Z (over 7 years ago)
- Last Synced: 2024-12-31T21:26:11.813Z (over 1 year ago)
- Topics: vapor, vapor-3, vapor-example
- Language: Swift
- Homepage:
- Size: 43 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: license
Awesome Lists containing this project
README
# Vapor TIL SQLite
[Overview](#Overview) |
[PostgreSQL → SQLite](#PostgreSQLToSQLite) |
[Resources](#Resources)
## Overview [▴](#toc)
The [vapor-til-sqlite]() is based on [raywenderlich/vapor-til](https://github.com/raywenderlich/vapor-til). Some key aspects of `vapor-til-sqlite` are:
* SQLite is used instead of PostgreSQL.
* SQLite pivot `id` type is `Int` instead of `UUID`.
* TBD: Tests pass on Linux 16.04?
* Swift script to populate database.
* `Imperial` package and related files for OAth login are commented out.
* Demo user: `admin`:`password`
## PostgreSQL → SQLite Conversion [▴](#toc)
Direct find & replace.
| `PostgreSQL` | `SQLite` |
|----------------------------|------------------------|
| `FluentPostgreSQL` | `FluentSQLite` |
| `FluentPostgreSQLProvider` | `FluentSQLiteProvider` |
| `PostgreSQLModel` | `SQLiteModel` |
| `PostgreSQLUUIDModel` | `SQLiteUUIDModel` |
| `PostgreSQLConnection` | `SQLiteConnection` |
| `.psql` | `.sqlite` |
Rewritten sections.
| `PostgreSQL` | `SQLite` |
|----------------------------|------------------------|
| `PostgreSQLDatabase` | `SQLiteDatabase` |
| `PostgreSQLDatabaseConfig` | `SQLiteStorage` |
| `PostgreSQLUUIDPivot` | `SQLitePivot` |
`configure.swift` PostgreSQLDatabaseConfig, PostgreSQLDatabase
``` swift
// Configure a database
var databases = DatabasesConfig()
let databaseConfig: PostgreSQLDatabaseConfig
if let url = Environment.get("DATABASE_URL") {
databaseConfig = try PostgreSQLDatabaseConfig(url: url)
} else {
let databaseName: String
let databasePort: Int
if (env == .testing) {
databaseName = "vapor-test"
if let testPort = Environment.get("DATABASE_PORT") {
databasePort = Int(testPort) ?? 5433
} else {
databasePort = 5433
}
}
else {
databaseName = Environment.get("DATABASE_DB") ?? "vapor"
databasePort = 5432
}
let hostname = Environment.get("DATABASE_HOSTNAME") ?? "localhost"
let username = Environment.get("DATABASE_USER") ?? "vapor"
let password = Environment.get("DATABASE_PASSWORD") ?? "password"
databaseConfig = PostgreSQLDatabaseConfig(hostname: hostname, port: databasePort, username: username, database: databaseName, password: password)
}
let database = PostgreSQLDatabase(config: databaseConfig)
databases.add(database: database, as: .psql)
services.register(databases)
```
`configure.swift` SQLiteStorage, SQLiteDatabase
``` swift
// Configure a database
var databases = DatabasesConfig()
var storage: SQLiteStorage!
switch env {
case .development:
// default: "/tmp/db.sqlite"
let sqlitePath = "/Volumes/gMediaHD/VaporProjects/workspace/databases/vapor-til-sqlite.sqlite"
storage = .file(path: sqlitePath)
case .testing:
// "/tmp/_swift-tmp.sqlite"
storage = .memory
case .production:
storage = .memory
default:
// includes custom
storage = .memory
}
let sqliteDb = try SQLiteDatabase(storage: storage)
databases.add(database: sqliteDb, as: .sqlite)
services.register(databases)
```
## Notes
**`vapor-til-sqlite`** has not yet been tested on Linux.
## Resources [▴](#toc)
* [GitHub/raywenderlich: vapor-til ⇗](https://github.com/raywenderlich/vapor-til)
* [Ray Wenderlich Video Courses: Server Side Swift with Vapor ⇗](https://videos.raywenderlich.com/courses/115-server-side-swift-with-vapor/lessons/1)
* [Vapor: documentation ⇗](https://docs.vapor.codes/3.0/)