Search code examples
scalacompiler-errorsh2insert-updatequill

Compilation error on insert-or-update action in Quill when using H2 database


is it possible to perform insert-or-update action in Quill when using H2 database? If I add to .insert action .onConflictIgnore, I'm getting compilation error:

[error] [...]/repository/HeadlinesRepository.scala:41:36: exception during macro expansion: 
[error] java.lang.IllegalStateException: Action ast can't be translated to sql: 'querySchema("headlines").insert(v => v.link -> ?, v => v.title -> ?).onConflictIgnore'
[error]         at io.getquill.util.Messages$.fail(Messages.scala:15)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.$anonfun$actionTokenizer$1(SqlIdiom.scala:387)
[error]         at io.getquill.idiom.StatementInterpolator$Tokenizer$$anon$1.token(StatementInterpolator.scala:17)
[error]         at io.getquill.idiom.StatementInterpolator$TokenImplicit.token(StatementInterpolator.scala:27)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.$anonfun$astTokenizer$1(SqlIdiom.scala:57)
[error]         at io.getquill.idiom.StatementInterpolator$Tokenizer$$anon$1.token(StatementInterpolator.scala:17)
[error]         at io.getquill.context.sql.idiom.SqlIdiom$$anon$1.token(SqlIdiom.scala:49)
[error]         at io.getquill.context.sql.idiom.SqlIdiom$$anon$1.token(SqlIdiom.scala:46)
[error]         at io.getquill.idiom.StatementInterpolator$TokenImplicit.token(StatementInterpolator.scala:27)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.translate(SqlIdiom.scala:39)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.translate$(SqlIdiom.scala:23)
[error]         at io.getquill.H2Dialect$.translate(H2Dialect.scala:20)
[error]         at io.getquill.context.ContextMacro.translateStatic(ContextMacro.scala:51)
[error]         at io.getquill.context.ContextMacro.translate(ContextMacro.scala:37)
[error]         at io.getquill.context.ContextMacro.expand(ContextMacro.scala:24)
[error]         at io.getquill.context.ContextMacro.expand$(ContextMacro.scala:21)
[error]         at io.getquill.context.ActionMacro.expand(ActionMacro.scala:10)
[error]         at io.getquill.context.ActionMacro.expandBatchAction(ActionMacro.scala:121)
[error]         at io.getquill.context.ActionMacro.runBatchAction(ActionMacro.scala:71)

Solution

  • Seems that no.

    insert or update (upsert, conflict)

    Upsert is supported by Postgres, SQLite, and MySQL

    https://github.com/getquill/quill