Skip to content

3.0-RC: Enums - No PostgreSQL column type known for <enum> #21

@4np

Description

@4np

When I extend the User / Pet model to store PetType and UserType integer backed enums, PostgreSQL will fail on the UserType property on User:

screen shot 2018-02-28 at 10 37 10

Extended User / Pet model:

import Foundation
import FluentPostgreSQL
import Vapor

/// Pet

enum PetType: Int, Codable {
    case dog = 0
    case cat
    // It's pretty much my favorite animal. It's like a lion
    // and a tiger mixed... bred for its skills in magic.
    case liger
    case manBearPig
}

extension PetType: KeyStringDecodable {
    static var keyStringTrue: PetType {
        return .dog
    }
    
    static var keyStringFalse: PetType {
        return .cat
    }
}

struct Pet: PostgreSQLJSONType, Codable {
    var name: String
    var type: PetType
}

/// User

enum UserType: Int, Codable {
    case novice = 0
    case skilled
    case masterOfDisaster
}

extension UserType: KeyStringDecodable {
    static var keyStringTrue: UserType {
        return .novice
    }
    
    static var keyStringFalse: UserType {
        return .skilled
    }
}

final class User: PostgreSQLModel, Migration {
    static let idKey: WritableKeyPath<User, Int?> = \User.id
    var id: Int?
    var name: String
    var type: UserType = .novice
    var age: Int?
    var favoriteColors: [String]
    var pet: Pet
    
    init(id: Int? = nil, name: String, type: UserType, pet: Pet) {
        self.favoriteColors = []
        self.id = id
        self.name = name
        self.type = type
        self.pet = pet
    }
}

Changing the enum types from Integer backed to String backed does not matter:

enum UserType: String, Codable {
    case novice
    case skilled
    case masterOfDisaster
}

Note that PetType is not being used in the above code other than that it's part of the nested JSONB for Pet

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions