Я разместил это в группе пользователей 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') не инициализирован» или подобное.