Repository navigation
馃嵕 Implement schema support
Pre-release
Pre-release
·
192 commits
to master
since this release
Breaking change
Aliases syntax has been changed
was
let u = User.as("u")
u~\.$idbecame
let u = User.as("u")
u.$idSchema
schema for
postgresis the same as database formysql.
How to declare some schema
struct Deleted: Schemable {
static var schemaName: String { "deleted" }
}or right into your model (example for Bridges)
final class DeletedUser: Table, Schemable {
static var schemaName: String { "deleted" }
static var tableName: String { "user" }
@Column("id")
var id: UUID
@Column("email")
var email: String
}Usage examples
// if `User` model conforms to `Schemable` it will use `public` schema all the time
\User.$id // result: "public"."user"."id"
// otherwise it will be printed simply without any schema
\User.$id // result: "user"."id"
// `DeletedUser` model conforms to `Schemable` and has custom schema name
\DeletedUser.$id // result: "deleted"."user"."id"
// Alternatively we can wrap any model to any schema
User.inSchema("deleted").$id // result: "deleted"."user"."id"
// also we can use aliases with tables with schemas
DeletedUser.as("du") // result: "deleted"."user" as "du"
// or
User.inSchema("deleted").as("du") // result: "deleted"."user" as "du"New alias features
let u = User.as("u")
// to reach \User.$id we now can simply call
u.$id // result: "u"."id"
// the same for aliases with schemas
// declare aliases easily
let hu = User.inSchema("hello").as("hu")
// or even
struct HelloSchema: Schemable {
static var schemaName: String { "hello" }
}
let hu = User.inSchema(HelloSchema.self).as("hu")
// use alias as table
hu.table // result: "hello"."user" as "hu"
// or simply call its columns
hu.$id // result: "hu"."id"Custom aliases for subqueries
let u = SwifQLAlias("u")
let subQueryWithAlias = |SwifQL.select(User.table.*).from(User.table)| => u
// result: (SELECT "hello"."user".* FROM "hello"."user") as "u"
// and then also use its paths easily
u.id // result: "u"."id"
// even with any fantasy columns
u.heeeeey // result: "u"."heeeeey"