internal virtual void OtherV(GremlinToSqlContext currentContext) { GremlinVariableProperty otherProperty = GetVariableProperty(GremlinKeyword.EdgeOtherV); GremlinBoundVertexVariable otherVertex = new GremlinBoundVertexVariable(otherProperty); currentContext.VariableList.Add(otherVertex); currentContext.TableReferences.Add(otherVertex); currentContext.SetPivotVariable(otherVertex); }
internal virtual void OutV(GremlinToSqlContext currentContext) { GremlinVariableProperty sourceProperty = GetVariableProperty(GremlinKeyword.EdgeSourceV); GremlinTableVariable outVertex = new GremlinBoundVertexVariable(sourceProperty); currentContext.VariableList.Add(outVertex); currentContext.TableReferences.Add(outVertex); currentContext.SetPivotVariable(outVertex); }
internal virtual void InV(GremlinToSqlContext currentContext) { GremlinVariableProperty sinkProperty = GetVariableProperty(GremlinKeyword.EdgeSinkV); GremlinTableVariable inVertex = new GremlinBoundVertexVariable(sinkProperty); currentContext.VariableList.Add(inVertex); currentContext.TableReferences.Add(inVertex); currentContext.SetPivotVariable(inVertex); }
internal void BothV(GremlinVariable lastVariable) { GremlinVariableProperty sourceProperty = lastVariable.GetVariableProperty(GremlinKeyword.EdgeSourceV); GremlinVariableProperty sinkProperty = lastVariable.GetVariableProperty(GremlinKeyword.EdgeSinkV); GremlinBoundVertexVariable bothVertex = new GremlinBoundVertexVariable(lastVariable.GetEdgeType(), sourceProperty, sinkProperty); VariableList.Add(bothVertex); TableReferences.Add(bothVertex); SetPivotVariable(bothVertex); }
internal override GremlinToSqlContext GetContext() { GremlinToSqlContext inputContext = GetInputContext(); GremlinTableVariable newVariable; if (inputContext.PivotVariable == null || inputContext.PivotVariable is GremlinFreeVertexVariable || inputContext.PivotVariable is GremlinContextVariable) { newVariable = new GremlinFreeVertexVariable(); } else { newVariable = new GremlinBoundVertexVariable(); } if (VertexIdsOrElements.Count > 0) { List <WBooleanExpression> booleanExprList = new List <WBooleanExpression>(); foreach (var id in VertexIdsOrElements) { if (GremlinUtil.IsNumber(id) || id is string) { WScalarExpression firstExpr = newVariable.GetVariableProperty(GremlinKeyword.NodeID).ToScalarExpression(); WScalarExpression secondExpr = SqlUtil.GetValueExpr(id); WBooleanComparisonExpression booleanExpr = SqlUtil.GetEqualBooleanComparisonExpr(firstExpr, secondExpr); booleanExprList.Add(booleanExpr); } else { throw new ArgumentException(); } } inputContext.AddPredicate(SqlUtil.ConcatBooleanExprWithOr(booleanExprList)); } inputContext.VariableList.Add(newVariable); inputContext.TableReferencesInFromClause.Add(newVariable); inputContext.SetPivotVariable(newVariable); return(inputContext); }
internal virtual void Out(GremlinToSqlContext currentContext, List <string> edgeLabels) { GremlinVariableProperty sourceProperty = GetVariableProperty(GremlinKeyword.NodeID); GremlinVariableProperty adjEdge = GetVariableProperty(GremlinKeyword.EdgeAdj); GremlinBoundEdgeTableVariable outEdgeTable = new GremlinBoundEdgeTableVariable(sourceProperty, adjEdge, WEdgeType.OutEdge); currentContext.VariableList.Add(outEdgeTable); currentContext.TableReferences.Add(outEdgeTable); currentContext.AddLabelPredicateForEdge(outEdgeTable, edgeLabels); GremlinVariableProperty sinkProperty = outEdgeTable.GetVariableProperty(GremlinKeyword.EdgeSinkV); GremlinBoundVertexVariable inVertex = new GremlinBoundVertexVariable(sinkProperty); currentContext.VariableList.Add(inVertex); currentContext.TableReferences.Add(inVertex); currentContext.SetPivotVariable(inVertex); }
internal void OutV(GremlinVariable lastVariable) { if (lastVariable is GremlinFreeEdgeTableVariable) { var path = GetPathFromPathList(lastVariable); if (path != null && path.SourceVariable != null) { if (IsVariableInCurrentContext(path.SourceVariable)) { SetPivotVariable(path.SourceVariable); } else { GremlinContextVariable newContextVariable = GremlinContextVariable.Create(path.SourceVariable); VariableList.Add(newContextVariable); SetPivotVariable(newContextVariable); } } else { GremlinVariableProperty sourceProperty = lastVariable.GetVariableProperty(GremlinKeyword.EdgeSourceV); GremlinTableVariable outVertex = lastVariable.CreateAdjVertex(sourceProperty); if (path != null) { path.SetSourceVariable(outVertex); } VariableList.Add(outVertex); TableReferences.Add(outVertex); SetPivotVariable(outVertex); } } else { GremlinVariableProperty sourceProperty = lastVariable.GetVariableProperty(GremlinKeyword.EdgeSourceV); GremlinTableVariable outVertex = new GremlinBoundVertexVariable(lastVariable.GetEdgeType(), sourceProperty); VariableList.Add(outVertex); TableReferences.Add(outVertex); SetPivotVariable(outVertex); } }
internal void Out(GremlinVariable lastVariable, List <string> edgeLabels) { GremlinVariableProperty sourceProperty = lastVariable.GetVariableProperty(GremlinKeyword.NodeID); GremlinVariableProperty adjEdge = lastVariable.GetVariableProperty(GremlinKeyword.EdgeAdj); GremlinVariableProperty labelProperty = lastVariable.GetVariableProperty(GremlinKeyword.Label); GremlinBoundEdgeTableVariable outEdgeTable = new GremlinBoundEdgeTableVariable(sourceProperty, adjEdge, labelProperty, WEdgeType.OutEdge); VariableList.Add(outEdgeTable); TableReferences.Add(outEdgeTable); AddLabelPredicateForEdge(outEdgeTable, edgeLabels); GremlinVariableProperty sinkProperty = outEdgeTable.GetVariableProperty(GremlinKeyword.EdgeSinkV); GremlinBoundVertexVariable inVertex = new GremlinBoundVertexVariable(outEdgeTable.GetEdgeType(), sinkProperty); VariableList.Add(inVertex); TableReferences.Add(inVertex); AddPath(new GremlinMatchPath(lastVariable, outEdgeTable, inVertex)); SetPivotVariable(inVertex); }
internal virtual void In(GremlinToSqlContext currentContext, List <string> edgeLabels) { GremlinVariableProperty sourceProperty = GetVariableProperty(GremlinKeyword.NodeID); GremlinVariableProperty adjReverseEdge = GetVariableProperty(GremlinKeyword.ReverseEdgeAdj); GremlinVariableProperty labelProperty = GetVariableProperty(GremlinKeyword.Label); GremlinBoundEdgeTableVariable inEdgeTable = new GremlinBoundEdgeTableVariable(sourceProperty, adjReverseEdge, labelProperty, WEdgeType.InEdge); currentContext.VariableList.Add(inEdgeTable); currentContext.TableReferences.Add(inEdgeTable); currentContext.AddLabelPredicateForEdge(inEdgeTable, edgeLabels); GremlinVariableProperty edgeProperty = inEdgeTable.GetVariableProperty(GremlinKeyword.EdgeSourceV); GremlinBoundVertexVariable outVertex = new GremlinBoundVertexVariable(edgeProperty); currentContext.VariableList.Add(outVertex); currentContext.TableReferences.Add(outVertex); //currentContext.PathList.Add(new GremlinMatchPath(outVertex, inEdgeTable, this)); currentContext.SetPivotVariable(outVertex); }
internal virtual void Both(GremlinToSqlContext currentContext, List <string> edgeLabels) { GremlinVariableProperty sourceProperty = GetVariableProperty(GremlinKeyword.NodeID); GremlinVariableProperty adjEdge = GetVariableProperty(GremlinKeyword.EdgeAdj); GremlinVariableProperty adjReverseEdge = GetVariableProperty(GremlinKeyword.ReverseEdgeAdj); GremlinBoundEdgeTableVariable bothEdgeTable = new GremlinBoundEdgeTableVariable( sourceProperty, adjEdge, adjReverseEdge, WEdgeType.BothEdge); currentContext.VariableList.Add(bothEdgeTable); currentContext.TableReferences.Add(bothEdgeTable); currentContext.AddLabelPredicateForEdge(bothEdgeTable, edgeLabels); GremlinVariableProperty otherProperty = bothEdgeTable.GetVariableProperty(GremlinKeyword.EdgeOtherV); GremlinBoundVertexVariable otherVertex = new GremlinBoundVertexVariable(otherProperty); currentContext.VariableList.Add(otherVertex); currentContext.TableReferences.Add(otherVertex); currentContext.SetPivotVariable(otherVertex); }
internal void OtherV(GremlinVariable lastVariable) { switch (lastVariable.GetEdgeType()) { case WEdgeType.Undefined: case WEdgeType.BothEdge: GremlinVariableProperty otherProperty = lastVariable.GetVariableProperty(GremlinKeyword.EdgeOtherV); GremlinBoundVertexVariable otherVertex = new GremlinBoundVertexVariable(lastVariable.GetEdgeType(), otherProperty); VariableList.Add(otherVertex); TableReferences.Add(otherVertex); SetPivotVariable(otherVertex); break; case WEdgeType.InEdge: OutV(lastVariable); break; case WEdgeType.OutEdge: InV(lastVariable); break; } }
internal void In(GremlinVariable lastVariable, List <string> edgeLabels) { GremlinVariableProperty sourceProperty = lastVariable.GetVariableProperty(GremlinKeyword.NodeID); GremlinVariableProperty adjReverseEdge = lastVariable.GetVariableProperty(GremlinKeyword.ReverseEdgeAdj); GremlinVariableProperty labelProperty = lastVariable.GetVariableProperty(GremlinKeyword.Label); GremlinBoundEdgeTableVariable inEdgeTable = new GremlinBoundEdgeTableVariable(sourceProperty, adjReverseEdge, labelProperty, WEdgeType.InEdge); VariableList.Add(inEdgeTable); TableReferences.Add(inEdgeTable); AddLabelPredicateForEdge(inEdgeTable, edgeLabels); GremlinVariableProperty edgeProperty = inEdgeTable.GetVariableProperty(GremlinKeyword.EdgeSourceV); GremlinBoundVertexVariable outVertex = new GremlinBoundVertexVariable(inEdgeTable.GetEdgeType(), edgeProperty); VariableList.Add(outVertex); TableReferences.Add(outVertex); AddPath(new GremlinMatchPath(outVertex, inEdgeTable, lastVariable)); SetPivotVariable(outVertex); }
internal void Both(GremlinVariable lastVariable, List <string> edgeLabels) { GremlinVariableProperty sourceProperty = lastVariable.GetVariableProperty(GremlinKeyword.NodeID); GremlinVariableProperty adjReverseEdge = lastVariable.GetVariableProperty(GremlinKeyword.ReverseEdgeAdj); GremlinVariableProperty adjEdge = lastVariable.GetVariableProperty(GremlinKeyword.EdgeAdj); GremlinVariableProperty labelProperty = lastVariable.GetVariableProperty(GremlinKeyword.Label); GremlinBoundEdgeTableVariable bothEdgeTable = new GremlinBoundEdgeTableVariable(sourceProperty, adjEdge, adjReverseEdge, labelProperty, WEdgeType.BothEdge); VariableList.Add(bothEdgeTable); TableReferences.Add(bothEdgeTable); AddLabelPredicateForEdge(bothEdgeTable, edgeLabels); GremlinVariableProperty otherProperty = bothEdgeTable.GetVariableProperty(GremlinKeyword.EdgeOtherV); GremlinBoundVertexVariable otherVertex = new GremlinBoundVertexVariable(bothEdgeTable.GetEdgeType(), otherProperty); VariableList.Add(otherVertex); TableReferences.Add(otherVertex); SetPivotVariable(otherVertex); }