public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { if (myCallingObject is IHyperEdge) { return new FuncParameter((UInt64)((IHyperEdge)myCallingObject).GetAllEdges().Count()); } else if (myCallingObject is ISingleEdge) { UInt64 count = 1; return new FuncParameter(count); } else if (myCallingObject is IncomingEdgeCollection) { return new FuncParameter((UInt64)(myCallingObject as IncomingEdgeCollection).LongCount()); } else if (myCallingObject is IEnumerable<long>) { return new FuncParameter((UInt64)(myCallingObject as IEnumerable<long>).LongCount()); } else if (myCallingObject is IEnumerable<IVertex>) { return new FuncParameter((UInt64)(myCallingObject as IEnumerable<IVertex>).LongCount()); } else { throw new UnknownDBException("Unexpected input for COUNT aggregate."); } }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { _query = myQuery; var vertexType = myGraphDB.GetVertexType<IVertexType>( mySecurityToken, myTransactionToken, new RequestGetVertexType(_typeName), (stats, vType) => vType); _WhereExpression.Validate(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, vertexType); var expressionGraph = _WhereExpression.Calculon(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, new CommonUsageGraph(myGraphDB, mySecurityToken, myTransactionToken)); var toBeDeletedVertices = expressionGraph.Select( new LevelKey(vertexType.ID, myGraphDB, mySecurityToken, myTransactionToken), null, true); //TODO: do sth that is better than that: ew RequestDelete(new RequestGetVertices(_typeName, toBeDeletedVertices.Select(_ => _.VertexID))). return myGraphDB.Delete<QueryResult>( mySecurityToken, myTransactionToken, new RequestDelete(new RequestGetVertices(_typeName, toBeDeletedVertices.Select(_ => _.VertexID))).AddAttributes(_toBeDeletedAttributes), CreateQueryResult); }
/// <summary> /// Executes the function on myCallingObject /// </summary> public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { var currentInnerEdgeType = ((IOutgoingEdgeDefinition)myAttributeDefinition).InnerEdgeType; if (myCallingObject is IHyperEdge && currentInnerEdgeType.HasProperty("Weight")) { var hyperEdge = myCallingObject as IHyperEdge; if (currentInnerEdgeType.HasProperty("Weight")) { var weightProperty = currentInnerEdgeType.GetPropertyDefinition("Weight"); var maxWeight = hyperEdge.InvokeHyperEdgeFunc<Double>(singleEdges => { return Convert.ToDouble( weightProperty.GetValue( singleEdges .OrderByDescending(edge => weightProperty.GetValue(edge)) .First())); }); return new FuncParameter(maxWeight); } } throw new InvalidTypeException(myCallingObject.GetType().ToString(), "Weighted IHyperEdge"); }
public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { if (!(myCallingObject is String)) { throw new FunctionParameterTypeMismatchException(typeof(String), myCallingObject.GetType()); } var pos = Convert.ToInt32(myParams[0].Value); StringBuilder resString = new StringBuilder(); bool dontInsert = false; if (pos > (myCallingObject as String).Length) { dontInsert = true; resString.Append((myCallingObject as String).ToString()); } else { resString.Append((myCallingObject as String).ToString().Substring(0, pos)); } foreach (FuncParameter fp in myParams.Skip(1)) { resString.Append(fp.Value as String); } if(!dontInsert) resString.Append((myCallingObject as String).ToString().Substring(pos)); return new FuncParameter(resString.ToString()); }
public override QueryResult GetResult( GQLPluginManager myPluginManager, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { var resultingVertices = new List<IVertexView>(); ASonesException error = null; #region Specific index var request = new RequestDescribeIndex(_TypeName, _IndexName, _IndexEdition); var indices = myGraphDB.DescribeIndex<IEnumerable<IIndexDefinition>>(mySecurityToken, myTransactionToken, request, (stats, definitions) => definitions); if (indices == null) { error = new IndexTypeDoesNotExistException(_TypeName, _IndexName); } if (String.IsNullOrEmpty(_IndexEdition)) { //_IndexEdition = DBConstants.DEFAULTINDEX; } resultingVertices = new List<IVertexView>() { GenerateOutput(indices, _IndexName) }; #endregion if(error != null) return new QueryResult("", SonesGQLConstants.GQL, 0L, ResultType.Failed, resultingVertices, error); else return new QueryResult("", SonesGQLConstants.GQL, 0L, ResultType.Successful, resultingVertices); }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { Query = myQuery; var indexDef = new IndexPredefinition(_IndexName); indexDef.SetIndexType(_IndexType); indexDef.SetVertexType(_DBType); indexDef.SetEdition(_IndexEdition); //to be indices attributes foreach (var aIndexedProperty in _AttributeList) { indexDef.AddProperty(aIndexedProperty.IndexAttribute.ContentString); } //options for the index if (_options != null) { foreach (var aKV in _options) { indexDef.AddOption(aKV.Key, aKV.Value); } } return myGraphDB.CreateIndex<QueryResult>(mySecurityToken, myTransactionToken, new RequestCreateIndex(indexDef), GenerateResult); }
public IVertex AddVertex(RequestInsertVertex myInsertDefinition, TransactionToken myTransaction, SecurityToken mySecurity) { IVertexType vertexType = GetVertexType(myInsertDefinition.VertexTypeName, myTransaction, mySecurity); if (vertexType.IsAbstract) throw new AbstractConstraintViolationException(myInsertDefinition.VertexTypeName); ConvertUnknownProperties(myInsertDefinition, vertexType); ConvertDefaultValues(myInsertDefinition, vertexType); if (myInsertDefinition.OutgoingEdges != null) CheckOutgoingEdges(myInsertDefinition.OutgoingEdges, vertexType); if (myInsertDefinition.StructuredProperties != null) { CheckAddStructuredProperties(myInsertDefinition.StructuredProperties, vertexType); } CheckMandatoryConstraint(myInsertDefinition, vertexType); if (myInsertDefinition.BinaryProperties != null) CheckAddBinaryProperties(myInsertDefinition, vertexType); return null; }
/// <summary> /// Creates a query plan using a logic expression /// </summary> /// <param name="myExpression">The logic expression</param> /// <param name="myIsLongRunning">Determines whether it is anticipated that the request could take longer</param> /// <param name="myTransaction">The current transaction token</param> /// <param name="mySecurity">The current security token</param> /// <returns>A query plan</returns> public IQueryPlan CreateQueryPlan(IExpression myExpression, Boolean myIsLongRunning, TransactionToken myTransaction, SecurityToken mySecurity) { IQueryPlan result; switch (myExpression.TypeOfExpression) { case TypeOfExpression.Binary: result = GenerateFromBinaryExpression((BinaryExpression) myExpression, myIsLongRunning, myTransaction, mySecurity); break; case TypeOfExpression.Unary: result = GenerateFromUnaryExpression((UnaryExpression)myExpression, myTransaction, mySecurity); break; case TypeOfExpression.Property: result = GenerateFromPropertyExpression((PropertyExpression)myExpression, myTransaction, mySecurity); break; default: throw new ArgumentOutOfRangeException(); } return result; }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { var sw = Stopwatch.StartNew(); QueryResult result = null; if (_DumpFormat.ToString().ToUpper().Equals("GQL")) { var plugin = myPluginManager.GetAndInitializePlugin<IGraphDBExport>("GQLEXPORT"); if (plugin != null) { result = plugin.Export(_DumpDestination, _DumpableGrammar, myGraphDB, myGraphQL, mySecurityToken, myTransactionToken, _TypesToDump, _DumpType); } } sw.Stop(); if (result != null) { return new QueryResult(myQuery, _DumpFormat.ToString(), (ulong)sw.ElapsedMilliseconds, result.TypeOfResult, result.Vertices, result.Error); } else return null; }
/// <summary> /// Constructor /// </summary> public CommonUsageGraph(IGraphDB myIGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken) : this() { _iGraphDB = myIGraphDB; _securityToken = mySecurityToken; _transactionToken = myTransactionToken; _Levels = new Dictionary<int, IExpressionLevel>(); }
public LevelKey(IEnumerable<EdgeKey> myEdgeKey, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { Edges = new List<EdgeKey>(); foreach (var aEdgeKey in myEdgeKey) { if (aEdgeKey.IsAttributeSet) { var vertexType = myGraphDB.GetVertexType<IVertexType> (mySecurityToken, myTransactionToken, new RequestGetVertexType(aEdgeKey.VertexTypeID), (stats, type) => type); var attribute = vertexType.GetAttributeDefinition(aEdgeKey.AttributeID); if (attribute != null && attribute.Kind != AttributeType.Property) { //so there is an edge Edges.Add(aEdgeKey); Level++; AddHashCodeFromSingleEdge(ref _hashcode, aEdgeKey); } else { if (Level == 0) { var newEdgeKey = new EdgeKey(aEdgeKey.VertexTypeID); Edges.Add(newEdgeKey); AddHashCodeFromSingleEdge(ref _hashcode, newEdgeKey); break; } else { break; } } } else { if (Level == 0) { Edges.Add(aEdgeKey); AddHashCodeFromSingleEdge(ref _hashcode, aEdgeKey); break; } else { break; } } } }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { _query = myQuery; return myGraphDB.AlterVertexType<QueryResult>( mySecurityToken, myTransactionToken, CreateNewRequest(myGraphDB, myPluginManager, mySecurityToken, myTransactionToken), CreateOutput); }
public override IEnumerable<IVertexType> AddVertexTypes(IEnumerable<VertexTypePredefinition> myVertexTypeDefinitions, TransactionToken myTransaction, SecurityToken mySecurity) { #region check arguments myVertexTypeDefinitions.CheckNull("myVertexTypeDefinitions"); #endregion CheckAdd(myVertexTypeDefinitions); return null; }
public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { if (myCallingObject is String) { return new FuncParameter(((String)myCallingObject).ToLower()); } else { throw new FunctionParameterTypeMismatchException(typeof(String), myCallingObject.GetType()); } }
public QueryResult Import(String myLocation, IGraphDB myGraphDB, IGraphQL myGraphQL, SecurityToken mySecurityToken, TransactionToken myTransactionToken, UInt32 myParallelTasks = 1U, IEnumerable<string> myComments = null, UInt64? myOffset = null, UInt64? myLimit = null, VerbosityTypes myVerbosityType = VerbosityTypes.Silent) { ASonesException error; Stream stream = null; QueryResult result; #region Read querie lines from location try { #region file if (myLocation.ToLower().StartsWith(@"file:\\")) { //lines = ReadFile(location.Substring(@"file:\\".Length)); stream = GetStreamFromFile(myLocation.Substring(@"file:\\".Length)); } #endregion #region http else if (myLocation.ToLower().StartsWith("http://")) { stream = GetStreamFromHttp(myLocation); } #endregion else { error = new InvalidImportLocationException(myLocation, @"file:\\", "http://"); result = new QueryResult("", ImportFormat, 0L, ResultType.Failed, null, error); return result; } #region Start import using the AGraphDBImport implementation and return the result return Import(stream, myGraphDB, myGraphQL, mySecurityToken, myTransactionToken, myParallelTasks, myComments, myOffset, myLimit, myVerbosityType); #endregion } catch (Exception ex) { #region throw new exception error = new ImportFailedException(ex); result = new QueryResult("", ImportFormat, 0L, ResultType.Failed, null, error); return result; #endregion } finally { if (stream != null) { stream.Dispose(); } } #endregion }
public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { if (myCallingObject != null) { return new FuncParameter(true); } else { return new FuncParameter(false); } }
public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { if (!(myCallingObject is String)) { throw new FunctionParameterTypeMismatchException(typeof(String), myCallingObject.GetType()); } var substring = myCallingObject.ToString().Substring(Convert.ToInt32(myParams[0].Value), Convert.ToInt32(myParams[1].Value)); return new FuncParameter(substring); }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { var sw = Stopwatch.StartNew(); QueryResult result = null; _query = myQuery; String myAction = ""; IEnumerable<IVertex> myToBeUpdatedVertices = null; //prepare var vertexType = myGraphDB.GetVertexType<IVertexType>( mySecurityToken, myTransactionToken, new RequestGetVertexType(_Type), (stats, vtype) => vtype); if (_WhereExpression != null) { //validate _WhereExpression.Validate(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, vertexType); //calculate var expressionGraph = _WhereExpression.Calculon(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, new CommonUsageGraph(myGraphDB, mySecurityToken, myTransactionToken), false); //extract myToBeUpdatedVertices = expressionGraph.Select(new LevelKey(vertexType.ID, myGraphDB, mySecurityToken, myTransactionToken), null, true).ToList(); } if (myToBeUpdatedVertices != null && myToBeUpdatedVertices.Count() > 0) { //update result = ProcessUpdate(myToBeUpdatedVertices, myGraphDB, myPluginManager, mySecurityToken, myTransactionToken); myAction = "Updated"; } else { //insert result = ProcessInsert(myGraphDB, myPluginManager, mySecurityToken, myTransactionToken); myAction = "Inserted"; } if (result.Error != null) throw result.Error; sw.Stop(); return GenerateResult(sw.Elapsed.TotalMilliseconds, result, myAction); }
public override QueryResult GetResult( GQLPluginManager myPluginManager, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { var resultingVertices = new List<IVertexView>(); ASonesException error = null; if (!String.IsNullOrEmpty(_EdgeName)) { #region Specific edge var request = new RequestGetEdgeType(_EdgeName); var edge = myGraphDB.GetEdgeType<IEdgeType>(mySecurityToken, myTransactionToken, request, (stats, edgeType) => edgeType); if (edge != null) { resultingVertices = new List<IVertexView>() { GenerateOutput(edge, _EdgeName) }; } else { error = new EdgeTypeDoesNotExistException(_EdgeName, ""); } #endregion } else { #region All edges var resultingReadouts = new List<IVertexView>(); var request = new RequestGetAllEdgeTypes(); foreach (var edge in myGraphDB.GetAllEdgeTypes<IEnumerable<IEdgeType>>(mySecurityToken, myTransactionToken, request, (stats, edgeTypes) => edgeTypes)) { resultingReadouts.Add(GenerateOutput(edge, edge.Name)); } #endregion } if(error != null) return new QueryResult("", SonesGQLConstants.GQL, 0L, ResultType.Failed, resultingVertices, error); else return new QueryResult("", SonesGQLConstants.GQL, 0L, ResultType.Successful, resultingVertices); }
public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { if (myCallingObject is UInt64) { var dtValue = Convert.ToDateTime((UInt64)myCallingObject); return new FuncParameter((Int64)UNIXTimeConversionExtension.ToUnixTimeStamp(dtValue)); } else if (myCallingObject is DateTime) { return new FuncParameter(UNIXTimeConversionExtension.ToUnixTimeStamp((DateTime)myCallingObject)); } else { throw new InvalidTypeException(myCallingObject.GetType().ToString(), "DateTime"); } }
public BinaryExpressionDefinition GetBinaryExpression(GQLPluginManager myPluginManager, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { AExpressionDefinition right; var op = GetOperatorBySymbol(_OperatorSymbol); if (op == null) { throw new OperatorDoesNotExistException(_OperatorSymbol); } right = new ValueDefinition(1); var binExpr = new BinaryExpressionDefinition("*", _Expression, right); binExpr.Validate(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken); return binExpr; }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { QueryResult result = new QueryResult(myQuery, SonesGQLConstants.GQL, 0L, ResultType.Failed); try { var stat = myGraphDB.Truncate(mySecurityToken, myTransactionToken, new RequestTruncate(_TypeName), (stats) => stats); result = new QueryResult(myQuery, SonesGQLConstants.GQL, Convert.ToUInt64(stat.ExecutionTime.Milliseconds), ResultType.Successful); } catch(ASonesException e) { result = new QueryResult(myQuery, SonesGQLConstants.GQL, 0, ResultType.Failed, null, e); } return result; }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { QueryResult qresult = null; ASonesException error = null; try { var stat = myGraphDB.DropIndex(mySecurityToken, myTransactionToken, new RequestDropIndex(_TypeName, _IndexName, _IndexEdition), (stats) => stats); qresult = new QueryResult(myQuery, "sones.gql", Convert.ToUInt64(stat.ExecutionTime.Milliseconds), ResultType.Successful); } catch (ASonesException e) { error = e; } return new QueryResult(myQuery, "sones.gql", qresult.Duration, qresult.TypeOfResult, qresult.Vertices, error); }
public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { if (myCallingObject != null) { if (myCallingObject is Int64) { return new FuncParameter(UNIXTimeConversionExtension.FromUnixTimeStamp((Int64)myCallingObject)); } else { throw new InvalidTypeException(myCallingObject.GetType().Name, "Int64"); } } else { throw new NotImplementedException(); } }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { QueryResult qresult = null; Query = myQuery; try { var request = new RequestRebuildIndices(_Types); qresult = myGraphDB.RebuildIndices<QueryResult>(mySecurityToken, myTransactionToken, request, GenerateOutput); } catch (ASonesException e) { qresult.Error = e; } return qresult; }
public override FuncParameter ExecFunc(IAttributeDefinition myAttributeDefinition, Object myCallingObject, IVertex myDBObject, IGraphDB myGraphDB, SecurityToken mySecurityToken, TransactionToken myTransactionToken, params FuncParameter[] myParams) { StringBuilder resString = new StringBuilder(); if (myCallingObject != null) { if (myCallingObject is string) { resString.Append(myCallingObject as String); } } foreach (FuncParameter fp in myParams) { resString.Append(fp.Value.ToString()); } return new FuncParameter(resString.ToString()); }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { var sw = Stopwatch.StartNew(); QueryResult qresult = null; ASonesException error = null; try { qresult = _DescribeDefinition.GetResult(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken); } catch (ASonesException e) { error = e; } sw.Stop(); return new QueryResult(myQuery, "sones.gql", (ulong)sw.ElapsedMilliseconds, qresult != null ? qresult.TypeOfResult : ResultType.Failed, qresult != null ? qresult.Vertices : new IVertexView[0], error); }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { _queryString = myQuery; QueryResult result; try { result = myGraphDB.Insert<QueryResult>( mySecurityToken, myTransactionToken, CreateRequest(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken), CreateQueryResult); } catch (ASonesException e) { result = new QueryResult(_queryString, SonesGQLConstants.GQL, 0, ResultType.Failed, null, e); } return result; }
public override QueryResult Execute(IGraphDB myGraphDB, IGraphQL myGraphQL, GQLPluginManager myPluginManager, String myQuery, SecurityToken mySecurityToken, TransactionToken myTransactionToken) { _query = myQuery; QueryResult result; try { result = myGraphDB.CreateVertexTypes<QueryResult>( mySecurityToken, myTransactionToken, new RequestCreateVertexTypes(GenerateVertexTypePredefinitions()), CreateQueryResult); } catch (ASonesException e) { result = new QueryResult(_query, SonesGQLConstants.GQL, 0, ResultType.Failed, null, e); } return result; }
IEdgeType IEdgeTypeHandler.GetEdgeType(long myTypeId, TransactionToken myTransaction, SecurityToken mySecurity) { #region get static types if (Enum.IsDefined(typeof(BaseTypes), myTypeId) && _baseTypes.ContainsKey(((BaseTypes)myTypeId).ToString())) { return _baseTypes[((BaseTypes)myTypeId).ToString()]; } #endregion #region get from fs var vertex = Get(myTypeId, myTransaction, mySecurity); if (vertex == null) throw new KeyNotFoundException(string.Format("A edge type with name {0} was not found.", myTypeId)); return new EdgeType(vertex); #endregion }