private int doExecute(OIndex index, OCommandContext ctx, OExpression keyExp, OExpression valueExp) { int count = 0; Object key = keyExp.execute((OResult) null, ctx); Object value = valueExp.execute((OResult) null, ctx); if (value instanceof OIdentifiable) { index.put(key, (OIdentifiable) value); count++; } else if (value instanceof OResult && ((OResult) value).isElement()) { index.put(key, ((OResult) value).getElement().get()); count++; } else if (value instanceof OResultSet) { ((OResultSet) value).elementStream().forEach(x -> index.put(key, x)); } else if (OMultiValue.isMultiValue(value)) { Iterator iterator = OMultiValue.getMultiValueIterator(value); while (iterator.hasNext()) { Object item = iterator.next(); if (value instanceof OIdentifiable) { index.put(key, (OIdentifiable) value); count++; } else if (value instanceof OResult && ((OResult) value).isElement()) { index.put(key, ((OResult) value).getElement().get()); count++; } else { throw new OCommandExecutionException("Cannot insert into index " + value); } } } return count; }