private WBooleanExpression CreateBooleanExpression(GremlinVariableProperty variableProperty, object valuesOrPredicate) { if (valuesOrPredicate is string || valuesOrPredicate is int || valuesOrPredicate is bool) { WScalarExpression firstExpr = variableProperty.ToScalarExpression(); WScalarExpression secondExpr = SqlUtil.GetValueExpr(valuesOrPredicate); return(SqlUtil.GetEqualBooleanComparisonExpr(firstExpr, secondExpr)); } if (valuesOrPredicate is Predicate) { WScalarExpression firstExpr = variableProperty.ToScalarExpression(); WScalarExpression secondExpr = SqlUtil.GetValueExpr((valuesOrPredicate as Predicate).Value); return(SqlUtil.GetBooleanComparisonExpr(firstExpr, secondExpr, valuesOrPredicate as Predicate)); } throw new ArgumentException(); }
public override WTableReference ToTableReference() { List <WScalarExpression> parameters = new List <WScalarExpression>(); parameters.Add(SourceVariable.ToScalarExpression()); parameters.Add(EdgeVariable.ToScalarExpression()); var secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.DropEdge, parameters, this, GetVariableName()); return(SqlUtil.GetCrossApplyTableReference(null, secondTableRef)); }
internal List <WSelectElement> GetSelectElement(bool isToCompose1) { var selectElements = new List <WSelectElement>(); if (PivotVariable.GetVariableType() == GremlinVariableType.Null) { selectElements.Add(SqlUtil.GetSelectScalarExpr(SqlUtil.GetStarColumnReferenceExpr(), GremlinKeyword.TableDefaultColumnName)); return(selectElements); } if (isToCompose1) { selectElements.Add(SqlUtil.GetSelectScalarExpr(PivotVariable.ToCompose1(), GremlinKeyword.TableDefaultColumnName)); return(selectElements); } foreach (var projectProperty in ProjectedProperties) { WSelectScalarExpression selectScalarExpr; if (projectProperty == GremlinKeyword.Path) { selectScalarExpr = SqlUtil.GetSelectScalarExpr(ContextLocalPath.GetDefaultProjection().ToScalarExpression(), GremlinKeyword.Path); } else if (projectProperty == GremlinKeyword.TableDefaultColumnName) { GremlinVariableProperty defaultProjection = PivotVariable.GetDefaultProjection(); selectScalarExpr = SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), GremlinKeyword.TableDefaultColumnName); } else if (PivotVariable.ProjectedProperties.Contains(projectProperty)) { WScalarExpression columnExpr = PivotVariable.GetVariableProperty(projectProperty).ToScalarExpression(); selectScalarExpr = SqlUtil.GetSelectScalarExpr(columnExpr, projectProperty); } else { selectScalarExpr = SqlUtil.GetSelectScalarExpr(SqlUtil.GetValueExpr(null), projectProperty); } selectElements.Add(selectScalarExpr); } if (selectElements.Count == 0) { GremlinVariableProperty defaultProjection = PivotVariable.GetDefaultProjection(); selectElements.Add(SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), GremlinKeyword.TableDefaultColumnName)); } return(selectElements); }
public override WTableReference ToTableReference() { List <WScalarExpression> PropertyKeys = new List <WScalarExpression>(); if (SourceVertexVariableProperty != null) { PropertyKeys.Add(SourceVertexVariableProperty.ToScalarExpression()); } if (AdjEdgeVariableProperty != null) { PropertyKeys.Add(AdjEdgeVariableProperty.ToScalarExpression()); } if (RevAdjEdgeVariableProperty != null) { PropertyKeys.Add(RevAdjEdgeVariableProperty.ToScalarExpression()); } if (LabelVariableProperty != null) { PropertyKeys.Add(LabelVariableProperty.ToScalarExpression()); } foreach (var property in ProjectedProperties) { PropertyKeys.Add(SqlUtil.GetValueExpr(property)); } WTableReference secondTableRef = null; switch (EdgeType) { case WEdgeType.BothEdge: secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.BothE, PropertyKeys, this, GetVariableName()); break; case WEdgeType.InEdge: secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.InE, PropertyKeys, this, GetVariableName()); break; case WEdgeType.OutEdge: secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.OutE, PropertyKeys, this, GetVariableName()); break; } return(SqlUtil.GetCrossApplyTableReference(null, secondTableRef)); }
internal List <WSelectElement> GetSelectElement(bool isToCompose1) { var selectElements = new List <WSelectElement>(); if (this.PivotVariable.GetVariableType() == GremlinVariableType.NULL) { selectElements.Add( SqlUtil.GetSelectScalarExpr(SqlUtil.GetValueExpr(null), GremlinKeyword.TableDefaultColumnName)); return(selectElements); } if (isToCompose1) { selectElements.Add( SqlUtil.GetSelectScalarExpr(this.PivotVariable.ToCompose1(), GremlinKeyword.TableDefaultColumnName)); return(selectElements); } GremlinVariableProperty defaultProjection = this.PivotVariable.DefaultProjection(); selectElements.Add( SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), this.PivotVariable.DefaultProperty())); foreach (var property in this.ProjectedProperties) { WScalarExpression selectScalarExpr; if (property == GremlinKeyword.Path) { selectScalarExpr = ContextLocalPath.DefaultProjection().ToScalarExpression(); } else { selectScalarExpr = this.PivotVariable.ProjectedProperties.Contains(property) ? this.PivotVariable.GetVariableProperty(property).ToScalarExpression() : SqlUtil.GetValueExpr(null); } selectElements.Add(SqlUtil.GetSelectScalarExpr(selectScalarExpr, property)); } return(selectElements); }
internal List <WSelectElement> GetSelectElement(List <string> ProjectedProperties) { var selectElements = new List <WSelectElement>(); if ((PivotVariable is GremlinUnionVariable && HomeVariable is GremlinSideEffectVariable) || PivotVariable.GetVariableType() == GremlinVariableType.NULL) { selectElements.Add(SqlUtil.GetSelectScalarExpr(SqlUtil.GetStarColumnReferenceExpr())); return(selectElements); } if (ProjectedProperties != null && ProjectedProperties.Count != 0) { foreach (var projectProperty in ProjectedProperties) { WSelectScalarExpression selectScalarExpr; if (projectProperty == GremlinKeyword.TableDefaultColumnName) { GremlinVariableProperty defaultProjection = PivotVariable.DefaultProjection(); selectScalarExpr = SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), GremlinKeyword.TableDefaultColumnName); selectElements.Add(selectScalarExpr); } else if (ProjectVariablePropertiesList.All(p => p.Item2 != projectProperty)) { if (PivotVariable.ProjectedProperties.Contains(projectProperty)) { WScalarExpression columnExpr = PivotVariable.GetVariableProperty(projectProperty).ToScalarExpression(); selectScalarExpr = SqlUtil.GetSelectScalarExpr(columnExpr, projectProperty); selectElements.Add(selectScalarExpr); } else { selectScalarExpr = SqlUtil.GetSelectScalarExpr(SqlUtil.GetValueExpr(null), projectProperty); selectElements.Add(selectScalarExpr); } } } } else { selectElements.Add(SqlUtil.GetSelectScalarExpr(PivotVariable.DefaultProjection().ToScalarExpression(), GremlinKeyword.TableDefaultColumnName)); } if (IsPopulateGremlinPath) { selectElements.Add(SqlUtil.GetSelectScalarExpr(CurrentContextPath.DefaultProjection().ToScalarExpression(), GremlinKeyword.Path)); } foreach (var item in ProjectVariablePropertiesList) { selectElements.Add(SqlUtil.GetSelectScalarExpr(item.Item1.ToScalarExpression(), item.Item2)); } if (selectElements.Count == 0) { if (PivotVariable is GremlinTableVariable || (PivotVariable is GremlinUnionVariable && HomeVariable is GremlinSideEffectVariable)) { selectElements.Add(SqlUtil.GetSelectScalarExpr(SqlUtil.GetStarColumnReferenceExpr())); } else if (PivotVariable.GetVariableType() == GremlinVariableType.Table) { throw new Exception("Can't process table type"); } else { GremlinVariableProperty defaultProjection = PivotVariable.DefaultProjection(); selectElements.Add(SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression())); } } return(selectElements); }