क्योंकि StaticQuery object
(Q
) परोक्ष (प्रकार scala.slick.jdbc.SetParameter[T]
का) सेटर वस्तु का एक प्रकार बनाने के लिए query
विधि के प्रकार मानकों का प्रयोग करके, क्वेरी स्ट्रिंग में पैरामीटर सेट करने की उम्मीद है यह काम नहीं करता।
SetParameter[T]
की भूमिका T
के मान पर एक क्वेरी पैरामीटर सेट करना है, जहां आवश्यक प्रकार query[...]
प्रकार पैरामीटर से लिया गया है।
मैं क्या देखते हैं ऐसी कोई वस्तु एक सामान्य
A
के लिए
T = List[A]
के लिए परिभाषित किया है, और यह एक समझदार विकल्प लगता है, जब से तुम नहीं वास्तव में
IN (?, ?, ?,...)
खंड
के लिए मानकों का एक गतिशील सूची के साथ एक एसक्यूएल क्वेरी लिख सकते हैं से
दायरे में इस के साथ निम्नलिखित कोड
import scala.slick.jdbc.{SetParameter, StaticQuery => Q}
def seqParam[A](implicit pconv: SetParameter[A]): SetParameter[Seq[A]] = SetParameter {
case (seq, pp) =>
for (a <- seq) {
pconv.apply(a, pp)
}
}
implicit val listSP: SetParameter[List[String]] = seqParam[String]
के माध्यम से इस तरह के एक अंतर्निहित मूल्य प्रदान करके एक प्रयोग मैं था, तो आप अपने कोड को निष्पादित करने में सक्षम होना चाहिए
val locationCodes = List("loc1","loc2","loc3"...)
Q.query[(Int,Int,List[String]), Visit]("""
select * from visit where vistor = ? and location_code in (?,?,?...)
""").list(visitorId,locationCodes)
लेकिन आप हमेशा मैन्युअल रूप से की गारंटी चाहिए कि locationCodes
आकार अपने IN
खंड
अंत मुझे विश्वास है कि एक क्लीनर वैकल्पिक हल मैक्रो का उपयोग कर बनाया जा सकता है में ?
की संख्या के रूप में ही है, अनुक्रम प्रकार पर सामान्यीकृत करने के लिए। लेकिन मुझे यकीन नहीं है कि यह अनुक्रम आकार के गतिशील प्रकृति के साथ उपरोक्त मुद्दों को देखते हुए ढांचे के लिए एक बुद्धिमान विकल्प होगा।
क्या यह काम नहीं करता है? कार्य करना चाहिए। –
क्या आप मूल्यों के टुपल्स तक नहीं रह सकते हैं? यह गारंटी देगा कि क्वेरी में आपके द्वारा पारित पैरामीटर की संख्या तय की गई है। –