Slick

2014-09-19 29 views
10

'de birçok rasgele sütun seçilmesi Bir görünümde Slick'te SELECT * tarzı bir sorgu çalıştırmaya çalışıyorum. İdeal olarak, bir sütun adları kümesini Seq[String] olarak geçirebileceğiniz ve SELECT col1, col2, ... FROM view sorgusunu yürütecek bir işlevle sonuçlanırdım. Bu mümkün değilse, tüm sütunları (SELECT * FROM view) döndürmek kabul edilebilir.Slick

Bu görünüm için bir Table sınıfını ve eşlik eden bir vaka sınıfını tanımlayarak bunu yapabileceğimi biliyorum, ancak bu görüntülerin bazıları yüzlerce sütun içeriyor (iç içe geçirilmiş tuples gerektirir; tuples) ve bunu yapmak için çok fazla görüş var, yani yazmak/üretmek/korumak için çok fazla kod var. Mümkünse bundan kaçınmak isterim.

Bu Slick'te yapılabilir mi? Statik koddaki sütunları tanımlamak zorunda kalmadan bir Table sınıfını tanımlayarak (bir dinamik sütun dizesi listesiyle bazı sınıfları başlatabilirsiniz), ya da sql"""..."""'u kullanarak bir SQL sorgusu oluşturarak ve bir şekilde bir sütun kümesini döndürmek üzere bir şekilde .as[...] elde etmek için keyfi uzunluk

Gerçek sütun türleriyle özel bir şey yapmam gerekmiyor: veritabanı tarafında, türlerin bir karışımı var, ancak bunların tümü, Slick tarafında metin sütunları olarak ele alınırsa Bana uyar.

+2

İlginç bir soru, sadece bir not olarak, sütun sınırı artık daha yeni sürümlerde kaldırıldı. –

+1

@ EndeNeu'nun yorumunu takip etmek için bkz. Http://slick.typesafe.com/doc/2.1.0/userdefined.html#using-custom-record-types-in-queries. –

cevap

3

Kaygan, gereksinimlerinize uygun değildir.

Rasgele sütunlara erişmek istediğiniz an (örneğin, List[String] sütun adlarını kullanarak), şemayı doğrulayamadığından, Slick'in sağladığı tüm güvenlik avantajlarını kaybedersiniz.

Bu, Slick'in masa sınıflarını geride bırakmak ve oluşturulan SQL'i kullanarak (String sorgularını kullanarak) tamamen dinamik bir çözüm bulmak zorunda kalacağınız anlamına gelir.

Slick SQL'i elle yazmanıza izin verirken (StaticQuery.query işlevlerine bakın), diğer kütüphaneler bu görev için daha uygundur. ScalikeJDBC'ye bir göz atmanızı öneriyorum.

+1

Bu bizim de vardığımız sonuç. JOOQ'a geçtik ve çok memnun kaldık. – Alex

+0

jOOQ Scala entegrasyonları ile nasıl hareket ediyor? ('Seçenek 've benzeri?) – Chris

+0

JOOQ için hâlâ oldukça yeniyiz, bu yüzden bu yetkiliye cevap veremem, ancak Scala entegrasyonunun iyi ama harika olmadığını buldum. Genel jOOQ çok etkileyici bir ORM'dir ve onun (sınırlı) Scala entegrasyonu bizi engellememektedir. – Alex