2016-10-10 5 views
1

기본적으로 esqueleto에서 16 개 이상의 열을 반환하는 쿼리를 사용할 수 있습니까?Esqueleto : 16 개 이상의 열로 쿼리를 실행하는 방법은 무엇입니까?

나는 상호 작용해야하는 레거시 DB를 가지고 있으며 30-40 열을 가진 테이블을 조인 한 다음 필요로하는 가능한 80-100 열 중 20 개를 선택해야합니다. 그래서 큰 열을 가져 오지 않을 것입니다. 않는 한. esqueleto에서는 16 열로 제한되어있는 것 같습니다. 고아 인스턴스없이이를 극복 할 수있는 방법이 있습니까?

미리 감사드립니다.

PS 인위적인 예제가 필요한 경우 PS를 제공합니다.

나는 기본적으로 좀 더 16 열, 다음 결과에 그 중첩 된 튜플 및 패턴 일치를 취하는로 변환 얻을 수 있습니다 당신은 튜플의 튜플을 할 수있는 문서에서 발견

UPDATE 데이터 형식 내가 필요하거나 필요에 따라 개별 값을 사용해야합니다.

참고 당신은 당신이 나를 내가 튜플을 할 수있는 알고 도움이 무엇인가 '힌트'를 볼 수 오른쪽에있는 모든 방법을 보이는 경우를 보면 당신은 SqlSelect에 대한 설명서를 보면

튜플의

+0

'persistent' 라이브러리에서'rawSql' 함수를 항상 사용할 수 있습니다. 또 다른 방법은 약 20 개의 튜플을 반환하는 Esqueleto의 홍보를 만드는 것입니다. 그러나 나는 이것이 당신이 찾고있는 대답이 아니라고 생각합니다. :) – Sibi

+0

rawSql은 내가 실수하지 않는 한 8 열 제한이있는 것으로 보입니다. (잠시 동안이 질문을 파헤 쳤습니다.) – sbditto85

+0

예 8 만 8 https://hackage.haskell.org/package/persistent-2.2.4 /docs/Database-Persist-Sql.html#t:RawSql – sbditto85

답변

2

사용자 지정 데이터 형식을 만들어 해당 쿼리의 결과를 나타내며 원하는 수의 필드를 가질 수 있습니다. 그런 다음 해당 데이터에 대한 관련 유형 클래스를 구현해야합니다 (PersistEntity이 주요 것 같습니다). 이로 인해 잠재적 인 오류를 예방하는 데 도움이되도록 필드에 관련성 높은/의미있는 이름을 제공 할 수 있습니다.

data MyResult 
    = MyResult 
    { fieldOne :: SomeType 
    , fieldTwo :: OtherType 
    , ... 
    , fieldSixteen :: Text 
    } 

대신 (a, b, c, ..., e)를 반환

, 당신은 MyResult a b c ... e를 반환 할 것입니다.

편의상, Persistent 's Entity definition quasiquoter를 사용하여 결과를 정의하고 싶을 것입니다. 그 정의를 마이그레이션을 위해 생성하지 않는 방식으로 사용하고자 할 것입니다.

+0

"편의상 Persistent 's Entity 정의 쿼지 쿼터를 사용하여 결과를 정의하고자 할 것입니다.이 정의를 ' 이를 위해 마이그레이션을 시도하십시오. " 그게 무슨 뜻인지 모르겠습니다. 나는 오히려 새로운/yesod/영구적 인 haskell에있어 ... 그'공유 [mkPersist sqlSettings, mkMigrate "migrateAll"] $ (persistFileWith lowerCaseSettings "config/models")는 yesod의 일부입니까? Model.hs에? – sbditto85

+0

네,하지만 테이블 정의가 아니기 때문에'mkMigrate'는 원하지 않습니다.하지만 쿼리의 리턴 타입을 정의하십시오. 그래서 당신은'share [mkPersist sqlSettings] [persistLowerCase | {- 당신의 모델 정의 -} |]'. – ephrion

+0

쿨, 나는 그것을 밖으로 시도하고 가장 가능성이 올바른 것으로 답변을 표시합니다. 바라기를 바래서 일하게. – sbditto85

관련 문제