Tomo.Log()


[Vapor3][MySQL] エラー「'DatabaseIdentifier<_>' produces result of type 'DatabaseIdentifier<MySQLDatabase>', but context expects 'DatabaseIdentifier<_>'」が表示されたら

[10/21, 2018]

日本語 / English

エラーの原因

DatabaseIdentifierをちゃんと指定しているのに、以下のようなエラーが表示されることがありますよね。

Member 'mysql' in 'DatabaseIdentifier<>' produces result of type 'DatabaseIdentifier', but context expects 'DatabaseIdentifier<>'

結論からいうと、

  • クロージャの中のプログラムが間違っている。
  • クロージャの中身がまだ書かれていない

ことが原因です。なのでクロージャの中のリターン正しくを書けばエラーは出なくなります。

エラーが出るパターン

let result = context.container.withNewConnection(to: .mysql){
    conn in            
}
let result = context.container.withNewConnection(to: .mysql){
    conn in
    return 1            
}

など

エラーが出ないパターン

let result = context.container.withNewConnection(to: .mysql){
    conn in            
    return conn.raw("select * from talbeA;").all()
}

おそらく、クロージャの中身が足りない or 間違っていることでコンパイラが正しくエラーを出せていないのだと思います。(Xcodeのせいなのかな?)正直何が違うのがわからず凄い時間を取ってしまいました。

プログラムって難しいですね。

Vaport3のあれこれ