ScalikeJDBC, необработанный SQL не может сопоставить или вернуть действительный набор результатов

Я разместил это в группе пользователей scalikejdbc, а также должен опубликовать сообщение о проблемах github.

Я видел в документах примеры выполнения необработанных запросов к таблице, я пытаюсь получить список IndexEntry со следующим кодом, и пока запрос выполняется и возвращает результаты в консоль, я ничего не получаю обратно в части map(rs =>....

Соответствующий код находится здесь - когда я запускаю это в отладчике Intellij, результат равен размеру «Вектора» = 0. Спасибо за любые рекомендации. Я делаю что-то не так, надеюсь, это просто недосмотр.

package company.shared.database.models

import company.shared.database.MySQLConnector
import scalikejdbc._

case class IndexEntry(model:String, indexName: String, fieldName: String)

object IndexSchemaModel extends App  with MySQLConnector {
  implicit val session:DBSession = AutoSession

  def indexMap:List[IndexEntry] = {
    val result = DB readOnly { implicit session =>
      sql"""
         SELECT
          substring_index(t.name,'/',-1) as model,
              i.name AS indexName,
              f.name as tableName
       FROM information_schema.innodb_sys_tables t
       JOIN information_schema.innodb_sys_indexes i USING (table_id)
       JOIN information_schema.innodb_sys_fields f USING (index_id)
       where t.name like "MyDB/%"
      """.map(rs => IndexEntry(
              rs.string(0), 
              rs.string(1), 
              rs.string(2))).list().apply()
    }
  println(result) //always List()
  List(IndexEntry("foo", "bar", "az")) //to match the return type
  }

  override def main(args: Array[String]): Unit = {
    configureDB
    indexMap
  }
}

Я пробовал другие варианты scalikejdc - withSql { queryDSL } и весь бит как интерполяцию SQL с полной поддержкой синтаксиса. Первый и последний всегда выполняются на сервере mysql, который возвращает 57 строк (маленький db), средний выдает NPE, честно говоря, я рад заняться средним вторым. У меня есть проблема где-то в .map, и я пытался просто вернуть карту, но это всегда приводит к пустому списку.

Спасибо и, надеюсь, никаких синтаксических ошибок при копировании в SO.

О, и FWIW, configureDb просто устанавливает пул соединений вручную, поскольку имена и серверы БД могут сильно различаться между тестами sbt, dev, test и prod. В настоящее время это не моя проблема, иначе я бы увидел «ConnectionPool ('default') не инициализирован» или подобное.


person ekydfejj    schedule 12.02.2016    source источник


Ответы (2)


Ответил здесь: https://groups.google.com/forum/#!topic/scalikejdbc-users-group/yRjLjuCzuEo

также следует публиковать сообщения о проблемах github

Пожалуйста, не публикуйте вопросы по проблемам GitHub. https://github.com/scalikejdbc/scalikejdbc/blob/master/CONTRIBUTING.md#issues

person Kazuhiro Sera    schedule 12.02.2016
comment
Я никогда не делал кросспост, двух было достаточно. - person ekydfejj; 12.02.2016
comment
Странно, почему в этом случае scalikejdbc не вернет какое-либо указание на ошибку или возвращает? - person matanster; 03.07.2016

Немного смущения в сторону. У рассматриваемого пользователя не было привилегии процесса, и, следовательно, он не мог получить обратно никаких строк из этих таблиц, как только был добавлен процесс предоставления на . пользователю @host, все это работало нормально. Разрешения в information_schema определяются тем, к каким объектам имеет доступ рассматриваемый пользователь. Элементы значения, такие как ROUTINES и в этом случае PROCESS и т. д., должны быть явно вызваны.

person ekydfejj    schedule 12.02.2016