0

I'm trying to use Scalikejbdc's ORM with SQLSyntaxSupport

The table layout is as follows:

create table samples (
    id text
    event_name text
    event_data text
    created_at timestamp
    scope text
)

The classes in Scala are as follows

case class SampleData(id: String, eventName: String, eventData: String)
case class SampleMetadata(createdAt: OffsetDateTime, scope: String)
case class Sample(data: SampleData, metadata: SampleMetadata)

I would like to use SQLSyntaxSupport like so

object SampleSchema extends SQLSyntaxSupport[Sample] {
  override val tableName = "sources"

  override lazy val columns = Seq(
    "id",
    "event_name",
    "event_data",
    "created_at",
    "scope"
  )

  val insertColumns = Seq(
    column.id,
    column.eventName,
    column.eventData,
    column.createdAt,
    column.scope
  )
}

and later be able to do:

  def insert(source: Source): Unit = DB localTx { implicit session =>
      applyUpdate {
        insertInto(SampleSchema)
          .columns(SampleSchema.insertColumns: _*)
          .values(SampleSchema.toInsertValues(session, source): _*)
      }
  }

Code doesn't compile; with errors like

 Sample#eventName not found. Expected fields are #data, #metadata
 column.eventName 

Is there a way to make it work without flattening the case class Sample ?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
Seddiki Anass
  • 306
  • 2
  • 19
  • Wouldn't you need to use `Seq(column.data.id, column.data.eventName, column.data.eventData, column.metadata.createdAt, column.metadata.scope)` instead of `Seq(column.id, column.eventName, column.eventData, column.createdAt, column.scope)`? – Bergi Dec 27 '22 at 18:51
  • this wouldn't work. I tried it and it appears that we can't do something like `column.data.XXX` – Seddiki Anass Dec 28 '22 at 08:17

0 Answers0