过滤器语法

本页介绍了过滤帐号时必须使用的语法。

语法

整数以外的所有值都必须用英文双引号 (") 括起来。如需了解特定字段接受哪些值,请参阅该字段的参考文档

您可以使用 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*" 会返回 accountName 中包含 foo(如“storeFoo”)的所有帐号。

您可以使用 !=* 过滤出不包含特定序列的值。例如,accountName != "*foo*" 会返回 accountName 中不包含 foo 的所有帐号。

多余的空格将被忽略。例如,foo AND bar 等同于 foo 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
    : " = " | " != "
    ;