use of com.orientechnologies.orient.core.sql.functions.OSQLFunctionRuntime in project orientdb by orientechnologies.
the class ODistributedStorage method mergeResultByAggregation.
protected Object mergeResultByAggregation(final OCommandExecutorSQLSelect select, final Map<String, Object> iResults) {
final List<Object> list = new ArrayList<Object>();
final ODocument doc = new ODocument();
list.add(doc);
boolean hasNonAggregates = false;
final Map<String, Object> proj = select.getProjections();
for (Map.Entry<String, Object> p : proj.entrySet()) {
if (!(p.getValue() instanceof OSQLFunctionRuntime)) {
hasNonAggregates = true;
break;
}
}
if (hasNonAggregates) {
// MERGE NON AGGREGATED FIELDS
for (Map.Entry<String, Object> entry : iResults.entrySet()) {
final List<Object> resultSet = (List<Object>) entry.getValue();
for (Object r : resultSet) {
if (r instanceof ODocument) {
final ODocument d = (ODocument) r;
for (Map.Entry<String, Object> p : proj.entrySet()) {
// WRITE THE FIELD AS IS
if (!(p.getValue() instanceof OSQLFunctionRuntime))
doc.field(p.getKey(), ((ODocument) r).field(p.getKey()));
}
}
}
}
}
final List<Object> toMerge = new ArrayList<Object>();
// MERGE AGGREGATED FIELDS
for (Map.Entry<String, Object> p : proj.entrySet()) {
if (p.getValue() instanceof OSQLFunctionRuntime) {
// MERGE RESULTS
final OSQLFunctionRuntime f = (OSQLFunctionRuntime) p.getValue();
toMerge.clear();
for (Map.Entry<String, Object> entry : iResults.entrySet()) {
final List<Object> resultSet = (List<Object>) entry.getValue();
for (Object r : resultSet) {
if (r instanceof ODocument) {
final ODocument d = (ODocument) r;
toMerge.add(d.rawField(p.getKey()));
}
}
}
// WRITE THE FINAL MERGED RESULT
doc.field(p.getKey(), f.getFunction().mergeDistributedResult(toMerge));
}
}
return list;
}
use of com.orientechnologies.orient.core.sql.functions.OSQLFunctionRuntime in project orientdb by orientechnologies.
the class OCommandExecutorSQLCreateVertex method execute.
/**
* Execute the command and return the ODocument object created.
*/
public Object execute(final Map<Object, Object> iArgs) {
if (clazz == null)
throw new OCommandExecutionException("Cannot execute the command because it has not been parsed yet");
// CREATE VERTEX DOES NOT HAVE TO BE IN TX
return OGraphCommandExecutorSQLFactory.runWithAnyGraph(new OGraphCommandExecutorSQLFactory.GraphCallBack<Object>() {
@Override
public Object call(final OrientBaseGraph graph) {
final OrientVertex vertex = graph.addTemporaryVertex(clazz.getName());
if (fields != null)
// EVALUATE FIELDS
for (final OPair<String, Object> f : fields) {
if (f.getValue() instanceof OSQLFunctionRuntime)
f.setValue(((OSQLFunctionRuntime) f.getValue()).getValue(vertex.getRecord(), null, context));
}
OSQLHelper.bindParameters(vertex.getRecord(), fields, new OCommandParameters(iArgs), context);
if (content != null)
vertex.getRecord().merge(content, true, false);
if (clusterName != null)
vertex.save(clusterName);
else
vertex.save();
return vertex.getRecord();
}
});
}
Aggregations