Null Literals and Type Inference (Entity SQL)


Null literals are compatible with any type in the Entity SQL type system. However, for the type of a null literal to be inferred correctly, Entity SQL imposes certain constraints on where a null literal can be used.

Typed nulls can be used anywhere. Type inference is not required for typed nulls because the type is known. For example, you can construct a null of type Int16 with the following Entity SQL construct:

(cast(null as Int16))

Free-floating null literals can be used in the following contexts:

  • As an argument to a CAST or TREAT expression. This is the recommended way to produce a typed null expression.

  • As an argument to a method or a function. Standard overload rules apply.

  • As one of the arguments to an arithmetic expression such as +, -, or /. The other arguments cannot be null literals, otherwise type inference is not possible.

  • As any of the arguments to a logical expression (AND, OR, or NOT). All the arguments are known to be of type Boolean.

  • As the argument to an IS NULL or IS NOT NULL expression.

  • As one or more of the arguments to a LIKE expression. All arguments are expected to be strings.

  • As one or more of the arguments to a named-type constructor.

  • As one or more of the arguments to a multiset constructor. At least one argument to the multiset constructor must be an expression that is not a null literal.

  • As one or more of the THEN or ELSE expressions in a CASE expression. At least one of the THEN or ELSE expressions in the CASE expression must be an expression other than a null literal.

Free-floating null literals cannot be used in other scenarios. For example, they cannot be used as arguments to a row constructor.

Entity SQL Overview