OpenSearch/docs/reference/modules/scripting
Nik Everett d03b8e4abb Implement reading from null safe dereferences
Null safe dereferences make handling null or missing values shorter.
Compare without:
```
if (ctx._source.missing != null && ctx._source.missing.foo != null) {
  ctx._source.foo_length = ctx.source.missing.foo.length()
}
```

To with:
```
Integer length = ctx._source.missing?.foo?.length();
if (length != null) {
  ctx._source.foo_length = length
}
```

Combining this with the as of yet unimplemented elvis operator allows
for very concise defaults for nulls:
```
ctx._source.foo_length = ctx._source.missing?.foo?.length() ?: 0;
```

Since you have to start somewhere, we started with null safe dereferenes.

Anyway, this is a feature borrowed from groovy. Groovy allows writing to
null values like:
```
def v = null
v?.field = 'cat'
```
And the writes are simply ignored. Painless doesn't support this at this
point because it'd be complex to implement and maybe not all that useful.

There is no runtime cost for this feature if it is not used. When it is
used we implement it fairly efficiently, adding a jump rather than a
temporary variable.

This should also work fairly well with doc values.
2016-11-09 07:20:11 -05:00
..
advanced-scripting.asciidoc Reorganise scripting docs (#18132) 2016-05-04 18:17:10 +02:00
expression.asciidoc improve date api for expressions/painless fields 2016-05-31 09:32:33 -04:00
fields.asciidoc Renamed all AUTOSENSE snippets to CONSOLE (#18210) 2016-05-09 15:42:23 +02:00
groovy.asciidoc Groovy is no longer the default scripting language 2016-11-05 16:31:34 +01:00
native.asciidoc Revert "Tests: Remove a couple test uses of onModule (#21414)" 2016-11-09 11:32:16 +01:00
painless-syntax.asciidoc Implement reading from null safe dereferences 2016-11-09 07:20:11 -05:00
painless.asciidoc Disable regexes by default in painless 2016-09-12 14:09:43 -04:00
security.asciidoc Docs: Replace [source,json] with [source,js] 2016-05-24 11:17:27 -04:00
using.asciidoc Cleanup ScriptType (#21179) 2016-10-31 13:48:51 -07:00