ফিল্টার সিনট্যাক্স

এই পৃষ্ঠাটি ব্যাখ্যা করে যে সিনট্যাক্সটি আপনাকে অ্যাকাউন্ট ফিল্টার করতে ব্যবহার করতে হবে।

বাক্য গঠন

পূর্ণসংখ্যা ব্যতীত অন্য সকল মান অবশ্যই দ্বৈত উদ্ধৃতিতে আবদ্ধ থাকতে হবে (")। একটি নির্দিষ্ট ক্ষেত্র কী মান গ্রহণ করে তা জানতে, সেই ক্ষেত্রের রেফারেন্স ডকুমেন্টেশন দেখুন।

আপনি একই ক্যোয়ারীতে একাধিক ক্ষেত্র ফিল্টার করতে AND ব্যবহার করতে পারেন। আপনি একাধিক relationship(...) এবং service(...) ফিল্টার একত্রিত করতে AND ব্যবহার করতে পারেন। এখানে একটি উদাহরণ রয়েছে যা একাধিক 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") ব্যবহার করতে পারবেন না।

বন্ধনী AND এবং OR অপারেটরগুলির সাথে, এবং relationship(...) এবং service(...) এর মত ফাংশন আহ্বানে অনুমোদিত নয়৷

accountName এবং accountIdAlias মত স্ট্রিং ক্ষেত্রগুলির জন্য, আপনি একটি নির্দিষ্ট শব্দ বা অক্ষরের ক্রম ধারণ করে এমন মানগুলির জন্য ফিল্টার করতে পারেন যা তারকাচিহ্ন ( * ) এ ক্রমটি আবদ্ধ করে। উদাহরণ স্বরূপ, accountName = "*foo*" foo ধারণ করে একটি accountName সহ সমস্ত অ্যাকাউন্ট ফেরত দেয়, যেমন "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
    : " = " | " != "
    ;