ResultSetExtractorException в SQL-интерполяции

У меня возникли проблемы с SQL-Interpolation в ScalikeJdbc. При попытке запустить следующий фрагмент кода

val dbTableSQLSyntax: SQLSyntax = SQLSyntax.createUnsafely(dbTableName)

sql"""
   SELECT
     COUNT(*) AS count,
     MIN($distributionColumn) AS min,
     MAX($distributionColumn) AS max
   FROM
     $dbTableSQLSyntax
 """.stripMargin.
  map(mapResult).
  single().
  apply().
  get()

я получаю эту ошибку

scalikejdbc.ResultSetExtractorException: Failed to retrieve value because For input string: "tab_id". If you're using SQLInterpolation, you may mistake u.id for u.resultName.id.
    at scalikejdbc.WrappedResultSet.wrapIfError(WrappedResultSet.scala:27)
    at scalikejdbc.WrappedResultSet.get(WrappedResultSet.scala:479)
    at scalikejdbc.WrappedResultSet.longOpt(WrappedResultSet.scala:233)
...


Фреймворки/библиотеки

  • Scala 2.11.11
  • "org.scalikejdbc" %% "scalikejdbc" % "3.2.0"

EDIT-1

В ответ на ответ @Kazuhiro Sera я предоставляю свой метод mapResult

def mapResult(rs: WrappedResultSet): (Long, Long, Long) = {
  val count: Long = rs.long("count")
  val minOpt: Option[Long] = rs.longOpt("min")
  val maxOpt: Option[Long] = rs.longOpt("max")
  (count, minOpt.getOrElse(0), maxOpt.getOrElse(Long.MaxValue))
}

person y2k-shubham    schedule 04.04.2018    source источник


Ответы (1)


Это зависит от вашей mapResult функции. Я боюсь, что mapResult попытается получить tag_id из значения ResultSet. В этом случае ваш запрос SQL возвращает только count, min и max.

person Kazuhiro Sera    schedule 16.04.2018
comment
Наверное, тогда я приснился: яснее исключения быть не могло: ..because For input string: "tab_id"... Действительно, в моей таблице MySQL есть столбец с именем tab_id; Должно быть, я использовал другой mapResult метод во время (вопроса публикации)/неправильно aliased столбец в SQL-запросе. - person y2k-shubham; 07.09.2018