これを scalikejdbc ユーザー グループに投稿しました。また、github の問題にもクロス投稿する必要があります。
テーブルに対して生のクエリを実行するドキュメントの例を見てきました。次のコードで IndexEntry のリストを取得しようとしていますが、クエリが実行されてコンソールに結果が返されますが、何も返されません。 map(rs =>... の部分。
関連するコードはこちらです - これを intellij のデバッガーで実行すると、結果は "Vector" size = 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 行 (小さなデータベース) が返されます。真ん中は NPE をスローします。.map のどこかに問題があり、マップを返すだけにしようとしましたが、常に空のリストになります。
ありがとう、できれば構文エラーが SO にコピーされないことを願っています。
ああ、FWIW、configureDb は接続プールを手動で設定するだけです。これは、DB 名とサーバーが sbt テスト、dev、test、prod の間で大きく異なる可能性があるためです。現在、それは私の問題ではないか、「ConnectionPool('default') が初期化されていません」などと表示されます。