2012-06-01 4 views
1

나는 scalaquery를 사용하여 oracle 및 postgres 서버에 연결합니다. 이 동작은 Oracle과 Postgres 모두에서 발생하지만 Postgres에서만 유효한 (여전히 잘못된) SQL입니다. 어떤 점에서 스칼라 쿼리로 잘못된 SQL이 생성되었습니다.

, 나는 형태의 scalaquery에 쿼리를 실행 해요 :

row.foo.bind == parameter.foo || row.foo inSetBind parameter.foo.children 

매개 변수는에 foo는 것으로 알려져있는 특성이다.

문제는 여기에 실행 ~ 100 쿼리에서 스칼라 쿼리는 형태의, 한 번에 올바른 SQL을 생성하는 것입니다

... 
WHERE row.foo = ? or row.foo in (?, ?, ?, ?, ?) 
... 

대신

... 
WHERE row.foo = ? or false 
... 
를 생성하는 대부분의 시간

왜 이런 일이 일관성 없게 발생합니까? 버그입니까? (나는 그렇다고 생각합니다) 어떻게 해결할 수 있습니까?

답변

1

대부분의 경우 parameter.foo에 자식이 없으므로 쿼리에서 빈 세트가 발견됩니다.

WHERE row.foo IN()이 유효한 SQL이 아니므로 false으로 쓰여졌습니다.

코드가 oracle DB를 대상으로하고 있음에도 불구하고 여전히 false의 문제가 발생하지만 근본 원인이 제거되었습니다.