2016-05-11 3 views
1

sql interporlator позволяет классы случае в результате данного экземпляра GetResultКак я могу использовать классы case с slicks TSQL-интерполятором?

val action:DBIO[Seq[VisibilityRow]] = sql"SELECT * FROM visibility".as[VisibilityRow] //compiles fine 

Checking the docs, я не вижу пример использования tsql наряду с тематическим классом.

я решил просто попробовать его

val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility" 

Однако я получаю ошибки

[error] ... : type mismatch; 
[error] found : slick.profile.SqlStreamingAction[Vector[(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp)],(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp),slick.dbio.Effect] 
[error] required: slick.driver.PostgresDriver.api.DBIO[Seq[com.fevo.slick.Schema.VisibilityRow]] 
[error]  (which expands to) slick.dbio.DBIOAction[Seq[com.fevo.slick.Schema.VisibilityRow],slick.dbio.NoStream,slick.dbio.Effect.All] 
[error]  val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility" 

Есть элегантный способ для меня, чтобы извлечь эти типы с использованием tsql, я мог бы карту над применить но тогда мне все же необходимо указать (и обновить) тип кортежа для параметра DBIO.

+0

я не уверен, я понимаю ваше последнее предложение. Вы должны уметь: 'tsql 'SELECT * FROM visibility" .map (_. Map (VisibilityRow.apply.tupled)) '. Думаю, ты говоришь, что не хочешь этого? – jkinkead

+0

Да, это мое недоразумение, я думал о том, что макрос преуспел. Мне нужно было указать типы, теперь я понимаю (пробовал ваш код), который не соответствует действительности. Если вам нравится, вы можете превратить это в ответ и плохо принять. Так как классы моего класса имеют параметры (некоторые поля не требуются), я не могу напрямую сопоставлять их, но это, вероятно, совершенно новый вопрос. –

+0

Ответить добавил. Рад, что смог помочь! – jkinkead

ответ

2

Если конструктор класса случая соответствует вашему полю, вы можете просто отобразить на результате, чтобы получить тип вам нужно:

val action2:DBIO[Seq[VisibilityRow]] = 
    tsql"SELECT * FROM visibility".map(_.map(VisibilityRow.apply.tupled))