Improve param, Inequality and Value Variables syntax - Under Construction (draft)

Comma: "And"
Single Pipe: "OR"
Double pipe: "if/else" eg: `uid(0x1, 0x2 || val(a), 0xe)`
Cond: "first operand must be a boolean" eg:`uid(cond(val(x), val(Y), 0xe)))`

We can find cond param in https://docs.dgraph.io/query-language/#math-on-value-variables

This would result in less typing and better logic treatment with params.

BTW, in some cases would be nice to extract the params to a custom block so we can have an organized call, and also the params could be used in other blocks or nested blocks.

Examples:

Original usage with Sorting

This example shows that we would have a lot of typing adding more and more orderasc. Imagine if we have 3 orderasc and 3 orderdesc. The typing would be bad.

{
    me(func: uid(0x1, 0x2), orderasc: name, orderasc: age, first: 6, offset: 1) {
		 	name
		 	age
	 	}
	 }
  • q(func: ..., orderasc: predicate)
  • q(func: ..., orderdesc: val(varName))
  • q(func: ..., orderdesc: val(varName|varName2|AnotherVar))
  • predicate (orderdesc: predicate) { ... }
  • predicate @filter(...) (orderasc: N) { ... }
  • q(func: ..., orderasc: (predicate1|predicate2) )

instead of (https://docs.dgraph.io/query-language/#sorting)

  • q(func: ..., orderasc: predicate)
  • q(func: ..., orderdesc: val(varName))
  • predicate (orderdesc: predicate) { ... }
  • predicate @filter(...) (orderasc: N) { ... }
  • q(func: ..., orderasc: predicate1, orderdesc: predicate2)

example 1

{
    me(func: uid(0x1, 0x2), orderasc: (name|age) first: 6, offset: 1) {
		 	name
		 	age
	 	}
	 }

If we have name we order by name, and if we found nodes with age, then we keep ordering by age.

example 2

{
    me(func: uid(0x1, 0x2), orderasc: (name,age) first: 6, offset: 1) {
		 	name
		 	age
	 	}
	 }

Well, this would be the same as example 1, cuz there’s no meaning add a constraint here.

Original usage with Value Variables

Syntax Examples:

  • val(var-name)
  • val(var-name|var-name2|var-name3) “Could also use comma”
  • val(var-name,var-name2 || var-name3,var-name4)
    "if the first two variables are false, return the second “var-name3,var-name4”.

Value variables are used by extracting the values with val(var-name) , or by extracting the UIDs with uid(var-name) .

Original usage with Inequality

Syntax Examples:

  • eq(predicate, value)
  • eq(val(varName), value)
  • eq(val(varName|varName2|varName3), value)
  • eq(predicate, val(varName))
  • eq(predicate, val(varName|varName2|varName3))
  • eq(count(predicate), value)
  • eq(predicate, [val1, val2, ..., val(N]))
  • eq(predicate, [val1, val2, ..., val(N|N2|N3))
  • eq(predicate, [$var1, "value", ..., val(N|N2|N3)])

less than, less than or equal to, greater than and greater than or equal to

Syntax Examples: for inequality IE

  • IE(predicate, value)
  • IE(val(varName), value)
  • IE(val(varName|varName2|varName3), value)
  • IE(predicate, val(varName))
  • IE(predicate, val(varName|varName2|varName3))
  • IE(count(predicate), value)