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?

1 Like

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.

1 Like

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.

1 Like