2013-06-28 2 views
0

기본적으로 테이블을 두 개의 목록으로 분리하는 where 절이 있습니다. 모든 필드가 "완료"(-1이 아님) 한 필드와 필드가 불완전한 필드. 문제는 이러한 필드 중 하나가 nullable 일뿐만 아니라 다른 필드가 true이면 불완전한 것으로 계산하기를 원합니다. Squeryl Nullable Column이있는 Where 절은 효과가 없습니다.

//l and p are my two tables(This is in a join) 
//passed in an option incompletes. If incompletes is true, give back incomplete values 
where(
    //SHOW INCOMPLETES 
    (
    p.attr1 === -1 or 
    p.attr2 === -1 or 
    p.attr3 === -1 or 
    //only need to check attr4 if this var is true 
    (p.attr4 === -1).inhibitWhen(!l.needToCheckAttr4) //I've also tried === Some(-1) 
    ).inhibitWhen(!incompletes.isDefined) and 
    // SHOW COMPLETES 
    (
    p.price <> -1 and 
    p.serverCost <> -1 and 
    p.depreciation <> -1 and 
    (p.attr4 <> -1).inhibitWhen(!l.needToCheckAttr4) 
    ).inhibitWhen(incompletes.isDefined) 
) 

attr4 라인 동안 조건의 나머지 모든 작업이 제대로 적용되지 것 같다 : 절은

. 그것은 다른 조건들이 사실이라면 그것이 완성 된 것처럼 렌더링됩니다.

편집 : 그래서 inhibitWhen과 통화하는 것이 좋습니다. 한 줄에 두 개의 다른 표를 사용하는 데 문제가 있습니까 (l 및 p)? 좋아

답변

1

그래서 그냥 inhibitWhen에 포기하고 아마 처음부터 했어야

(p.attr4 === -1 and l.needToCheckAttr4 === true) 

및 ...

((p.attr4 <> -1 and l.needToCheckAttr4 === true) or (l.needToCheckAttr4 === false)) 

을 사용했다.

+1

그래. inhibitWhen을 사용하여 클라이언트 측 조건을 검사합니다. 절이 데이터베이스 상태를 사용한다면 inhibitWhen이 적절하지 않을 것입니다. –