필터 구문

이 페이지에서는 계정 필터링에 사용해야 하는 구문을 설명합니다.

문법

정수를 제외한 모든 값은 큰따옴표 (")로 묶어야 합니다. 특정 필드가 허용하는 값을 알아보려면 해당 필드의 참조 문서를 확인하세요.

AND를 사용하여 동일한 쿼리의 여러 필드를 필터링할 수 있습니다. AND를 사용하여 여러 relationship(...)service(...) 필터를 결합할 수도 있습니다. 다음은 여러 relationship(...)service(...) 필터를 결합하는 예입니다.

(relationship(service(type = "ACCOUNT_MANAGEMENT") AND service(handshakeState = "PENDING"))) OR (accountName = "store" AND relationship(...))

이 예에서는 다음 계정을 반환합니다.

  • 다른 계정과 계정 관리 관계가 있고 수락 대기 중인 추가 관계인 모든 계정

  • 다른 계정과 관계가 있는 표시 이름이 "store"인 모든 계정

AND를 사용하여 동일한 필드의 여러 값을 필터링할 수 없습니다. 예를 들어 accountName = "*A*" AND accountName = "*B*"는 사용할 수 없습니다.

OR를 사용하여 동일한 쿼리의 두 필드를 필터링할 수 있습니다. OR 연산자의 양쪽에 필터 기준을 괄호로 묶습니다. 예를 들면 (accountName = "storeA") OR (accountName = "storeB")입니다.

두 필드를 결합하는 데는 OR만 사용할 수 있습니다. 예를 들어 (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC")는 사용할 수 없습니다.

ANDOR 연산자와 함께, 그리고 함수 호출(예: relationship(...), service(...))에서 괄호는 허용되지 않습니다.

accountNameaccountIdAlias과 같은 문자열 필드의 경우 특정 단어 또는 문자 시퀀스를 별표로 묶어 값을 필터링할 수 있습니다(*). 예를 들어 accountName = "*foo*"foo가 포함된 accountName가 있는 모든 계정을 반환합니다(예: 'storeFoo').

!=*를 사용하여 특정 시퀀스가 포함되지 않은 값을 필터링할 수 있습니다. 예를 들어 accountName != "*foo*"foo가 포함되지 않은 accountName가 있는 모든 계정을 반환합니다.

추가 공백은 무시됩니다. 예를 들어 foo AND barfoo AND bar와 동일합니다.

사양

필터는 AIP 필터 사양의 하위 집합과 공식 EBNF 문법을 따릅니다.

filter
    : accountFilterDisj
    | accountFilterConj
    ;
accountFilterDisj
    : "(" accountFilterConj " OR " accountFilterConj ")"
    ;
accountFilterConj
    : accountFilter {" AND " accountFilter}
    ;
accountFilter
    : displayNameFilter | relationshipFn
    ;
displayNameFilter
    : "displayName" comparator value
    ;
relationshipFn
    : "relationship(" relationshipConj ")"
    ;
relationshipConj
    : relationshipFilter {" AND " relationshipFilter}
    ;
relationshipFilter
    : "providerId = " numValue
    | "callerHasAccessToProviderFilter()"
    | "externalAccountId" comparator value
    | "accountIdAlias" comparator value
    | serviceFn
    ;
serviceFn
    : "service(" serviceConj ")"
    ;
serviceConj
    : serviceFilter {" AND " serviceFilter}
    ;
serviceFilter
    : handshakeStateFilter
    | typeFilter
    ;
handshakeStateFilter
    : "handshakeState = " value
    ;
typeFilter
    : "type = " value
    ;
comparator
    : " = " | " != "
    ;