private QueryResult ExecuteAsParallel(IEnumerable<String> myLines, IGraphDBSession myIGraphDBSession, GraphQLQuery myGQLQuery, VerbosityTypes verbosityTypes, UInt32 parallelTasks = 1, IEnumerable<String> comments = null) { var queryResult = new QueryResult(); var aggregatedResults = new List<IEnumerable<Vertex>>(); #region Create parallel options var parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = (int)parallelTasks }; #endregion Int64 numberOfLine = 0; Parallel.ForEach(myLines, parallelOptions, (line, state) => { if (!IsComment(line, comments)) { Interlocked.Add(ref numberOfLine, 1L); if (!IsComment(line, comments)) // Skip comments { var qresult = ExecuteQuery(line, myIGraphDBSession, myGQLQuery); #region VerbosityTypes.Full: Add result if (verbosityTypes == VerbosityTypes.Full) { lock (aggregatedResults) { aggregatedResults.Add(qresult.Vertices); } } #endregion #region !VerbosityTypes.Silent: Add errors and break execution if (qresult.ResultType != ResultType.Successful && verbosityTypes != VerbosityTypes.Silent) { lock (queryResult) { queryResult.PushIErrors(new[] { new Errors.Error_ImportFailed(line, numberOfLine) }); queryResult.PushIErrors(qresult.Errors); queryResult.PushIWarnings(qresult.Warnings); } state.Break(); } #endregion } } }); //add the results of each query into the queryResult queryResult.Vertices = AggregateListOfListOfVertices(aggregatedResults); return queryResult; }
public QueryResult Insert(ManipulationAttributes myManipulationAttributes, Boolean checkUniqueness = true) { var attributes = myManipulationAttributes.Attributes; var undefinedAttributes = myManipulationAttributes.UndefinedAttributes; var specialTypeAttributes = myManipulationAttributes.SpecialTypeAttributes; if (_graphDBType.IsAbstract) { return new QueryResult(new Error_InvalidType(_graphDBType, "It is not possible to insert DBObjects of an abstract _graphDBType")); } #region Data Exceptional<DBObjectStream> dbObjectStream; #endregion #region create new DBObject dbObjectStream = _dbContext.DBObjectManager.CreateNewDBObject(_graphDBType, attributes.ToDictionary(key => key.Key.Definition.Name, value => value.Value), undefinedAttributes, specialTypeAttributes, _dbContext.SessionSettings, checkUniqueness); if (dbObjectStream.Failed()) { return new QueryResult(dbObjectStream.IErrors); } #endregion #region set backward edges for reference attributes var userdefinedAttributes = from attr in attributes where attr.Key.TypeOfAttribute.IsUserDefined select attr; if (userdefinedAttributes.CountIsGreater(0)) { var setBackEdges = SetBackwardEdges(userdefinedAttributes.ToDictionary(key => key.Key.Definition.UUID, value => value.Value), dbObjectStream.Value.ObjectUUID); if (setBackEdges.Failed()) return new QueryResult(setBackEdges.IErrors); } #endregion #region Create QueryResult var readOut = GetManipulationResultSet(dbObjectStream, attributes, undefinedAttributes, specialTypeAttributes); var selResultSet = new List<Vertex> { readOut.Value }; var queryResult = new QueryResult(selResultSet); #endregion #region If readout creation failed, this is a readon to fail the query result at all if (readOut.Failed()) { queryResult.PushIErrors(readOut.IErrors); } #endregion return queryResult; }
private QueryResult ExecuteAsSingleThread(IEnumerable<String> myLines, IGraphDBSession myIGraphDBSession, GraphQLQuery myGQLQuery, VerbosityTypes verbosityTypes, IEnumerable<String> comments = null) { var queryResult1 = new QueryResult(); Int64 numberOfLine = 0; var query = String.Empty; var aggregatedResults = new List<IEnumerable<Vertex>>(); foreach (var _Line in myLines) { numberOfLine++; #region Skip comments if (IsComment(_Line, comments)) { continue; } #endregion query += _Line; var qresult = ExecuteQuery(query, myIGraphDBSession, myGQLQuery); #region VerbosityTypes.Full: Add result if (verbosityTypes == VerbosityTypes.Full) { aggregatedResults.Add(qresult.Vertices); } #endregion #region !VerbosityTypes.Silent: Add errors and break execution if (qresult.ResultType == ResultType.Failed) { if (qresult.Errors.Any(e => (e is Error_GqlSyntax) && (e as Error_GqlSyntax).SyntaxErrorMessage.Equals("Mal-formed string literal - cannot find termination symbol."))) { Debug.WriteLine("Query at line [" + numberOfLine + "] [" + query + "] failed with " + qresult.GetIErrorsAsString() + " add next line..."); continue; } if (verbosityTypes != VerbosityTypes.Silent) { queryResult1.PushIError(new Error_ImportFailed(query, numberOfLine)); queryResult1.PushIErrors(qresult.Errors); queryResult1.PushIWarnings(qresult.Warnings); } break; } else if (qresult.ResultType == ResultType.PartialSuccessful && verbosityTypes != VerbosityTypes.Silent) { queryResult1.PushIWarning(new Warning_ImportWarning(query, numberOfLine)); queryResult1.PushIWarnings(qresult.Warnings); } #endregion query = String.Empty; } //add the results of each query into the queryResult queryResult1.Vertices = AggregateListOfListOfVertices(aggregatedResults); return queryResult1; }