Я определил в своей БД что-то вроде этого
CREATE FUNCTION fun_totalInvestorsFor(issuer varchar(30)) RETURNS INT
NOT DETERMINISTIC
BEGIN
RETURN (SELECT COUNT(DISTINCT LOYAL3_SHARED_HOLDER_ID)
FROM stocks_x_hldr
WHERE STOCK_TICKER_SIMBOL = issuer AND
QUANT_PURCHASES > QUANT_SALES);
END;
Теперь я получил ответ от Стефана Зейгера (руководитель Slick), который перенаправил меня сюда: Определяемые пользователем функции в Slick
Я пробовал (имея следующий объект):
lazy val db = Database.forURL("jdbc:mysql://localhost:3306/mydb",
driver = "com.mysql.jdbc.Driver", user = "dev", password = "root")
val totalInvestorsFor = SimpleFunction.unary[String, Int]("fun_totalInvestorsFor")
totalInvestorsFor("APPLE") should be (23)
Результат: Rep(slick.lifted.SimpleFunction$$anon$2@13fd2ccd fun_totalInvestorsFor, false) was not equal to 23
Я также пробовал, имея application.conf в src/main/resources следующим образом:
tsql = {
driver = "slick.driver.MySQLDriver$"
db {
connectionPool = disabled
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/mydb"
}
}
Затем в моем коде с @StaticDatabaseConfig("file:src/main/resources/application.conf#tsql")
tsql"select fun_totalInvestorsFor('APPLE')" should be (23)
Результат: Error:(24, 9) Cannot load @StaticDatabaseConfig("file:src/main/resources/application.conf#tsql"): No configuration setting found for key 'tsql'
tsql"select fun_totalInvestorsFor('APPLE')" should be (23)
^
Я также планирую вызывать хранимые процедуры, которые возвращают один кортеж из трех значений, через sql"call myProc(v1)
.as[(Int, Int, Int)]
Любые идеи?
РЕДАКТИРОВАТЬ: при создании sql""""SELECT COUNT(DISTINCT LOYAL3_SHARED_HOLDER_ID)
FROM stocks_x_hldr
WHERE STOCK_TICKER_SIMBOL = issuer AND
QUANT_PURCHASES > QUANT_SALES""".as[(Int)]
приводит к SqlStreamingAction[Vector[Int], Int, Effect]
вместо предложенного DBIO[Int]
(из того, что я делаю вывод), предложенного документацией
totalInvestorsFor("APPLE") should be LiteralColumn(23)
- person pedrofurla   schedule 18.05.2015lazy val db = Database.forURL("jdbc:mysql://localhost:3306/mydb", driver = "slick.driver.MySQLDriver$", user = "root", password = "root")
и вызывая ее с помощью `val f = db.run(dbio).value.get.get`, я получаю опцию None, подходят ли параметры db для MySQL? - person Tomas Duhourq   schedule 18.05.2015