code: private List<Expression> nameExpressions(List<Expression> expression) {
  		return IntStream.range(0, expression.size())
  			.mapToObj(idx -> {
  				currentFieldIndex = idx;
  				return expression.get(idx).accept(namingVisitor);
  			})
  			.collect(Collectors.toList());
  	}
docs: Ensures that all expressions have a derivable name. There is a few categories and naming
  rules that apply:
  <ul>
  <li>{@link FieldReferenceExpression}, {@link TableReferenceExpression},
  {@link LocalReferenceExpression} and {@link BuiltInFunctionDefinitions#AS}
  are already named}</li>
  <li>{@link BuiltInFunctionDefinitions#CAST} use the name of underlying expression
  appended with the name of the type</li>
  <li>{@link BuiltInFunctionDefinitions#GET} uses pattern
  <i>[underlying name][$fieldName]{1, }</i></li>
  <li>if none of the above apply a name <i>[_c(idx)]</i> is used where idx is
  the index within given expressions</li>
  </ul>