How to generate query based off from user input

Hi,

Is there a way to Short circuit a filter, e.g. using some sort of OR logic!?
For example, lets say we have the query snippet:

    @filter(uid(C_ID)) 

, where C_ID is populated as:

    var(func:eq(customer_id, "123455999")) {
       C_ID AS foo_id
   }

If the customer_id value (in this case 123455999) did not have a value, is it possible to have logic such that the filter does not fire?

Thanks

What is the type of foo_id? If this is a custom ID, why you are using uid() func? What value must be evaluated?

Here is a working example:

Mutation:

{
set {
 _:e1 <ehid> "1" .
 _:c1 <customer_id> "2" .
 _:c1 <subscribes_as> _:e1 .
     
 _:o1 <xcode> "x3" .
 _:o1 <authenticate_as> _:c1 .
}
}

Query (with filter)

{  
 var(func:eq(customer_id, "2")) {
  C_ID AS customer_id
 }

search_by_ehid_using_cust_id_link (func:eq(ehid, "1")) @normalize {
  ~subscribes_as @filter(uid(C_ID))  {
    ~authenticate_as{
      result: xcode
    }
   }
 }     
}

If I pass in customer_id value other than 2, the filter correctly kicks in and no xcode is returned. If however, I dont have a customer_id value at all (and as per your question, this will be an int, so prob be zero in that case ) - i dont want the filter logic to be applied.

Do you mean something like this?

For me, still not clear what you wish as result.

{  
 var(func:eq(customer_id, "2")) {
  C_ID AS customer_id
 }

search_by_ehid_using_cust_id_link (func:eq(ehid, "1")) @normalize {
  ~subscribes_as @filter(uid(C_ID))  {
    ~authenticate_as{
      result: xcode
    }
   }
 }     
}

Resutl

{
  "data": {
    "search_by_ehid_using_cust_id_link": [
      {
        "result": "x3"
      }
    ]
  }
}

This is the main result, which you find it fine.

With the same query, but set to 1 / 0 / or any

var(func:eq(customer_id, "1"))

I get

{
  "data": {
    "search_by_ehid_using_cust_id_link": []
  }
}

And any other combination I gonna have the same result. With this in mind, I can’t get what exactly you wanna have.

Sorry, I know its hairy -

but if customer_id has a value, I want it injected into filter, and the filter used, e.g.

        var(func:eq(customer_id, "10000000000"))

if customer_id is not set by the client (and because its an int, will have a default value of 0) - i dont want the filter to run.

so if ehid is β€œ1” and customer_id not set, i want xcode to be x3

@include looks like it would have helped

hey @MichelDiz, just wondering if my last comment clarified better what i am trying to achieve and/or if u had any other thoughts? Cheers

Are you just wanting to get the single one with a filter if a specific id is given, and if not then get all?

That logic will have to be done by the UI and sent as two different queries.

Ok, thanks. In my use case i have quite a few combinations of data with the same pattern, which is why i was trying to avoid pushing this logic to the client

Build a reusable function that generates that part of the query.

Edit: I updated the name to reflect the actual desired effect.