2012-12-12 1 views
2

SQLite 데이터베이스에서 텍스트 열의 길이를 검색하기 위해 scalaquery를 사용하려고하면 잘못된 SQL이 생성됩니다. 난이 얻을 :scalaquery에서 SQLite 용으로 지원되지 않는 길이() 함수

SELECT "t1"."title" FROM "GoodPages" "t1" WHERE ({fn length("t1"."title")} > 65) 

때 쿼리가 정말

SELECT "t1"."title" FROM "GoodPages" "t1" WHERE length("t1"."title") > 65 

해야 내가이 쿼리를 얻기를 위해 사용하는 for 완은

for (f <- Foo if f.title.length > 65) yield f.title 

입니다 그리고 내가 가지고있는 데프 표는

입니다
object Foo extends Table[(Int,String)]("Foo") { 
    def id = column[Int]("id") 
    def title = column[String]("title") 
    def * = id ~ title 
} 

scalaquery 그냥 잘못된 length() 함수를 생성하는 것처럼 보이지만 코드에서이 문제가 발생하지 않으며 찾을 수없는 이것에 대해 인터넷에서 아무것도 발견했습니다.

답변

1

생성 된 SQL은 JDBC escape syntax,보다 정확하게는 JDBC escape syntax for fn keyword을 사용합니다. 이 구문은 JDBC 드라이버에서 사용할 수 있지만 불행하게도 SQLite 드라이버에서는 지원되지 않습니다. SQLiteDriver는 슬릭 1.0.0은 당신을 위해 작동하지 않는 경우에 우리는 아마도 다른 해결책을 찾을 수 있습니다

case Apply(j: Library.JdbcFunction, ch) if j != Library.Concat => 
    /* The SQLite JDBC driver does not support ODBC {fn ...} escapes, so we try 
    * unescaped function calls by default */ 
    b"${j.name}(" 
    b.sep(ch, ",")(expr(_, true)) 
    b")" 
case s: SimpleFunction if s.scalar => 
    /* The SQLite JDBC driver does not support ODBC {fn ...} escapes, so we try 
    * unescaped function calls by default */ 
    b"${s.name}(" 
    b.sep(s.nodeChildren, ",")(expr(_, true)) 
    b")" 

을 제안에서

슬릭 1.0.0는 다음 코드로 이것을 알고있다. 알려줘.

관련 문제